2010-07-25 34 views
0

最近我不得不在我的Ubuntu機器上重新安裝我的開發站點,因爲我的系統在os更新後崩潰。 4天后,我的網站仍然沒有運行,因爲它應該。 每當我對數據庫執行一個操作時,它就停止工作。我的基於Zend Framework的站點無法解決的問題

例如在註冊新用戶時,我得到以下錯誤:

[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(); 
     } 
    } 
} 

我試圖調試我的代碼,但everyting去直到我對數據庫做了一些調整。但我不知道數據庫出了什麼問題。我沒有收到任何明確的錯誤消息。 有人可以幫我嗎?

一些更可能有趣的數據:

[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] 

BTW。我可以使用給定的用戶名和密碼登錄到我的數據庫命令行。


更新:今天我決定調查我的HTTP請求和我來到了一個錯誤500 我的Apache日誌不給任何相關的信息,我想。我發佈了上面的日誌。

任何想法的?

回答

0

我對Zend並不熟悉,所以這可能是在左邊的領域。看着那行,和屬性被訪問,它看起來可能

$this->_auth->getStorage()->read() 

沒有返回因此usr_role財產不能訪問你想要的對象。要測試,也許var_dump位於169行之前,看看會發生什麼...

難道是getStorageread實現使用需要特定配置的存儲機制嗎?也許會話,memcached或文件權限?