致命错误:找不到类,但已加载

时间:2012-11-18 18:23:45

标签: php

我正在尝试在实时服务器上运行我的脚本,但它正在暂存。

在本地,一切都很好(OS X),远程,CentOS / Nginx,我有一个致命的问题..脚本说我无法找到我的自定义数据库类。

使用get_declared_classes()查看已加载的内容,我可以看到我的自定义数据库类,它正在调用它的脚本/类之前加载。

它是通过我的自动加载器加载的:

spl_autoload_register(function ($className) {
if (file_exists(ROOT . DS . 'library' . DS . 'intranet' .DS . 'classes' . DS .strtolower($className) . '.php')){
    require_once(ROOT . DS . 'library' . DS . 'intranet' .DS . 'classes' . DS .strtolower($className) . '.php');
} else if (file_exists(ROOT . DS . 'application' . DS . 'controller' . DS . strtolower($className) . '.php')) {
    require_once(ROOT . DS . 'application' . DS . 'controller' . DS . strtolower($className) . '.php');
} else if (file_exists(ROOT . DS . 'application' . DS . 'model' . DS . strtolower($className) . '.php')) {
    require_once(ROOT . DS . 'application' . DS . 'model' . DS . strtolower($className) . '.php');
} else if (file_exists(ROOT . DS . 'application' . DS . 'view' . DS . strtolower($className) . '.php')) {
    require_once(ROOT . DS . 'application' . DS . 'view' . DS . strtolower($className) . '.php');
} else {
    throw new Exception("Class: $className not autoloaded!");
}
});

没有抛出异常。

Array ( [128] => Router 
        [129] => debug 
        [130] => database 
        [131] => SessionManager 
        [132] => security 
) 

Fatal error: Class 'database' not found in 
/home/nginx/domains/ckrisc/public/library/intranet/classes/sessionmanager.php 
on line 76

引导和文件包含如下:

require_once (ROOT . DS . 'config'  . DS . 'config.php'                         );
require_once (ROOT . DS . 'config'  . DS . 'directories.config.php'             );
require_once (library . DS . 'setup.php'        );
require_once (library . DS . 'Autoloader.php'   );
require_once (library . DS . 'Router.php'       );
require_once (library . DS . 'init.php'         );

在这种情况下,正在从sessionmanager调用类database,该调度在init.php中调用。

脚本失败了:

$sessionId = database::getInstance()->real_escape_string($sessionId);

关于我在这里缺少什么的想法?

2 个答案:

答案 0 :(得分:0)

也许你在声明autoload函数之前调用了这个类。

答案 1 :(得分:0)

事实证明,APC 3.1.13导致了一些问题