PHP:需要路径不适用于 cron 作业?

2022-08-30 15:01:09

我有一个需要包含此文件的 cron 作业:

require '../includes/common.php';

但是,当它通过cron作业(而不是我的本地测试)运行时,相对路径不起作用。cron 作业运行以下文件(在实时服务器上):

/home/username123/public_html/cron/mycronjob.php

这是错误:

Fatal error: require(): Failed opening required '../includes/common.php' 
(include_path='.:/usr/lib/php:/usr/local/lib/php') in 
/home/username123/public_html/cron/mycronjob.php on line 2

使用与 cron 作业相同的绝对格式,将位于common.php

/home/username123/public_html/includes/common.php

这是否意味着我必须将我的行2替换为:

require '/home/username123/public_html/includes/common.php';

?

谢谢!


答案 1

从技术上讲,php脚本在cron所在的位置运行;前任。如果 cron 在 /bin/cron 中,那么此语句将在 /bin/include/common.php 中查找 common.php。

所以,是的,您可能必须使用完整路径或使用set_include_path

set_include_path('/home/username123/public_html/includes/');
require 'common.php';

答案 2

由于所有人都尊重所有当前的答案,他们都去了“更改php代码”的方法。

我不喜欢仅仅为了从运行它而更改我的PHP文件,因为它降低了代码的可移植性,并增加了忘记更改一两个相对路径并破坏程序的机会。cron

相反,更改 cron 选项卡行的目录,并保持所有相对路径和 PHP 文件不变。例如

1 1 * * * cd /home/username/public_html/&& php -f script.php

检查此答案

也检查这篇文章,我会引用相对的部分

根据 PHP 脚本中的代码,它只有在从特定目录调用时才能正常运行。例如,如果脚本使用相对路径来包含文件,则仅当从正确的目录调用它时,它才会运行。以下命令显示如何从特定目录调用 PHP 脚本:

cd /home/username/public_html/; php -q script.php

推荐