Обработка исключений в php … Я заметил некоторые причуды, которые кажутся утомительными для правильной реализации. Во-первых, большинство устаревших php-функций не генерируют исключений per se, кажется, что нужно реализовать set_error_handler и иметь функции throwback throw. ОК. Незначительное раздражение, но давайте посмотрим, что дает. ОЙ! Отлично, теперь все выдает исключение и, конечно, худшую часть: исключенные исключения останавливают скрипт.
Таким образом, после того, как мы прочитали руководство и другие сообщения, вам нужно было реализовать set_exception_handler , а также иметь обратный вызов set_error_handler, чтобы не выбрасывать E_NOTICE, E_WARNING.
До сих пор это правильно? После повторного чтения man-страницы кажется, что set_exception_handler останавливает скрипт на каждой ошибке, даже на восстановление, без возможности продолжения сценария.
Поэтому мне кажется, что это не так, я не могу остановить выполнение скриптов для уведомлений или предупреждений о событиях.
Есть ли обходные пути? Мне любопытно узнать, как другие справляются с исключениями и этими проблемами.
Это обработчик исключений, который написал Ларри Ульман в своей книге «PHP 5 Advanced» («Большая книга»).
Он борется с большей частью того, что вы говорите
function my_error_handler ($e_number, $e_message, $e_file, $e_line, $e_vars) { global $debug, $contact_email; $message = "An error occurred in script '$e_file' on line $e_line: \n<BR />$e_message\n<br />"; $message .= "Date/Time: " . date('njY H:i:s') . "\n<br />"; $message .= "<pre>" . print_r ($e_vars, 1) . "</pre>\n<BR />"; if ($debug) { echo '<p class="error">'.$message.'</p>'; } else { error_log($message, 1,$contact_email); if (($e_number != E_NOTICE) && ($e_number < 2048)) { echo '<p class="error">A system error occurred. We apologize for the inconvenience.</p>'; } } } set_error_handler('my_error_handler');
Примечание. Я просто набрал это, может быть опечаток.
Вам нужно будет определить переменные $ debug (если это правда, печатает сообщение об ошибке на веб-странице) и связаться с электронной почтой (если $ debug is false, отправляет электронное письмо на этот адрес об ошибке).
Вам нужно будет написать обработчик ошибок, чтобы проверить уровень генерируемой ошибки и решить, следует ли на это исключать исключение.
Второй аргумент для set_error_handler позволяет указать уровни ошибок, на которые будет запущен обработчик. Первый параметр для вашего обработчика – это номер уровня ошибки, поэтому вы можете проверить его внутри обработчика.