Типичные ошибки PHP программиста

d85a4dec9a3726b734a9ab52dc5c8885[1]Ошибки, подобно этой, часто встречаются на сайтах:
Warning: Use of undefined constant LOCAL_SERVER — assumed ‘LOCAL_SERVER’ in /web/includes/page-definitions.php on line 13

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

Функция позволяет нам решить, какие ошибки мы хотим видеть.
В принципе, достаточно просто выключить показ всех ошибок (error_reporting (0)), но этого делать не стоит, потому что мы как раз и хотим видеть ошибки в php коде, вредящие безопасности.

Константа всех ошибок php — E_ALL.
В PHP 5 появилась константа E_STRICT, показывающая строгие замечания по поводу кода.
Разумеется, их желательно видеть, но они не входят в E_ALL, потому будем использовать числовое значение error_reporting (8191), которое вбирает всё, вплоть до новых ошибок PHP 6.

Примечание: error_reporting (E_ALL | E_STRICT) не подходит, ибо тогда PHP 4 будет ругаться, не зная, что такое E_STRICT. С численным же значением никаких проблем не будет.

Добавляем проверку на DEBUG — константу, выставленную в конфиге, и, с помощью set_error_handler, будем отлавливать ошибки в уже запущенном сервисе. Кстати, свой репортер ошибок должен возвращать true, иначе PHP выбросит стандартную ошибку.


<?php
        error_reporting(8191);
        if (!DEBUG)
        {
            function errorHandler ($errno, $errstr, $errfile, $errline)
            {
                // Запись в БД или отсылка по почте вебмастеру.

                if  ($errno == E_ERROR ||
                    $errno == E_PARSE ||
                    $errno == E_CORE_ERROR ||
                    $errno == E_COMPILE_ERROR ||
                    $errno == E_USER_ERROR)
                {
                    // Сообщение пользователю. Мол, «простите, облажались маленько»...
                }
                return true;
            }
            set_error_handler('errorHandler');
        }
    ?>

Запись навигация

Top