Spl_autoload_register()无法在服务器上运行

时间:2013-09-17 19:20:17

标签: php

我使用spl_autoloader_register函数创建了一个简单的自动加载器,它在我的虚拟服务器上工作正常,但在服务器中我只得到“致命错误:未找到类'X'”。我在PHP 5.4的Mac上运行它,但它也适用于5.3版本的windows / ubuntu,这与我的物理服务器相同。我没有SSH访问权限。这是我的自动加载代码:

class Load
{   
    public static function autoload($class)
    {    
        $class = strtolower($class);        
        $lib =  $_SERVER['DOCUMENT_ROOT'] . BASENAME . "/libs/{$class}.php";        
        $model =  $_SERVER['DOCUMENT_ROOT'] . BASENAME . "/models/{$class}.class.php";  
        $controller =  $_SERVER['DOCUMENT_ROOT'] . BASENAME . "/controllers/{$class}.php";  

        if(is_readable($lib)){
            require_once $lib;  
        }elseif (is_readable($model)) {
            require_once $model;        
        }elseif (is_readable($controller)){
            require_once $controller;
        }
    }

}
spl_autoload_register("Load::autoload");

我总是使用spl for local apps,但这是我第一次在服务器上试用它。 任何有关更好实践的建议都会有所帮助。 感谢

1 个答案:

答案 0 :(得分:3)

一个好的做法是添加自己的包含路径。然后你可以放弃$ _SERVER ['DOCUMENT_ROOT']。 例如..

// Define path to library
define('MY_LIBRARY_PATH', realpath(dirname(__FILE__) . '/../insert_path_here_relativly'));

// Ensure library is on include_path
set_include_path(
    get_include_path() . PATH_SEPARATOR . MY_LIBRARY_PATH
);

然后你的自动加载器..

class Load
{   
    public static function autoload($class)
    {    
        $class = strtolower($class);        
        $lib =  MY_LIBRARY_PATH . "/libs/{$class}.php";        
        $model = MY_LIBRARY_PATH . "/models/{$class}.class.php";  
        $controller = MY_LIBRARY_PATH . "/controllers/{$class}.php";  

        if(is_readable($lib)){
            require_once $lib;  
        }elseif (is_readable($model)) {
            require_once $model;        
        }elseif (is_readable($controller)){
            require_once $controller;
        }
    }

}
spl_autoload_register("Load::autoload");