Аргерих Л. О языке РНР. Часть 1. Страница 127


В РНРЗ эти константы не определялись; вместо них непосредственно задава­лись соответствующие числа, например 2 указывало уровень ERROR_WARNING. Использование констант вместо чисел - правильное решение, поскольку это оберегает от необходимости корректировать код при изменениях в схеме ну­мерации.

Обработка ошибок

Мы как среда выполнения РНР генерирует ошибки в потенциально

опасных или плохо запрограммированнных ситуациях. Однако среда вы­полнения не имеет понятия о логике программы и потому мало что может сделать - разве что вывести сообщение об ошибке. Правильно спроектиро­ванная программа должна уметь сама выявлять сбойные ситуации и обраба­тывать их, а также регистрировать такие случаи в журнале. Большинство функций РНР возвращает в случае ошибки false или 0. Исследовав возвра­щенное значение, можно определить, что следует делать - продолжить вы­полнение или установить направление дальнейших действий.

Подавление вывода сообщений об ошибках

Сообщения об ошибках, генерируемые средой выполнения, за исключением тех, которые вызваны проверкой входных данных, в идеале не следует пока­зывать конечному пользователю. В предыдущем разделе мы видели, как это можно сделать, вызвав функцию error_reporting() с аргументом 0. Другой способ добиться того же - использовать оператор @. Когда этот оператор предшествует вызову функции, сообщения об ошибках, которые она может сгенерировать, не выводятся.

Оператор @ может предшествовать любому выражению, но его нельзя ис­пользовать перед управляющими конструкциями, например fo reach. Доступ к сообщению об ошибке можно, тем не менее, получить через переменную $php_errormsg. Проверьте настройки в файле php. ini и убедитесь, что послед­няя ошибка хранится в этой переменной. Этой переменной всегда присваи­вается сообщение, соответствующее последней ошибке, поэтому сообщение должно быть обработано прежде, чем произойдет другая ошибка.

Теперь мы можем предпринять корректирующие действия, если возвраща­ется значение 0, и программно определить, выводить сообщение об ошибке или нет. Это иллюстрируется следующим примером:

<?php

//Error_Msg_Suppress. php

$verbose = 1; //устанавливает подробный или краткий вывод сообщения об ошибке $default_text = "A default line of text";

//Попытка открыть файл и прочесть из него строку текста if ($file = @fopen("nosuchfile.txt", "г")) {

$text - (fgets($file, 101)); } elseif ($verbose) {




Теперь seo оптимизация и продвижение сайта доступна каждому. Благодаря нашему форуму любой зарегистрированный пользователь сможет найти здесь интересующую информацию и оставить свой собственный комментарий. Мы ждем продуктивного общения и взаимовыгодных предложений.