Как получить полезные сообщения об ошибках в PHP?
Описание проблемы
Я часто запускаю PHP-скрипты и получаю в ответ просто пустой экран. Никаких сообщений об ошибках — только белый экран. Причиной может быть простая синтаксическая ошибка (например, неправильная скобка или отсутствующая точка с запятой), неудачный вызов функции или что-то совершенно иное.
Понять, в чем именно проблема, бывает крайне сложно. Я стараюсь закомментировать код, вставляю "echo" везде, где только могу, и так далее, пытаясь сузить круг поиска. Но, должно же быть более эффективное решение, верно?
Существует ли способ заставить PHP выводить полезные сообщения об ошибках, как это делает Java?
5 ответ(ов)
Чтобы включить отображение всех ошибок в PHP, вы можете использовать следующий код:
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);
Эти настройки активируют отображение ошибок как при запуске скрипта, так и во время выполнения.
Дополнительно, вы можете ознакомиться с следующими ссылками для более подробной информации:
Ваш код, судя по всему, правильно настроен для отображения всех ошибок в PHP. Однако, вы правы: если страница остается пустой, это может указывать на проблему в обработчике завершения (shutdown handler).
Ваша функция ShutdownHandler()
может не обрабатывать ошибки должным образом. Вот несколько рекомендаций для диагностики проблемы:
Проверка ошибок в
ShutdownHandler()
: Если в обработчике завершения возникает ошибка, она не будет обрабатываться, так как сама функция вызывается по окончании скрипта. Убедитесь, что вShutdownHandler()
нет ошибок. Можете временно упростить этот обработчик, например:function ShutdownHandler() { $error = error_get_last(); if ($error !== NULL) { ErrorHandler($error['type'], $error['message'], $error['file'], $error['line']); } }
Проверка настроек хостинга: Убедитесь, что настройки вашего сервера позволяют отображать ошибки. Иногда хостинг-провайдер может игнорировать настройки
display_errors
в конфигурации PHP.Тестирование кода без изменений: Поскольку вы копировали код из своего CMS, имеет смысл протестировать его на чистом PHP скрипте, чтобы исключить влияние других частей вашего приложения.
Логирование ошибок: Если вы не видите ошибок на экране, можно попробовать перенаправить их в файл логов. Например:
ini_set('log_errors', 'On'); ini_set('error_log', '/path/to/your/logfile.log');
Убедитесь, что PHP настроен на выдачу ошибок: Проверьте, что в
php.ini
не установлены опции, подавляющие вывод ошибок, такие какdisplay_startup_errors
илиerror_reporting
.
Попробуйте эти действия, и если проблема сохранится, пожалуйста, добавьте больше информации о конфигурации вашего окружения, так как это может помочь в диагностике.
Чтобы вывести ошибки на экран при отладке, вы можете добавить следующие строки в файл, который хотите отлаживать:
error_reporting(E_ALL);
ini_set('display_errors', '1');
Эти настройки переопределяют значения по умолчанию в файле php.ini, которые обычно заставляют PHP записывать ошибки только в лог.
Ошибки и предупреждения обычно отображаются в файлах ....\logs\php_error.log
или ....\logs\apache_error.log
, в зависимости от настроек вашего php.ini.
Также полезные ошибки часто направляются в браузер, но поскольку они не являются корректным HTML, они не отображаются.
Таким образом, используйте команду "tail -f
" для просмотра лог-файлов, и когда вы получите пустой экран, воспользуйтесь в Internet Explorer опциями меню "Вид" → "Исходный код", чтобы увидеть исходный вывод.
Вы использовали следующий синтаксис в верхней части вашего 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
, чтобы записывать ошибки в лог-файл для дальнейшего анализа.
Как вывести ошибки PHP на экран?
UTF-8 на всех уровнях!
Функции startsWith() и endsWith() в PHP
Что такое потокобезопасность и непотокобезопасность в PHP?
Как получить расширение файла в PHP?