Довольно часто я пытаюсь запустить скрипт PHP и просто получить пустой экран обратно. Нет сообщения об ошибке; просто пустой экран. Причиной может быть простая синтаксическая ошибка (неправильная скобка, пропущенная точка с запятой), сбой вызова функции или что-то еще полностью.
Очень сложно понять, что пошло не так. Я заканчиваю тем, что комментирую код, везде вводю «эхо» и т. Д., Пытаясь сузить проблему. Но наверняка должен быть лучший путь, верно?
Есть ли способ заставить PHP выдавать полезное сообщение об ошибке, как это делает Java?
php
debugging
error-handling
Чандидаса
источник
источник
T_PAAMAYIM_NEKUDOTAYIM
. Или, может быть, «должен быть экземпляром целого, данного целого» .Ответы:
Для синтаксических ошибок необходимо включить отображение ошибок в php.ini. По умолчанию они отключены, потому что вы не хотите, чтобы «клиент» видел сообщения об ошибках. Проверьте эту страницу в документации PHP для информации о 2 директивах:
error_reporting
иdisplay_errors
.display_errors
вероятно, тот, который вы хотите изменить. Если вы не можете изменить php.ini, вы также можете добавить следующие строки в файл .htaccess:Вы можете рассмотреть возможность использования значения E_ALL (как упомянуто Gumbo) для вашей версии PHP для
error_reporting
получения всех ошибок. больше информации3 других пункта: (1) Вы можете проверить файл журнала ошибок, так как в нем будут все ошибки (если регистрация не была отключена). (2) Добавление следующих 2 строк поможет вам отлаживать ошибки, которые не являются синтаксическими ошибками:
(3) Другой вариант - использовать редактор, который проверяет ошибки при вводе , например, PhpEd . PhpEd также поставляется с отладчиком, который может предоставить более подробную информацию. (Отладчик PhpEd очень похож на xdebug и интегрируется непосредственно в редактор, поэтому вы используете одну программу для всего.)
Ссылка Картмана тоже очень хорошая: http://www.ibm.com/developerworks/library/os-debug/
источник
E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE
. См. Docs.php.net/manual/en/errorfunc.constants.phpСледующее включает все ошибки:
Также см. Следующие ссылки
источник
ini_set
является строка.Следующий код должен отображать все ошибки:
Единственный способ создать пустую страницу с этим кодом - это когда у вас есть ошибка в обработчике завершения работы. Я скопировал и вставил это из моей собственной CMS без тестирования, но я уверен, что это работает.
источник
ShutdownHandler
выше. По сути, это временный взлом вместо правильной обработки ошибок.E_NOTICE
ошибки в этой функции?Ошибки и предупреждения обычно появляются в ваших настройках php.ini
....\logs\php_error.log
или в....\logs\apache_error.log
зависимости от них.Также полезные ошибки часто направлены в браузер, но, поскольку они не являются действительными html, они не отображаются.
Так что
"tail -f
«ваши файлы журнала и когда вы получаете пустой экран, используйте IE меню« вид »->« источник »меню для просмотра необработанных выводов.источник
php_flag display_errors 1
.Вы можете включить следующие строки в файл, который вы хотите отладить:
Это переопределяет настройки по умолчанию в php.ini, которые просто заставляют PHP сообщать об ошибках в журнал.
источник
Конфигурация PHP
2 записи в php.ini диктуют вывод ошибок:
display_errors
error_reporting
В производстве ,
display_errors
обычно устанавливаетсяOff
(что это хорошая вещь, потому что ошибка отображения в производственных объектах , как правило , не желательно!).Однако в процессе разработки его следует установить
On
так, чтобы ошибки отображались. Проверьте !error_reporting
(по состоянию на PHP 5.3) по умолчанию установлено значениеE_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
(то есть все отображается за исключением уведомлений, строгих стандартов и уведомлений об устаревании). Если вы сомневаетесь, установите егоE_ALL
для отображения всех ошибок. Проверьте !ВОУ ВОУ! Нет проверки! Я не могу изменить свой php.ini!
Это позор. Обычно общие хосты не допускают изменения своего файла php.ini, и поэтому эта опция, к сожалению, недоступна. Но не бойся! У нас есть другие варианты !
Конфигурация времени выполнения
В желаемом скрипте мы можем изменять записи php.ini во время выполнения! Это значит, что он запустится, когда скрипт запустится! Сладкий!
Эти две строки будут выполнять тот же эффект, что и изменение записей php.ini, как указано выше! Потрясающие!
Я все еще получаю пустую страницу / ошибка 500!
Это означает, что сценарий даже не запускался! Это обычно происходит, когда у вас есть синтаксическая ошибка!
С синтаксическими ошибками сценарий даже не попадает во время выполнения. Сбой во время компиляции , это означает, что он будет использовать значения в php.ini, которые, если вы не изменились, могут не разрешить отображение ошибок.
Журналы ошибок
Кроме того, PHP по умолчанию регистрирует ошибки. На виртуальном хостинге он может находиться в отдельной папке или в той же папке, что и скрипт-нарушитель.
Если у вас есть доступ к php.ini, вы можете найти его под
error_log
записью.источник
Существует действительно полезное расширение под названием « xdebug », которое сделает ваши отчеты намного приятнее.
источник
Я всегда использую этот синтаксис в самом верху скрипта php.
источник
Для быстрого, практического устранения неисправностей я обычно предлагаю здесь на SO:
чтобы быть помещенным в начало сценария, который находится под устранением неполадок. Это не идеально, идеальным вариантом является то, что вы также включаете это в
php.ini
и что вы регистрируете ошибки в PHP для обнаружения синтаксиса и ошибок при запуске.В приведенных здесь настройках отображаются все ошибки, уведомления и предупреждения, в том числе строгие, независимо от версии PHP.
Следующие вещи для рассмотрения:
Смотрите также:
error_reporting()
Документыdisplay_errors
Документыисточник
Можно зарегистрировать ловушку, чтобы сделать видимой последнюю ошибку или предупреждение.
добавление этого кода в начало вашего index.php поможет вам отладить проблемы.
источник
Это проблема загрузки и конфигурации во время выполнения
Важно признать, что синтаксическая ошибка или ошибка синтаксического анализа происходят во время этапа компиляции или синтаксического анализа , что означает, что PHP будет запускаться до того, как у него даже появится шанс выполнить любой ваш код. Так что, если вы изменяете
display_errors
конфигурацию PHP во время выполнения (это включает в себя что-либо от использованияini_set
в вашем коде до использования .htaccess, который является файлом конфигурации времени выполнения), тогда будут задействованы только загруженные параметры конфигурации по умолчанию .Как всегда избегать WSOD в разработке
Чтобы избежать WSOD вы хотите , чтобы убедиться , что ваш загруженный файл конфигурации имеет
display_errors
на иerror_reporting
набор для-1
( это эквивалентно E_ALL , поскольку он гарантирует , что все биты включены , независимо от того, какой версии PHP вы бежите ). Не задавайте жестко постоянное значение E_ALL, потому что это значение может меняться в разных версиях PHP.Loaded конфигурации или ваш загруженный
php.ini
файл или вашapache.conf
илиhttpd.conf
или VirtualHost файла. Эти файлы читаются только один раз на этапе запуска (например, при первом запуске apache httpd или php-fpm) и переопределяются только изменениями конфигурации среды выполнения. Убедившись , чтоdisplay_errors = 1
иerror_reporting = -1
в ваших загруженных файлов конфигурации обеспечивает проведение, что вы никогда не будете видеть WSOD независимо от синтаксиса или синтаксического анализа ошибок , которые происходят до изменения времени выполнения , какini_set('display_errors', 1);
илиerror_reporting(E_ALL);
может иметь место.Как найти ваши (php.ini) загруженные файлы конфигурации
Чтобы найти загруженные файлы конфигурации, просто создайте новый файл PHP только со следующим кодом ...
Затем направьте туда свой браузер и посмотрите на проанализированный загруженный файл конфигурации и дополнительные INI-файлы , которые обычно находятся вверху
phpinfo()
и будут содержать абсолютный путь ко всем загруженным файлам конфигурации.Если вы видите
(none)
вместо файла, это означает, что у вас нет php.ini в пути к файлу конфигурации (php.ini) . Таким образом, вы можете скачать отсюда php.ini, поставляемый в комплекте с PHP, и скопировать его в путь к файлу конфигурации как php.ini, а затем убедиться, что у вашего пользователя php достаточно прав для чтения из этого файла. Вам нужно будет перезапустить httpd или php-fpm, чтобы загрузить его. Помните, что это файл разработки php.ini, который поставляется в комплекте с источником PHP. Поэтому, пожалуйста, не используйте его в производстве!Только не делай этого в производстве
Это действительно лучший способ избежать WSOD в разработке. Любой, кто предложит вам поместить
ini_set('display_errors', 1);
илиerror_reporting(E_ALL);
наверх вашего скрипта PHP или использовать .htaccess, как вы сделали здесь, не поможет вам избежать WSOD, когда возникает синтаксическая ошибка или ошибка синтаксического анализа (как в вашем случае здесь), если ваш загруженный файл конфигурации былdisplay_errors
выключен.Многие люди (и стандартные установки PHP) будут использовать производственный ini-файл, который
display_errors
по умолчанию отключен, что обычно приводит к тому же разочарованию, которое вы испытали здесь. Поскольку PHP уже отключил его при запуске, он сталкивается с синтаксической ошибкой или ошибкой синтаксического анализа и не выдает ничего. Вы ожидаете, что вашаini_set('display_errors',1);
верхняя часть PHP-скрипта должна была этого избежать, но не имеет значения, если PHP не сможет проанализировать ваш код, потому что он никогда не достигнет времени выполнения.источник
Если вы супер крутой, вы можете попробовать:
Это будет отображать только ошибки, когда вы работаете локально. Он также дает вам переменную test_server для использования в других местах, где это необходимо.
Любые ошибки, которые происходят до запуска скрипта, не будут обнаружены, но для 99% ошибок, которые я делаю, это не проблема.
источник
$_SERVER['REMOTE_HOST']
чтобы проверить, является ли клиент, ну, в общем, вы.В верхней части страницы выберите параметр
источник
Чтобы сохранить это и сделать его совместимым, вы можете отредактировать файл php.ini. Обычно он хранится в
/etc/php.ini
или/etc/php/php.ini
, но более локальныеphp.ini
могут перезаписывать его, в зависимости от рекомендаций по настройке вашего хостинг-провайдера. Проверьтеphpinfo()
файлLoaded Configuration File
вверху, чтобы убедиться, какой из них загружается последним.Найдите display_errors в этом файле. Должно быть только 3 экземпляра, из которых 2 прокомментированы.
Измените незакомментированную строку на:
источник
Не знаю, поможет ли это, но вот часть моего стандартного конфигурационного файла для проектов php. Я склонен не слишком сильно зависеть от настроек apache даже на моем собственном сервере.
У меня никогда не было проблемы с исчезающей ошибкой, поэтому, возможно, что-то здесь даст вам представление.
Отредактировано, чтобы показать APPLICATON_LIVE
источник
Кроме того, вы можете получить более подробную информацию с помощью xdebug .
источник
Я рекомендую Nette Tracy для лучшей визуализации ошибок и исключений в PHP:
источник
источник
И включить отображение ошибок в php.ini
источник
Вы можете зарегистрировать свой собственный обработчик ошибок в PHP. Например, выгрузка всех ошибок в файл может помочь вам в этих непонятных случаях. Обратите внимание, что ваша функция будет вызываться независимо от того, какая у вас текущая error_reporting . Очень простой пример:
источник
Две ключевые строки, которые вам нужны, чтобы получить полезные ошибки из PHP:
Как отмечают другие участники, они отключены по умолчанию из соображений безопасности. Полезный совет: когда вы настраиваете свой сайт, удобно переключаться между различными средами, чтобы эти ошибки были включены по умолчанию в вашей локальной среде и среде разработки. Это может быть достигнуто с помощью следующего кода (в идеале, в вашем index.php или конфигурационном файле, чтобы он был активен с самого начала):
источник
FirePHP также может быть полезен.
источник
откройте свой php.ini, убедитесь, что он установлен на:
перезагрузите ваш сервер.
источник
Вы также можете попробовать PHPStorm в качестве редактора кода. Он найдет много PHP и других синтаксических ошибок, как вы печатаете в редакторе.
источник
если вы пользователь Ubuntu, перейдите в свой терминал и выполните эту команду
где будет отображаться последние 50 ошибок. Для
error.log
apache2 существует файл ошибок, в котором записываются все ошибки.источник
Чтобы включить полный отчет об ошибках, добавьте это в ваш скрипт:
Это приводит к появлению даже минимальных предупреждений. И на всякий случай:
Принудительно отобразит ошибки. Это должно быть отключено на производственных серверах, но не во время разработки.
источник
«ОШИБКИ» - это самые полезные вещи для разработчиков, чтобы знать о своих ошибках и исправлять их, чтобы система работала идеально.
PHP предоставляет некоторые из лучших способов узнать разработчиков, почему и где их часть кода получает ошибки, поэтому, зная эти ошибки, разработчики могут улучшить свой код разными способами.
Лучшие способы написать следующие две строки в верхней части скрипта, чтобы получить все сообщения об ошибках:
Еще один способ использовать инструменты отладки, такие как xdebug, в вашей IDE.
источник
Вы можете включить полный отчет об ошибках (включая уведомления и строгие сообщения). Некоторые люди находят это слишком многословным, но это стоит попробовать. Набор
error_reporting
дляE_ALL | E_STRICT
вашей php.ini.E_STRICT
уведомит вас об устаревших функциях и даст рекомендации о лучших методах выполнения определенных задач.Если вы не хотите получать уведомления, но считаете полезными другие типы сообщений, попробуйте исключить уведомления:
Также убедитесь, что
display_errors
он включен в php.ini. Если ваша версия PHP старше, чем 5.2.4, установите для нееOn
:Если ваша версия 5.2.4 или новее, используйте:
источник
Помимо параметра error_reporting и ini display_errors, вы можете получить ошибки SYNTAX из файлов журнала вашего веб-сервера. Когда я разрабатываю PHP, я загружаю журналы веб-сервера своей системы разработки в мой редактор. Всякий раз, когда я тестирую страницу и получаю пустой экран, файл журнала устаревает, и мой редактор спрашивает, хочу ли я его перезагрузить. Когда я делаю, я прыгаю на дно, и есть синтаксическая ошибка. Например:
источник
Для тех, кто использует nginx и имеет белый экран даже для файла с
<?php echo 123;
. В моем случае у меня не было этой обязательной опции для PHP в конфигурационном файле nginx:Эта опция отсутствовала в файле fastcgi_params, поэтому PHP не работал и в логах не было ошибок.
источник