我最近将一个正在开发的Zend Framework应用程序移到生产服务器上来测试设置。
无论应用程序环境和文件权限如何,应用程序都会抛出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;
}
开发环境在Mac OS X上运行PHP 5.3.8,服务器在Ubuntu 11.10服务器上运行PHP 5.3.10。
我尝试在服务器上应用相同的PHP设置,但错误仍然存在。我认为这可能是一个路径许可,但我之前没有遇到过这个问题,Google也没有特别的帮助。
如果我在echo
来电之前尝试var_dump
或Zend_Auth
,我会得到结果。之后的任何事情都是无效的,服务器只会返回一个vanilla 500错误。
提前感谢您的帮助。
答案 0 :(得分: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'));
这将使您的应用程序处于开发模式,然后将出现完整错误,只需将其发布在此处。