2012-11-18 39 views
0

我試圖在活動服務器上運行我的腳本,但它正在暫存。致命錯誤:未找到類,但已加載

在本地,一切都很好(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'  ); 
在這種情況下

,類database正在從sessionmanager,這被稱爲在init.php調用。

腳本失敗的位置:

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

對我缺少的是什麼在這裏的任何想法?

+0

就在異常之前調用'get_declared_classes()'。檢查回溯 –

+0

@KarolyHorvath,我做了,它已被加載。 – bear

+1

從字面上看是否在例外的上一行中? –

回答

0

事實證明,APC 3.1.13導致了一些問題

0

也許你在自動加載函數聲明之前調用這個類。

+0

在我的開發環境中會不會發生同樣的情況?在配置和錯誤報告之後直接調用自動加載器。 – bear

+0

我提到了這種可能性,因爲它似乎**數據庫**是必須在任何其他進程之前調用的類之一。 –

+0

是的,這是第三個加載的類,請參閱我的文章中的數組。 – bear