PHP 包含在 cron 作业中

PHP include in a cron job

提问人:RichW 提问时间:2/20/2011 更新时间:7/1/2017 访问量:11998

问:

我正在尝试将PHP文件设置为cron作业,其中PHP文件包含其他PHP文件。

文件本身位于 /var/www/vhosts/domain.com/httpdocs/app/protected/classes/cron/runner.php

包含文件位于 /var/www/vhosts/domain.com/httpdocs/app/protected/config.php

如何包含运行程序.php中的配置文件?我试着做require_once('../../config.php'),但它说该文件不存在。我假设 cron 从不同的位置或其他东西运行 PHP。

cron 作业如下。

/usr/bin/php -q /var/www/vhosts/domain.com/httpdocs/app/protected/classes/cron/runner.php

有什么想法吗?

php cron

评论

0赞 Alastair Irvine 3/19/2014
相对路径的可能重复项在 cron PHP 脚本中不起作用

答:

16赞 Lekensteyn 2/20/2011 #1

在运行 PHP 之前,您的 cron 应该更改工作目录:

cd /var/www/vhosts/domain.com/httpdocs/app/protected/classes/cron/ && /usr/bin/php -q runner.php

请注意,如果目录不存在,PHP 将不会运行 runner.php。

评论

0赞 RichW 2/20/2011
完美,做得很好。没有意识到您可以从 cron 行运行其他命令。.
3赞 chelmertz 2/20/2011
您也可以尝试使用绝对路径,而不是使用 .那么你的第一种方法应该有效。../../confrealpath(dirname(dirname(__FILE__))).'/conf
1赞 Lekensteyn 2/20/2011
为什么要调用另一个函数 (realpath)?在 PHP < 5.3 上,我只使用 ,而对于 PHP >= 5.3 。但是cronjob的这种变化不需要改变PHP代码本身,这可以节省你在文件中搜索工作目录的可能依赖关系。dirname(dirname(__FILE__)).'/conf'dirname(__DIR__).'/conf'
1赞 Dunes 2/20/2011 #2

classes 或 cron 是符号链接吗?我似乎记得 php 评估的是真实路径而不是符号路径。

请考虑以下目录树:

/target/index.php

/path/sym -> /target

如果要从那时开始执行,则该语句的计算结果将为 NOTphp index.php/path/symrequire_once('../require.php');require_once('/require.php');require_once('/path/require.php');

2赞 Michael Moussa 2/20/2011 #3

应使用绝对路径。cron 可能没有从它所在的目录中运行脚本。

我建议使用:

require_once( dirname(__FILE__) '../../config.php )

__FILE__是一个特殊常量,用于引用您所在的文件。 将为您提供目录,该目录将计算为您希望包含的文件的绝对路径。dirname(...)

评论

0赞 Raptor 9/6/2016
对于 PHP 5.3.0+,可以替换为 .此外,上面的代码遗漏了dirname(__FILE__)__DIR__.
1赞 Ewald 5/23/2015 #4

您可以将 PHP 脚本中的工作目录更改为该脚本的位置:(或者,如果您的 PHP 版本低于 5.3:) 然后你可以做:chdir(__DIR__);chdir(dirname(__FILE__));require_once('../../config.php')