Вопрос по php – Обработка ошибок PHP

5

Спасибо всем и каждому заранее.

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

Было бы лучше создать мою собственную обработку ошибок или использовать что-то уже сделанное? Любые предложения, советы, вопросы, безусловно, приветствуются. В конечном счете, я бы посоветовал как-то зарегистрировать обработчик ошибок в PHP, чтобы мне просто нужно было выдать ошибку, а затем решить, что с ней делать и продолжать ли.

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

Что касается ошибок пользователей, я имею в виду такие вещи, как неверные URL-адреса (404), незаконный доступ к закрытым страницам и т. Д. Я знаю, что могу просто перенаправить на домашнюю страницу или просто выбросить диалоговое окно JavaScript, но я хочу иметь возможность элегантно обрабатывать эти ошибки и добавить больше пользовательских ошибок, как они становятся очевидными.

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

Также я позабочусь о разработке и работе с живыми серверами.

не ответ, но не забудьте позаботиться о среде разработки / производства :) marcgg

Ваш Ответ

4   ответа
0

я полностью тестирую свой проект на ключевых этапах разработки, проверяя журналы ошибок (я использую панель управления Plesk) для отслеживания ошибок php.

Когда проект работает, на ключевых этапах в классе или приложении я отправляю отчет об ошибке или отладке, используя созданный мной класс. Он отправляет отчет об ошибке на определенный адрес электронной почты с ключевой информацией, такой как: datetime, ip пользователя, ссылающаяся страница, полный URL и короткая заметка, которую я определяю при запуске / вызове класса отладки.

Я использую его для записи файла журнала, но обнаружил, что это небезопасно, поскольку каталог должен иметь chmod 777, и неэффективно, так как мне приходилось каждый раз получать доступ к последним журналам. Отправляя их мне по электронной почте, я сразу же решаю проблему.

Спасибо, я хотел бы построить его так, чтобы он мог регистрироваться на основе типа ошибки / уровня. Некоторые ошибки просто регистрируются, другие регистрируются, и пользователю показывается страница с ошибкой, а другие пользователь получает страницу с ошибкой, регистрируется и отправляется электронное письмо. Robert DeBoer
5

Use a global configuration setting or flag to switch between development and production. Don't use php errors when you have a choice: Prefer exceptions for your own error handeling. If you're using a library that doesn't use exceptions, detect the errors and throw your own exceptions. Use a top level exception catcher that displays exceptions in a way that's easy to read. If you place this try-catch-block strategically, you don't have to register a global exception handler. Always develop with error_handeling(E_ALL | E_STRICT) Catch PHP warnings and notices using set_error_handler(), and halt execution. This elimates a lot of bugs in advance, with very solid code as a result. The global error handeling code should be very light-weight, in order to avoid errors. There's always a risk for recursion when dealing with global error handlers. If the system is in production mode, don't display any details: Log the error, and generate a unique identifier that the user can refer to if they want to file a bug or report the error.
Спасибо за советы. Я никогда не думал об использовании set_error_handler () в процессе разработки, это имеет смысл. Robert DeBoer
5

to somehow register the error handler with PHP so that I would just need to throw the error and then decide what to do with it and whether to continue.

Вы можете сделать именно это, сset_error_handler () а такжеset_exception_handler ().

Не существует «одного правильного пути» для обработки ошибок, но вот некоторые вещи, которые следует учитывать.

trigger_error() is similar to throw new Exception in that they both escape out of the current execution immediately, only trigger_error() is not catchable. How do you want errors handled on a dev environment (show on screen?) versus in a production environment (logged and emailed?) You can use the above functions to essentially "convert" errors into exceptions, or vice versa Not all error types can be handled with a custom error handler
Я, вероятно, соединю это с некоторыми классами пользовательских исключений. Robert DeBoer
Спасибо, я не знал об этих функциях. Из-за ошибок на сервере dev я просто выскочу на экран (или консоль firebug) и запишу / отправлю электронное письмо на живой сервер в зависимости от типа и уровня ошибки. Robert DeBoer
2

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

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

Во время разработки я использую профилировщик PHP Particletree для записи ошибок и других соответствующих данных в консоль с трассировкой, сообщением и строкой. Это просто красиво - не могу говорить о его эффективности. Это может привести к взлому кода, но, о боже мой, это может быть спасение жизни, чтобы иметь простое понимание того, где и как произошли ошибки. Особенно полезно при работе с такими вещами, как веб-сервисы SOAP, которые будут вызывать у вас исключения, как никто другой.

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

Particletree's Profiler:http://particletree.com/features/php-quick-profiler/

Ранее я использовал класс журнала PEAR, и мне нравится в нем то, что он может обрабатывать множество различных механизмов ведения журналов (электронная почта, БД, файл, консоль и т. Д.). Я думаю использовать это для регистрации ошибок в правильном месте. Robert DeBoer

Похожие вопросы