在本地主机上使用crontab执行cronjob没有结果


No results from cronjob using crontab at localhost

我试图在linux localhost下使用cronjob每1分钟更新一个mysql表,但没有成功。我使用wordpress与数据库进行连接。到目前为止我所做的:

在终端我打开crontab使用:

 crontab -e

和输入:

*/1 * * * * /usr/bin/php /var/www/.../myscript.php   

我保存了更改并检查了/var/spool/cron/crontabs中的文件。

myscript.php内容:

<?php
$url = (!empty($_SERVER['HTTPS'])) ? "https://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] : "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$url = $_SERVER['REQUEST_URI'];
$my_url = explode('wp-content' , $url); 
$path = $_SERVER['DOCUMENT_ROOT']."/".$my_url[0];
include_once $path . '/wp-config.php';
include_once $path . '/wp-includes/wp-db.php';
include_once $path . '/wp-includes/pluggable.php';
global $wpdb;
$wpdb->query("INSERT INTO mytable (id) VALUES ('1')");
?>

当我从浏览器运行myscript.php时,表得到更新。我做错了什么?

你意识到你没有webserver,因为$_SERVER变量不会有SERVER_NAME和REQUEST_URI?

因为$path永远不会被正确填充,你需要的文件将无法加载。

通常情况下,您会看到一些通知(如果不是这种情况,您的php.ini没有配置好),但代码仍然应该运行。只有$path只保留'/',从而从服务器的根目录加载所有内容。
文件不在那里,所以不能工作。

如果您需要以这种方式确定路径(在浏览时),则需要确定您是在浏览还是在CLI中运行它。
例如:

if (php_sapi_name() === 'cli') {
    $path = 'PATH THAT YOU KNOW, probably /var/www';
} else {
    $url = (!empty($_SERVER['HTTPS'])) ? "https://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] : "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    $url = $_SERVER['REQUEST_URI'];
    $my_url = explode('wp-content' , $url);
    $path = $_SERVER['DOCUMENT_ROOT']."/".$my_url[0];
}