php попробуй отловить сообщение об ошибке - PullRequest
3 голосов
/ 16 августа 2010

У меня есть приложение, которое использует мыльный сервер для производства контента. Кроме того, аутентификация на сайте основана на отдельном сервере LDAP. Очевидно, что если один из них не работает или не отвечает, сайт не работает.

Я пытаюсь создать такой дизайн, чтобы я мог получать отчеты об ошибках для администраторов сайта, а также давать пользователю хорошее сообщение в случае, если сайт не работает. Отчеты об ошибках - это просто электронная почта, вставка базы данных или запись в текстовый файл на сервере PHP $ _COOKIE, $ _SERVER, $ _SESSION, $ _REQUEST и, возможно, исключение SoapFault. Эта информация поможет мне отладить любые потенциальные проблемы с сайтом, если они возникнут.

В настоящее время мой сайт оформлен следующим образом:

SoapClientInterface (defines soap functionality)
      / \
       |
       |   implements
       |
Client (the client implementing the interface, try/catch blocks on all soap calls here) 
      / \
       |
       |  extends
       |
 Authorization (asserts soap objects returned from server/ requests going to server 
               are appropriate for the user performing the request) 
      / \
       |
       | extends
       | 
  {all children classes using the soap interface defined on this level} 

Из вышеприведенной диаграммы :-) У меня есть класс Client, который включает в себя все мои блоки try-catch для исключений soapfault, и мне интересно, как лучше сделать две вещи с помощью catch: 1. уведомить пользователя о том, что действие не выполнено (все мои функции включены в блоки if / else, и если я определил, что операция не удалась, я перенаправляю пользователя на страницу состояния и сообщаю ему, что его действие не удалось.
2. сообщать администраторам сайта о ситуации для отладки (на данный момент эта функция представляет собой простую функцию, определенную на странице состояния, что когда на странице состояния появляется код ошибки, мы сбрасываем переменные Cookier, Server, Session и Request и отправляем их по электронной почте на сайт Администраторы.

Любые предложения по этому вопросу будут оценены или, если вам нужны разъяснения, пожалуйста, спросите.

РЕДАКТИРОВАТЬ: В моем опыте веб-программирования мои приложения обычно отображают статус действий пользователя на странице, на которой происходит действие, и не перенаправляют в другое место. Это первый раз, когда я кодирую приложение для выполнения действий пользователя и перенаправления на отдельную страницу для всех сообщений о состоянии. Должен ли я бить себя за то, что я делаю это таким образом, видит ли кто-нибудь смысл иметь единую страницу статуса для всех действий сайта или иметь класс / функцию, которая сообщает о состоянии на странице, на которой происходило действие? (Я спрашиваю об этом в отношении того, чтобы думать о дизайне страницы статуса самостоятельно и о том, как сообщать об ошибках, а что нет.)

1 Ответ

1 голос
/ 16 августа 2010

Ну лично я думаю, что это зависит от ошибки.По моему опыту, есть три типа исключений.Те, которые вы можете игнорировать, те, которые вы можете обойти, и те, которые вы используете для прекращения выполнения (исключение file_not_found можно игнорировать, если вы просто пытаетесь удалить файл, исключение resource_not_available можетобойтись, если есть альтернативные источники для ресурса, а исключение database_connection_failure потребует завершения приложения, если у вас не было резервной копии) ... Какой тип исключения был обнаружен, будет диктовать, что вы будете делать с ним.

Лично я устанавливаю глобальный обработчик исключений ... Затем в своем блоке перехвата я могу выбрать, следует ли очистить запрос, обработать его по-другому, продолжить (если это восстанавливаемое исключение),или повторно выдать исключение, если я не могу обработать его должным образом (ошибка запроса и т. д.).Если исключение попадает в верхнюю часть стека (глобальный обработчик), я регистрирую ошибку (я использую для этого таблицу базы данных) и выкидываю внутреннюю ошибку сервера 500.

Что касается перенаправления дляошибки, я не могу этого вынести.Если ошибка временная, то почему я не могу просто обновить страницу?Почему я должен вернуться (если я даже могу), чтобы повторить попытку ...

Если вы правильно выводите буфер, вы почти всегда сможете отображать страницу с ошибкой, не отображая никакой конфиденциальной информации для пользователя.(Я говорю почти, так как вы не можете ничего сделать для фатальной ошибки) ... В противном случае вы нарушаете HTTP-спецификацию (поскольку вы говорите, что существует временное перенаправление с текущей страницы, где произошла ошибка, а не собственно "произошла ошибка "заголовок состояния) ...

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