我使用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,但这是我第一次在服务器上试用它。 任何有关更好实践的建议都会有所帮助。 感谢
答案 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");