【问题标题】:PHP Cron Job: Including file not working?PHP Cron Job:包括文件不起作用?
【发布时间】:2010-06-30 01:26:07
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • 您的错误消息显示您使用require('../include/common.php') 而不是require('common.php')。请使用实际的错误消息和实际代码更正您的问题。

标签: php include cron


【解决方案1】:

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

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

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

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

【讨论】:

【解决方案2】:

调用set_include_path() 会破坏之前的路径。该调用将使用您作为参数传递的任何内容替换先前的路径,因此如果您的任何代码加载其他库(即:PEAR/PECL 模块),它们将不再可访问,因为您已经丢弃了包含路径。你应该使用:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-15
    • 2013-08-06
    • 2015-04-04
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 2015-02-21
    • 2016-11-11
    相关资源
    最近更新 更多