2012-04-03 95 views
1

我最近将一个正在开发的Zend Framework应用程序移至生产服务器以测试安装。Zend Framework - Zend_Auth :: getInstance()导致500错误

无论应用程序环境和文件权限如何,应用程序都会引发500错误。经过手动调试,我已经缩小了在application/Bootstrap.php中致电Zend_Auth::getInstance();的罪魁祸首。

相关功能:

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

开发环境中运行Mac OS X上的PHP 5.3.8,而服务器的Ubuntu 11.10服务器上运行PHP 5.3.10。

我试过在服务器上应用相同的PHP设置,错误依然存在。我认为这可能是一个路径许可,但我之前没有遇到过这个问题,而Google也没有特别的帮助。

如果我在Zend_Auth调用之前尝试拨打echovar_dump,我会得到结果。之后的任何事情都是无效的,服务器只是返回一个香草500错误。

在此先感谢您的帮助。

+0

什么是Zend_Auth的存储类型和身份验证适配器?也许,试图访问会话(默认身份验证存储)或适配器时失败了? – Sachin 2012-04-03 05:24:31

+0

您能否告诉Zend 500是否生成了500错误,并且存在堆栈跟踪和异常消息,或者它与服务器配置有关,并且可能是您的Apache服务器错误日志中存在问题? – drew010 2012-04-03 05:33:33

+0

Apache的错误日志中没有任何东西,我可以运行更简单的PHP应用程序,没有任何问题。我正在使用LDAP Zend_Auth适配器,而Zend没有提供堆栈跟踪。我将不得不深入挖掘并在明天找到更多。 php.ini被设置为登录到它自己的文件,这也不给我任何有用的。 – 2012-04-03 07:08:49

回答

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扩展是这个适配器所必需的,但扩展没有加载'。我的php.ini文件中已经有'extension = php_pdo_mysql.so',但它似乎没有任何作用。此外,根据'phpinfo()',正在解析'/ etc/php5/apache2/conf.d/pdo_mysql.ini'中的另一个配置文件,其中包含'extension = pdo_mysql.so'。 – 2012-04-03 13:52:56

+0

解决了这个新问题,我的'php.ini'指向一个不正确的扩展路径。谢谢您的帮助。 – 2012-04-03 17:17:06