2010-06-29 71 views
4

我每天晚上运行cron作业,但由于某种原因,它是说,我尝试包括文件inexistant:PHP Cron作业:包括文件不工作?

Warning: require(../includes/common.php): failed to open stream: No such file or directory in /home/fini7463/public_html/cron/journeyNotifications.php on line 2 
Fatal error: require(): Failed opening required '../includes/common.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/fini7463/public_html/cron/journeyNotifications.php on line 2 

下面的代码:

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

文件“共同.php'位置如下

public_html => cron  => journeyNotifications.php 
      => includes => common.php 

我甚至设置包含路径(如代码所示),但我仍然收到此错误。问题是什么?

谢谢!

+0

你的错误信息显示你需要('../ include/common.php')'而不是'require('common.php')'。请用实际的错误信息和实际的代码纠正你的问题。 – Sjoerd 2010-06-29 12:48:14

回答

8

如果你这样做require('../includes/common.php'),路径是相对于当前工作目录遍历。

如果您使用require('common.php'),则将在包含路径和调用require()的脚本的目录中搜索文件。

为了解决你的crontab这一点,首先更改目录:

cd /home/fini7463/public_html; php -f cronjob.php 
+4

-f是什么意思? – skywa1ker 2011-10-06 17:59:57

+0

@ skywa1ker,'-f'选项表示“解析并执行”文件。请参阅:http://www.php.net/manual/en/features.commandline.options.php – Sparky 2014-02-11 16:00:33

3

调用set_include_path()你做象垃圾一样清除之前的路径。该调用将您传递的参数替换为前一个路径,因此如果您的任何代码加载了其他库(即:PEAR/PECL模块),那么当您抛弃包含路径时,它们将不再可访问。您应该使用:

set_include_path(get_include_path() . PATH_SEPARATOR . '/home/fini7463/public_html/includes/'); 

这会将您的新路径附加到包含路径。

同样,当cron启动脚本时,您永远无法完全知道工作目录是什么。它可能是您运行脚本的用户的主目录,可能是/ tmp或完全是其他目录。如果您想在脚本中使用相对路径进行任何操作,则必须确保将工作目录设置为已知值。通过在crontab中使用'cd',或者在执行涉及相对路径的任何事情之前,在脚本中使用'chdir'。