Учебник РНР
Назад Приложение B. Переход от PHP 3 к PHP 4 Вперёд

Сообщение об ошибке

Изменения конфигурации

В PHP 3 уровень серьёзности ошибки устанавливался как простое цифровое значение, образуемое суммированием чисел, относящихся к ошибкам разных уровней. Обычно это были значения 15 для сообщения обо всех ошибках и 7 для простых уведомляющих сообщений.

В PHP 4 имеется большой набор уровней ошибок и предупреждений, а также разборщик конфигурации, который позволяет теперь использовать символьные константы для установки нужного поведения.

Уровни сообщений теперь должны конфигурироваться явно с отделением уровней предупреждений, которые не должны генерировать сообщения об ошибках, x-ируя их из символьной константы E_ALL. Звучит сложно? Хорошо, скажем, вы хотите, чтобы система сообщений об ошибках выводила всё, кроме предупреждений простого стиля, которые категоризированы символьной константой E_NOTICE. Затем вы хотите поместить в ваш php.ini следующее: error_reporting = E_ALL & ~ ( E_NOTICE ). Если вы хотите подавить также и предупреждения, вы добавляете в соответствующую константу скобки и используете бинарную операцию '|':
error_reporting= E_ALL & ~ ( E_NOTICE | E_WARNING).

Предупреждение!

Использование старых значений 7 и 15 для установки сообщений об ошибках это плохая идея, так как при этом подавляются некоторые новые добавленные классы ошибок, в том числе - ошибки разборщика. Это может привести к весьма странному поведению, так как скрипты не смогут больше работать без показа сообщений об ошибках.

В прошлом это приводило также к появлению большого количества невоспроизводимых сообщений о bug'ах, когда люди сообщали о проблемах машины скриптов, которые невозможно было отследить, поскольку TRUE case обычно имел отсутствующий символ '}' в нужном файле, о чём разборщик не мог сообщить по причине неправильно сконфигурированной системы сообщений об ошибках.

Поэтому проверка установок системы сообщений об ошибках это первое, что нужно сделать, если ваш скрипт тихо умирает/die. Zend-машину можно считать в данное время в достаточной степени доработанной, чтобы не получать такого странного поведения.

Дополнительные предупреждения

В большом количестве существующего кода PHP 3 используются конструкции языка, которые должны рассматриваться как очень плохой стиль программирования, поскольку работа этого кода может быть легко нарушена изменениями в других местах. PHP 4 ввёл большое количество уведомляющих сообщений в ситуациях, где PHP 3 этого не делал. Это легко исправить, отключив сообщения E_NOTICE, но обычно лучше скорректировать код.

Наиболее общий случай вывода уведомлений теперь - это использование незакавыченных строковых констант в качестве индексов массивов. PHP 3 и 4 не интерпретируют эти строки, если не известно ключевое слово или константа с этим именем, но если константа с этим именем была определена где-нибудь ещё в коде, это может нарушить работу вашего скрипта. Это может даже представлять опасность для защиты, если взломщик переопределяет строковые константы способом, когда скрипты дают права доступа, которые не предполагались. Так, PHP 4 будет теперь предупреждать вас об использовании незакавыченной строковой константы, как, например, в $_SERVER[REQUEST_METHOD]. Изменение этого на $_SERVER['REQUEST_METHOD'] осчастливит разборщик и значительно улучшит стиль и повысит безопасность вашего кода.

Другое, о чём сейчас также сообщает PHP 4, это использование неинициализированных переменных или элементов массива.

НазадОглавление Вперёд
Поведение разборщика ВверхИнициализаторы


Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости