PHP: Как мы можем отключить сообщения об исключениях на рабочем сайте и сохранить их в dev? - PullRequest
4 голосов
/ 06 сентября 2010

Как можно отключить сообщения об исключениях на рабочем сайте и сохранить их в dev?

Пример:

try{
  //some code
}

catch(Exception $e){
   echo $e.getMessage();
}

Редактировать :

Как это сделать на Zend Framework ?(файл .ini, но как насчет кода исключения, который должен быть записан?)

Изменить 2:

Если мой пример не может работать, как Zend Framework отключает сообщения об исключенияхapplication.ini?

resources.frontController.params.displayExceptions = 0

Ответы [ 5 ]

6 голосов
/ 06 сентября 2010

Я не уверен, правильно ли мы вас понимаем.

В других ответах рассказывается, как сгенерировать исключение в отношении параметров среды.

Ответ прост:исключения должны выдаваться всегда , не касаясь среды.

Если вам нужно, вы можете обрабатывать их по-разному, но вам следует избегать условных исключений.

Есть много способовВы можете настроить обработку ошибок в своем приложении:

  • ini-настройки в apache или .htaccess config
  • , используя те же настройки через функции php (например, error_reporting())
  • настройка вашего фронт-контроллера (с использованием application.ini или получение экземпляра фронт-контроллера в Bootstrap)
  • обновление обработчика ошибок ZF по умолчанию
  • создание собственного обработчика ошибок

Самым простым кажется application.ini:

phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.throwExceptions = 1
resources.frontController.params.displayExceptions = 1

В разделе разработки application.ini вы можете использовать нули там, где это необходимо.

Я рекомендую использовать ресурс Log Application для обработкиисключения напроизводственная среда.

1 голос
/ 06 сентября 2010

Моя дикая догадка - менять только ErrorController и его скрипты просмотра. Вот несколько случайных ошибок. Phtml:

<code><?php echo $this->message; ?>

<?php if ('development' == APPLICATION_ENV): ?>

<h3>Exception information:</h3>
<p>
  <b>Message:</b> <?php echo $this->exception->getMessage() ?>
</p>

<h3>Stack trace:</h3>
<pre><?php echo $this->exception->getTraceAsString() ?>

Параметры запроса:

<?php echo var_export($this->request->getParams(), true) ?>
<? php endif?>

Таким образом, сообщение об ошибке всегда отображается, но информация о самой ошибке только в dev.

1 голос
/ 06 сентября 2010

В этом коде нет пути. Вы должны изменить код.

Например, сделать функцию show_error (), которая печатает ошибку на dev, и ничего не делает на prod (просто разные реализации).

1 голос
/ 06 сентября 2010

Если вы хотите печатать сообщения, вы можете заключить код в функцию (или метод статического класса), которая проверяет CONSTANT для значений DEVELOPMENT | PRODUCTION

пример:

function printMessage($Exception) {
    if(DEV_ENVIRONMENT) {
          echo $Exception->getMessage();
     }
}
1 голос
/ 06 сентября 2010

Полагаю, в вашем конфигурационном файле должен быть какой-то флаг, указывающий установку как dev или production. Затем, целое число echo $e.getMessage(), вы можете передать его функции, которая распечатывает его, если он является сервером разработки, и остается работоспособной, если он работает.

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