PHP Cron作业:包含文件不工作?

时间:2010-06-29 12:42:52

标签: php include cron

我每晚都会运行一个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';

文件'common.php'的位置如下

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

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

谢谢!

2 个答案:

答案 0 :(得分:9)

如果执行require('../includes/common.php'),则路径相对于当前工作目录遍历。

如果执行require('common.php'),则会在包含路径中以及调用require()的脚本目录中搜索文件。

要解决此问题,请首先更改crontab中的目录:

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

答案 1 :(得分:3)

当你做的时候调用set_include_path()会破坏上一个路径。调用将您传递的任何内容替换为上一个路径作为参数,因此,如果您的任何代码加载其他库(即:PEAR / PECL模块),则在您删除包含路径时将无法再访问它们。你应该使用:

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

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

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