我正在尝试将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
如何在runner.php中包含该配置文件?我尝试过require_once('../../ config.php'),但它说文件不存在..我认为cron从不同的位置运行PHP。
cron工作如下..
/ usr / bin / php -q /var/www/vhosts/domain.com/httpdocs/app/protected/classes/cron/runner.php
有什么想法吗?
答案 0 :(得分:15)
你的cron应该在运行PHP之前更改工作目录:
cd /var/www/vhosts/domain.com/httpdocs/app/protected/classes/cron/ && /usr/bin/php -q runner.php
请注意,如果该目录不存在,PHP将不会运行runner.php。
答案 1 :(得分:2)
您应该使用绝对路径。 cron可能没有从它所在的目录中运行脚本。
我建议使用:
require_once( dirname(__FILE__) '../../config.php )
__FILE__
是一个特殊常量,指向您所在的文件。dirname(...)
将为您提供目录,该目录将评估您希望包含的文件的绝对路径。
答案 2 :(得分:1)
类或cron是符号链接吗?我似乎记得php评估真实路径而不是符号路径。
考虑以下目录树:
/target/index.php
/ path / sym - > /目标
如果您要从php index.php
执行/path/sym
,则语句require_once('../require.php');
将评估为require_once('/require.php');
而不是require_once('/path/require.php');
答案 3 :(得分:1)
您可以将PHP脚本中的工作目录更改为该脚本的位置:
chdir(__DIR__);
(或者,如果您的PHP版本在5.3之前:chdir(dirname(__FILE__));
)
然后你可以这样做:
require_once('../../config.php')