![服务器错误 500:基于 Zend Framework 的站点存在无法定义的问题](https://linux22.com/image/519789/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%94%99%E8%AF%AF%20500%EF%BC%9A%E5%9F%BA%E4%BA%8E%20Zend%20Framework%20%E7%9A%84%E7%AB%99%E7%82%B9%E5%AD%98%E5%9C%A8%E6%97%A0%E6%B3%95%E5%AE%9A%E4%B9%89%E7%9A%84%E9%97%AE%E9%A2%98.png)
最近我不得不在 ubuntu 机器上重新安装开发网站,因为我的系统在操作系统更新后崩溃了。4 天后我的网站仍然无法正常运行。每当我执行包含数据库操作的操作时,它就会停止工作。
例如,当注册新用户时,我收到以下错误:
[Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP Notice: Trying to get property of non-object in /var/www/nrka2/application/bootstrap/Bootstrap.php on line 169, referer: http://nrka2/user/register
[Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP Stack trace:, referer: http://nrka2/user/register
[Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP 1. {main}() /var/www/nrka2/public/index.php:0, referer: http://nrka2/user/register
[Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP 2. require() /var/www/nrka2/public/index.php:2, referer: http://nrka2/user/register
[Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP 3. Zend_Application->bootstrap() /var/www/nrka2/application/application.php:23, referer: http://nrka2/user/register
[Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP 4. Zend_Application_Bootstrap_BootstrapAbstract->bootstrap() /var/www/Zend/ZendFramework-1.10.6/library/Zend/Application.php:355, referer: http://nrka2/user/register
[Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP 5. Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap() /var/www/Zend/ZendFramework-1.10.6/library/Zend/Application/Bootstrap/BootstrapAbstract.php:583, referer: http://nrka2/user/register
[Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP 6. Zend_Application_Bootstrap_BootstrapAbstract->_executeResource() /var/www/Zend/ZendFramework-1.10.6/library/Zend/Application/Bootstrap/BootstrapAbstract.php:619, referer: http://nrka2/user/register
[Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP 7. Bootstrap->_initViewSettings() /var/www/Zend/ZendFramework-1.10.6/library/Zend/Application/Bootstrap/BootstrapAbstract.php:666, referer: http://nrka2/user/register
[Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP Notice: Trying to get property of non-object in /var/www/nrka2/application/bootstrap/Bootstrap.php on line 169, referer: http://nrka2/css/main.css
[Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP Stack trace:, referer: http://nrka2/css/main.css
[Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP 1. {main}() /var/www/nrka2/public/index.php:0, referer: http://nrka2/css/main.css
[Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP 2. require() /var/www/nrka2/public/index.php:2, referer: http://nrka2/css/main.css
[Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP 3. Zend_Application->bootstrap() /var/www/nrka2/application/application.php:23, referer: http://nrka2/css/main.css
[Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP 4. Zend_Application_Bootstrap_BootstrapAbstract->bootstrap() /var/www/Zend/ZendFramework-1.10.6/library/Zend/Application.php:355, referer: http://nrka2/css/main.css
[Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP 5. Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap() /var/www/Zend/ZendFramework-1.10.6/library/Zend/Application/Bootstrap/BootstrapAbstract.php:583, referer: http://nrka2/css/main.css
[Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP 6. Zend_Application_Bootstrap_BootstrapAbstract->_executeResource() /var/www/Zend/ZendFramework-1.10.6/library/Zend/Application/Bootstrap/BootstrapAbstract.php:619, referer: http://nrka2/css/main.css
[Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP 7. Bootstrap->_initViewSettings() /var/www/Zend/ZendFramework-1.10.6/library/Zend/Application/Bootstrap/BootstrapAbstract.php:666, referer: http://nrka2/css/main.css
我的 Bootstrap 课程如下所示:
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{
/**
*
* @var unknown_type
*/
public $frontcontroller;
/**
*
* @var unknown_type
*/
protected $_logger;
/**
*
* @var unknown_type
*/
protected $_acl;
/**
*
* @var unknown_type
*/
protected $_auth;
/**
* Setup the logging
*/
protected function _initLogging()
{
$this->bootstrap('frontController');
$logger = new Zend_Log();
$writer = 'production' == $this->getEnvironment() ?
new Zend_Log_Writer_Stream(APPLICATION_PATH . '/../data/logs/app.log') :
new Zend_Log_Writer_Firebug();
$logger->addWriter($writer);
if ('production' == $this->getEnvironment()) {
$filter = new Zend_Log_Filter_Priority(Zend_Log::CRIT);
$logger->addFilter($filter);
}
$this->_logger = $logger;
Zend_Registry::set('log', $logger);
}
protected function _initDefaultModuleAutoloader(){
$this->_logger->info('Bootstrap '. __METHOD__);
$this->_resourceLoader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'EventManager',
'basePath' => APPLICATION_PATH . '/modules/eventManager',
));
$this->_resourceLoader->addResourceTypes(array(
'modelResource' => array(
'path' => 'models/resources',
'namespace' => 'Resource',
),
'service' => array(
'path' => 'services',
'namespace' => 'Service'
),
));
}
// @todo develop this function
protected function _initDbProfiler(){
$this->_logger->info('Bootstrap ' . __METHOD__);
if ('production' !== $this->getEnvironment()) {
$this->bootstrap('db');
$profiler = new Zend_Db_Profiler_Firebug('All DB Queries');
$profiler->setEnabled(true);
$this->getPluginResource('db')->getDbAdapter()->setProfiler($profiler);
}
}
/**
* Add Controller Action Helpers
*/
protected function _initActionHelpers()
{
$this->_logger->info('Bootstrap ' . __METHOD__);
Zend_Controller_Action_HelperBroker::addHelper(new SF_Controller_Helper_Acl());
Zend_Controller_Action_HelperBroker::addHelper(new SF_Controller_Helper_RedirectCommon());
Zend_Controller_Action_HelperBroker::addHelper(new SF_Controller_Helper_Service());
}
/**
*
* @return unknown_type
*/
protected function _initRoutes(){
$this->_logger->info('Initialize Routes '. __METHOD__);
$this->bootstrap('frontController');
$router = $this->frontController->getRouter();
$route = new Zend_Controller_Router_route(
'register',
array(
'controller' => 'user',
'action' => 'register'
)
);
$router->addRoute('register',$route);
$route = new Zend_Controller_Router_route(
'login',
array(
'controller' => 'user',
'action' => 'login'
)
);
$router->addRoute('login',$route);
$route = new Zend_Controller_Router_route(
'logout',
array(
'controller' => 'user',
'action' => 'logout'
)
);
$router->addRoute('logout',$route);
}
/**
*
* @return void
*/
protected function _initLocale(){
$this->_logger->info('Bootstrap '.__METHOD__);
$locale = new Zend_Locale('nl_NL');
Zend_Registry::set('Zend_Locale', $locale);
}
protected function _initAcl(){
$this->_acl = new EventManager_Service_Acl();
}
/**
*
* @return void
*/
protected function _initViewSettings(){
$this->_logger->info('Bootstrap '.__METHOD__);
$this->bootstrap('view');
$this->bootstrap('Acl');
$this->_view = $this->getResource('view');
//set encoding and doctype
$this->_view->setEncoding('UTF-8');
$this->_view->doctype('XHTML1_STRICT');
$this->_view->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=UTF-8');
$this->_view->headMeta()->appendHttpEquiv('Content-Language', 'en-US');
//@todo op een later moment moeten hier nog de stylesheets worden toegevoegd
$this->_view->headLink()->appendStylesheet('/css/main.css');
//$this->_view->headTitle('Event Manager');
/*
Set the head style.
$this->_view->headTitle->headStyle();
*/
$this->_view->headTitle()->setSeparator(' - ');
$this->_auth = Zend_Auth::getInstance();
$navigation = new Zend_Config_Xml(APPLICATION_PATH.'/configs/navigation.xml','nav');
$navContainer = new Zend_Navigation($navigation);
$this->_view->navigation($navContainer)->setAcl($this->_acl)->setRole($this->_auth->getStorage()->read()->usr_role); //THIS IS LINE 169!!!!!!!!!
}
/**
* Add graceful error handling to the dispatch, this will handle
* errors during Front Controller dispatch.
*/
public function run()
{
$errorHandling = $this->getOption('errorhandling');
try {
parent::run();
} catch(Exception $e) {
if (true == (bool) $errorHandling['graceful']) {
$this->__handleErrors($e, $errorHandling['email']);
} else {
throw $e;
}
}
}
/**
* Handle errors gracefully, this will work as long as the views,
* and the Zend classes are available
*
* @param Exception $e
* @param string $email
*/
protected function __handleErrors(Exception $e, $email)
{
header('HTTP/1.1 500 Internal Server Error');
$view = new Zend_View();
$view->addScriptPath(dirname(__FILE__) . '/../views/scripts');
echo $view->render('fatalError.phtml');
if ('' != $email) {
$mail = new Zend_Mail();
$mail->setSubject('Fatal error in application Storefront');
$mail->addTo($email);
$mail->setBodyText(
$e->getFile() . "\n" .
$e->getMessage() . "\n" .
$e->getTraceAsString() . "\n"
);
@$mail->send();
}
}
}
我尝试调试代码,但一切正常,直到我对数据库做了一些操作。但我不知道数据库出了什么问题。我没有收到任何明确的错误消息。有人能帮我吗?
还有一些可能有趣的数据:
[bootstrap]
resources.db.adapter = "PDO_MYSQL"
resources.db.isdefaulttableadapter = true
resources.db.params.dbname = "ladosa"
resources.db.params.username = "root"
resources.db.params.password = "root"
resources.db.params.hostname = "localhost"
resources.db.params.charset = "UTF8"
resources.db.params.profiler.enabled = true
resources.db.params.profiler.class = Zend_Db_Profiler_Firebug
Autoloadernamespaces[] = "Zend_"
Autoloadernamespaces[] = "SF_"
phpsettings.display_errors = 0
phpsettings.error_reporting = 8191
phpSettings.date.timezone = "Europe/Amsterdam"
bootstrap.path = APPLICATION_PATH"/bootstrap/Bootstrap.php"
pluginPaths.resource_ = APPLICATION_PATH"/resources"
resources.frontcontroller.moduledirectory = APPLICATION_PATH"/modules"
resources.frontcontroller.defaultmodule = "eventManager"
resources.frontcontroller.params.prefixDefaultModule = true
resources.frontcontroller.exceptions = false
resources.view[] = ""
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.view.encoding = "UTF-8"
resources.view.title = Rode kruis Vrijwilligers applicatie
;resources.view.helperPath.Default_View_Helper = APPLICATION_PATH "/modules/eventManager/views/helpers"
resources.layout.layout = "main"
[production:bootstrap]
[development:bootstrap]
;resources.frontController.throwExceptions = 1
;phpSettings.display_startup_errors=1
;phpSettings.display_errors = 1
;resources.frontcontroller.throwerrors =
[test:production]
顺便说一句。我可以使用给定的用户名和密码登录到我的数据库命令行。
更新:今天我决定调查我的 http 请求,结果出现了错误 500。我想我的 apache 日志没有提供任何相关信息。我发布了上面的日志。
有任何想法吗?
答案1
这看起来像是您使用的 auth 实例的问题(从第 163 行开始),特别是当您调用 getStorage() 时。您可以在 $this->_auth 上执行 var_dump 吗?您在哪里设置 auth 存储?