2

我有以下文件结构:

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

4 回答 4

4

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

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

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

看:

于 2011-04-14T10:44:53.387 回答
2
 function __autoload($class_name) {
   require_once(dirname(__file__) . '/classes/'.$class_name.'.php');
 }
于 2011-04-14T10:45:06.990 回答
0

你是如何安排工作的?如果文件是 /path/to/cron.php,尝试类似:“cd /path/to && php cron.php”,您现在可能执行类似“php /path/to/cron.php”的操作,然后 $ PWD 不在 /path/to/ 那里,因此找不到类

于 2011-04-14T10:48:00.930 回答
0

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

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

更新:从建议中建议代码。

chdir(dirname(__FILENAME__));
于 2011-04-14T10:48:39.757 回答