Вопрос

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

Я пытаюсь создать дизайн таким образом, чтобы у меня были отчеты об ошибках для администраторов сайта, а также приятное сообщение для пользователей в случае, если сайт не работает.Сообщение об ошибке - это на самом деле просто электронное письмо, вставка в базу данных или запись в текстовый файл журнала на сервере PHPs $ _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, и мне интересно, как лучше всего сделать две вещи с catchs:1.уведомлять пользователя о сбое действия (вся моя функциональность находится в блоках if / else, и если я определяю, что операция завершилась неудачей, я перенаправляю пользователя на страницу состояния и сообщаю им, что их действие завершилось неудачей.
2.сообщите о ситуации администраторам сайта для отладки (на данный момент эта функциональность представляет собой простую функцию, определенную на странице состояния: когда страница состояния получает код ошибки, мы сбрасываем переменные Cookier, Server, Session и Request и отправляем это по электронной почте администраторам сайта.

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

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

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top