6

Как получить полезные сообщения об ошибках в PHP?

1

Описание проблемы

Я часто запускаю PHP-скрипты и получаю в ответ просто пустой экран. Никаких сообщений об ошибках — только белый экран. Причиной может быть простая синтаксическая ошибка (например, неправильная скобка или отсутствующая точка с запятой), неудачный вызов функции или что-то совершенно иное.

Понять, в чем именно проблема, бывает крайне сложно. Я стараюсь закомментировать код, вставляю "echo" везде, где только могу, и так далее, пытаясь сузить круг поиска. Но, должно же быть более эффективное решение, верно?

Существует ли способ заставить PHP выводить полезные сообщения об ошибках, как это делает Java?

5 ответ(ов)

4

Чтобы включить отображение всех ошибок в PHP, вы можете использовать следующий код:

ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);

Эти настройки активируют отображение ошибок как при запуске скрипта, так и во время выполнения.

Дополнительно, вы можете ознакомиться с следующими ссылками для более подробной информации:

1

Ваш код, судя по всему, правильно настроен для отображения всех ошибок в PHP. Однако, вы правы: если страница остается пустой, это может указывать на проблему в обработчике завершения (shutdown handler).

Ваша функция ShutdownHandler() может не обрабатывать ошибки должным образом. Вот несколько рекомендаций для диагностики проблемы:

  1. Проверка ошибок в ShutdownHandler(): Если в обработчике завершения возникает ошибка, она не будет обрабатываться, так как сама функция вызывается по окончании скрипта. Убедитесь, что в ShutdownHandler() нет ошибок. Можете временно упростить этот обработчик, например:

    function ShutdownHandler()
    {
        $error = error_get_last();
        if ($error !== NULL) {
            ErrorHandler($error['type'], $error['message'], $error['file'], $error['line']);
        }
    }
    
  2. Проверка настроек хостинга: Убедитесь, что настройки вашего сервера позволяют отображать ошибки. Иногда хостинг-провайдер может игнорировать настройки display_errors в конфигурации PHP.

  3. Тестирование кода без изменений: Поскольку вы копировали код из своего CMS, имеет смысл протестировать его на чистом PHP скрипте, чтобы исключить влияние других частей вашего приложения.

  4. Логирование ошибок: Если вы не видите ошибок на экране, можно попробовать перенаправить их в файл логов. Например:

    ini_set('log_errors', 'On');
    ini_set('error_log', '/path/to/your/logfile.log');
    
  5. Убедитесь, что PHP настроен на выдачу ошибок: Проверьте, что в php.ini не установлены опции, подавляющие вывод ошибок, такие как display_startup_errors или error_reporting.

Попробуйте эти действия, и если проблема сохранится, пожалуйста, добавьте больше информации о конфигурации вашего окружения, так как это может помочь в диагностике.

0

Чтобы вывести ошибки на экран при отладке, вы можете добавить следующие строки в файл, который хотите отлаживать:

error_reporting(E_ALL);
ini_set('display_errors', '1');

Эти настройки переопределяют значения по умолчанию в файле php.ini, которые обычно заставляют PHP записывать ошибки только в лог.

0

Ошибки и предупреждения обычно отображаются в файлах ....\logs\php_error.log или ....\logs\apache_error.log, в зависимости от настроек вашего php.ini.

Также полезные ошибки часто направляются в браузер, но поскольку они не являются корректным HTML, они не отображаются.

Таким образом, используйте команду "tail -f" для просмотра лог-файлов, и когда вы получите пустой экран, воспользуйтесь в Internet Explorer опциями меню "Вид" → "Исходный код", чтобы увидеть исходный вывод.

0

Вы использовали следующий синтаксис в верхней части вашего PHP-скрипта:

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');  // On или Off

Этот код устанавливает уровень отчетности об ошибках в PHP на E_ALL, что означает, что будут отображаться все виды ошибок, предупреждений и уведомлений. Вторая команда активирует отображение этих ошибок в браузере (display_errors установлен в 'On').

Если вы всегда используете этот код, имейте в виду, что при разработке это может быть полезно, так как вы сразу увидите все ошибки и проблемы. Однако на боевом (продуктивном) сервере рекомендуется устанавливать display_errors в 'Off', чтобы избежать утечки информации об ошибках пользователям. Лучше использовать log_errors, чтобы записывать ошибки в лог-файл для дальнейшего анализа.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь