我在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()可以正常工作(不使用完整路径)。
谢谢。
答案 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
可能是在这种情况下唯一可行的解决方案。
希望有帮助。