正确的Cron作业命令,以使PHP require()工作

时间:2019-04-06 09:00:37

标签: php cron

我在GoDaddy共享主机上。在我的cron作业PHP脚本中,我使用 require()包括一些其他文件。当我手动使用cron作业PHP脚本时,可以正常工作(通过在地址栏中输入其url),但是执行cron作业时,cron脚本可以正常工作,但找不到所需的文件。

我有以下cron命令:

/usr/local/bin/php -q /home/username/public_html/domainname/cron/script.php >/dev/null 2>&1

我读过here,其中一种选择是在 require()中使用完整路径。另一个选择是修改cron命令,这是我想学习的内容。我的问题是如何修改上述cron命令,以便cron脚本中的 require()可以正常工作(不使用完整路径)。

谢谢。

1 个答案:

答案 0 :(得分:1)

这可能是修复它的最简单方法。

chdir(dirname(__FILE__)); //its been a while but I think __FILE__ works better with bind mounts and symlink but don't quote me on that.
//chdir(__DIR__);

我不太记得,但是我想我不得不在一个wordpress网站上使用过一次,我为此做了一份工作。如果我没记错的话,它有一些相对的目录,例如第三方插件等等。

否则,您可以在文件前使用__DIR__

我从不使用相对目录,而是使用常量

 define('BASE_DIR', __DIR__); //or something else besides __DIR__

或者我只是使用__DIR__而从没有这类问题。我喜欢确切地知道我的文件在哪里。

require __DIR__.'/somefile.php';
require BASE_DIR.'/somefile.php';

这实际上不是PHP问题,更多的是cron如何调用PHP文件的问题,因为相对路径将相对于crontab文件的位置。

摘要

根据我的经验,这就是关于使用__DIR__的知识,您无法控制第三方如何包含文件,因此chdir可能是在这种情况下唯一可行的解​​决方案。

希望有帮助。