由于找不到文件,PHP自动加载失败

时间:2014-05-01 19:36:53

标签: php autoload

我在GoDaddy共享主机帐户上托管。我的绝对托管路径是:

/家庭/内容/一个/ d /米/ admwta / HTML / eqflow /

我有一个像这样的目录结构:

eqflow
->api
   ->classes
     ->security
     ->utils
   ->v1

我已经在security或util目录中托管了每个文件一个类。所有文件都是小写的,对于类名,我遵循_的/或/的PEAR约定,因此安全目录目录中名为getpasswordhash.php的文件名为api_classes_security_getpasswordhash。

我有这个自动加载功能:

function replaceunderscores ($classname) {
$path = str_replace('_', DIRECTORY_SEPARATOR, $classname);
$fullpath = "/home/content/a/d/m/admwta/html/eqflow/".$path.".php";

echo $fullpath . " \n";
if (file_exists($fullpath))  {

    require_once ($fullpath);
}
else {
    echo "could not find file \n";
}
}
spl_autoload_register('replaceunderscores');

当我调用login.php时,它总是会失败并显示此消息

/home/content/a/d/m/admwta/html/eqflow/api/classes/security/getpasswordhash.php 找不到档案
致命错误:在 /home/content/a/d/m/admwta/html/eqflow/api/v1/login.php 上找不到“'api_classes_security_getpasswordhash”类 27

它没有在自动加载脚本中传递file_exists测试,我不知道为什么?您可以在echo语句中看到我回显完整路径我给出了文件的完整路径?

1 个答案:

答案 0 :(得分:2)

我通过改变自动加载功能中构建$ fullpath的方式来实现这一点。我使用$_SERVER["DOCUMENT_ROOT"]变量而不是硬编码路径。所以对我来说道路就变成了:

$fullpath =  $_SERVER["DOCUMENT_ROOT"]."/eqflow/".$path.".php";

完美无缺。我不确定硬编码文档根目录和使用服务器变量但使用服务器变量之间的区别是什么。