服务器错误 500:基于 Zend Framework 的站点存在无法定义的问题

服务器错误 500:基于 Zend Framework 的站点存在无法定义的问题

最近我不得不在 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 存储?

相关内容