我有以下文件结构:
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()函数中无济于事。请指教。
答案 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)
答案 3 :(得分:0)
因为您正在使用相对路径,所以当从浏览器和CLI调用时,它所在的PHP目录是不同的。
使用此功能更改目录以匹配浏览器目录。
更新:建议建议代码。
chdir(dirname(__FILENAME__));