2012-04-03 3 views
1

Ich habe kürzlich eine in-Entwicklung Zend Framework-Anwendung auf einen Produktionsserver verschoben, um das Setup zu testen.Zend Framework - Zend_Auth :: getInstance() verursacht 500 Fehler

Ungeachtet der Anwendungsumgebung und der Dateiberechtigungen löst die Anwendung einen 500-Fehler aus. Nach manuellem Debuggen habe ich den Täter auf Zend_Auth::getInstance(); in application/Bootstrap.php eingegrenzt.

Relevante Funktion:

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; 
} 

Entwicklungsumgebung PHP 5.3.8 unter Mac OS X ausgeführt wird, und der Server PHP 5.3.10 auf Ubuntu 11.10 Server ausgeführt wird.

Ich habe versucht, die gleichen PHP-Einstellungen auf dem Server anzuwenden, und der Fehler bleibt bestehen. Ich denke, es ist wahrscheinlich eine Pfad-Erlaubnis, aber ich habe dieses Problem vorher nicht kennengelernt und Google ist nicht besonders hilfreich. Wenn ich versuche, echo oder var_dump irgendetwas vor dem Zend_Auth Anruf, bekomme ich Ergebnisse. Alles danach ist ineffektiv und der Server gibt stattdessen nur einen Vanille 500 Fehler zurück.

Vielen Dank im Voraus für jede Hilfe.

+0

Was ist der Speichertyp und der Auth-Adapter für Zend_Auth? Vielleicht versagt es beim Zugriff auf die Session (der Standard-Auth-Speicher) oder den Adapter? – Sachin

+0

Können Sie sagen, ob der 500-Fehler von Zend generiert wurde und eine Stack-Trace- und Exception-Meldung vorliegt oder ein Problem mit der Server-Konfiguration vorliegt und möglicherweise etwas in Ihrem Apache-Server-Fehlerprotokoll ist? – drew010

+0

Ich bekomme nichts in den Fehlerprotokollen von Apache, und ich kann einfachere PHP-Anwendungen ohne Probleme ausführen. Ich benutze den LDAP-Zend_Auth-Adapter und Zend gibt keinen Stack-Trace. Ich muss weiter nachforschen und morgen mehr finden. php.ini ist so eingestellt, dass es sich in seiner eigenen Datei anmeldet, und das gibt mir auch nichts nützliches. –

Antwort

3

tun dies

Zend_Session::start(); 

vor

$auth = Zend_Auth::getInstance(); 

So endgültigen Code

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; 
} 

Wenn dies nicht dann offen index.php löst (im öffentlich dir) und tut

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

Dies bringt Ihre Anwendung in den Entwicklungsmodus, dann erscheint der vollständige Fehler einfach hier.

+0

Näher. Jetzt bekomme ich Debug-Fehler: ''Die PDO-Erweiterung ist für diesen Adapter erforderlich, aber die Erweiterung ist nicht geladen'. Ich habe bereits 'extension = php_pdo_mysql.so' in meiner php.ini Datei, aber es scheint keine Wirkung zu haben. Zusätzlich wird nach 'phpinfo()' eine weitere Konfigurationsdatei unter '/etc/php5/apache2/conf.d/pdo_mysql.ini' geparst, die' extension = pdo_mysql.so' enthält. –

+0

Das neue Problem wurde behoben, meine 'php.ini' zeigte auf einen falschen Erweiterungspfad. Danke für die Hilfe. –