2012-04-03 7 views
1

Недавно я переместил приложение Zend Framework в разработке на производственный сервер, чтобы проверить установку.Zend Framework - Zend_Auth :: getInstance() вызывает ошибку 500

Независимо от условий приложения и прав доступа к файлу приложение выдает ошибку 500. После ручной отладки я сузил виновника, вызвав Zend_Auth::getInstance(); в application/Bootstrap.php.

Соответствующая функция:

protected function _initAutoLoad() { 
    $modelLoader = new Zend_Application_Module_Autoloader(array(
     'namespace' => '', 
     'basePath' => APPLICATION_PATH 
    )); 

    $acl = new Model_Acl(); 
    $auth = Zend_Auth::getInstance(); //<- this line breaks 

    $frontController = Zend_Controller_Front::getInstance(); 
    $frontController->registerPlugin(new Plugin_AccessCheck($acl, $auth)); 

    return $modelLoader; 
} 

Среда разработки работает PHP 5.3.8 на Mac OS X, а сервер работает PHP 5.3.10 на Ubuntu 11.10 Server.

Я пробовал применять те же настройки PHP на сервере, и ошибка сохраняется. Я думаю, что это, вероятно, разрешение на путь, но я не сталкивался с этой проблемой раньше, и Google не особенно полезен.

Если я попытаюсь сделать echo или var_dump что-нибудь перед вызовом Zend_Auth, я получаю результаты. Все, что после этого неэффективно, а сервер вместо этого возвращает ошибку vanilla 500.

Заранее благодарим за любую помощь.

+0

Какой тип хранения и адаптер для адаптера Zend_Auth? Может быть, он не работает, пытаясь получить доступ к сеансу (хранилище auth по умолчанию) или адаптер? – Sachin

+0

Можете ли вы сообщить, генерируется ли ошибка 500 Zend, и существует ли трассировка стека и сообщение об исключении, или это проблема с конфигурацией сервера и, возможно, что-то находится в вашем журнале ошибок сервера Apache? – drew010

+0

Не получается ничего в журналах ошибок Apache, и я могу без проблем запускать более простые PHP-приложения. Я использую адаптер LDAP Zend_Auth, а Zend не дает трассировку стека. Я должен буду копать дальше и находить больше завтра. php.ini установлен для входа в собственный файл, и это не дает мне ничего полезного. –

ответ

3

сделать этот

Zend_Session::start(); 

, прежде чем

$auth = Zend_Auth::getInstance(); 

Так окончательный код

protected function _initAutoLoad() { 
    $modelLoader = new Zend_Application_Module_Autoloader(array(
     'namespace' => '', 
     'basePath' => APPLICATION_PATH 
    )); 
Zend_Session::start(); 
    $acl = new Model_Acl(); 
    $auth = Zend_Auth::getInstance(); //<- this line breaks 

    $frontController = Zend_Controller_Front::getInstance(); 
    $frontController->registerPlugin(new Plugin_AccessCheck($acl, $auth)); 

    return $modelLoader; 
} 

Если это не решает затем откройте index.php (внутри общественной директории) и сделать

defined('APPLICATION_ENV') 
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development')); 

Это приведет ваше приложение в режим разработки, после чего появится полная ошибка, просто разместив его здесь.

+0

Ближе. Теперь я получаю ошибки отладки: «Для этого адаптера требуется расширение PDO, но расширение не загружено». У меня уже есть 'extension = php_pdo_mysql.so' в моем файле php.ini, но это, похоже, не имеет никакого эффекта. Кроме того, согласно 'phpinfo()', анализируется другой файл конфигурации в '/ etc/php5/apache2/conf.d/pdo_mysql.ini', который содержит' extension = pdo_mysql.so'. –

+0

Устранена новая проблема, мой 'php.ini' указывал на неправильный путь расширения. Спасибо за помощь. –

Смежные вопросы