Неопределимая проблема с моим сайтом на основе Zend Framework - PullRequest
0 голосов
/ 25 июля 2010

В последнее время мне пришлось переустанавливать сайт разработки на моей машине с 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

Мой класс начальной загрузки выглядит так:

  <?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 Ответ

0 голосов
/ 25 июля 2010

Я не знаком с Зендом, так что это может быть отключено в левом поле.Если посмотреть на эту строку и узнать, какие свойства доступны, вероятно, что

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

не возвращает нужный объект, поэтому свойство usr_role не может быть доступно.Чтобы проверить, возможно var_dump этот бит непосредственно перед строкой 169 и посмотреть, что произойдет ...

Может ли быть, что реализация getStorage или read использует механизм хранения, который требует определенной конфигурации?Может быть, сессии, memcached или файл разрешений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...