作为cronjob运行时PHP自动加载问题

时间:2011-04-14 10:42:15

标签: php ssh cron autoload realpath

我有以下文件结构:

cron.php /includes/functions.php /classes/ClassName.php

corn.php包含functions.php调用new ClassName()。而functions.php包含原始自动加载器:

 function __autoload($class_name) {
   require_once('classes/'.$class_name.'.php');
 }

从浏览器调用cron.php时工作正常。但是,如果从shell运行它会给出“没有这样的文件或目录”致命错误。我试图将'classes /'.$ class_name。'。php'包装到realpath()函数中无济于事。请指教。

4 个答案:

答案 0 :(得分:4)

您可以使用dirname(__FILE__)获取自动加载PHP脚本的“绝对”当前目录。

您可以执行类似的操作(假设您的自动加载脚本位于项目的子目录中):

function __autoload($class_name) {
  require_once(dirname(__FILE__).'/../classes/'.$class_name.'.php');
}

请参阅:

答案 1 :(得分:2)

 function __autoload($class_name) {
   require_once(dirname(__file__) . '/classes/'.$class_name.'.php');
 }

答案 2 :(得分:0)

你是怎么安排工作的?如果文件是/path/to/cron.php,请尝试以下方法: “cd / path / to&& php cron.php”,你现在可能会做类似“php /path/to/cron.php”的事情,而且$ PWD不是/ path / to /那么找不到类

答案 3 :(得分:0)

因为您正在使用相对路径,所以当从浏览器和CLI调用时,它所在的PHP目录是不同的。

使用此功能更改目录以匹配浏览器目录。

更新:建议建议代码。

chdir(dirname(__FILENAME__));