我有以下文件结构:
cron//显然也包括/类/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()函数中,但无济于事。请建议。
您可以使用dirname(__FILE__)
来获取自动加载PHP脚本的"绝对"当前目录。
你可以这样做(假设你的自动加载脚本是在你的项目的子目录):
function __autoload($class_name) {
require_once(dirname(__FILE__).'/../classes/'.$class_name.'.php');
}
:
- http://php.net/manual/en/language.constants.predefined.php
- http://fr.php.net/manual/en/function.dirname.php
function __autoload($class_name) {
require_once(dirname(__file__) . '/classes/'.$class_name.'.php');
}
您是如何安排作业的?如果文件是/path/to/cron.php,试试这样做:"cd/path/to &&php cron.php",你可能会写"php/path/to/cron.php"而$PWD不是/path/to/there所以找不到classes
因为你使用的是相对路径,从浏览器调用和从CLI调用时它所在的PHP目录是不同的。
使用此功能更改目录以匹配浏览器目录。
UPDATE: Suggest code from suggestion.
chdir(dirname(__FILENAME__));