Php установка вывода ошибок

Поведение этих функций зависит от установок в php.ini .

Настройки конфигурации протоколирования событий и ошибок

Имя По умолчанию Место изменения Список изменений
error_reporting NULL PHP_INI_ALL
display_errors "1" PHP_INI_ALL
display_startup_errors "0" PHP_INI_ALL
log_errors "0" PHP_INI_ALL
log_errors_max_len "1024" PHP_INI_ALL
ignore_repeated_errors "0" PHP_INI_ALL
ignore_repeated_source "0" PHP_INI_ALL
report_memleaks "1" PHP_INI_ALL
track_errors "0" PHP_INI_ALL Объявлено устаревшим в PHP 7.2.0.
html_errors "1" PHP_INI_ALL
xmlrpc_errors "0" PHP_INI_SYSTEM
xmlrpc_error_number "0" PHP_INI_ALL
docref_root "" PHP_INI_ALL
docref_ext "" PHP_INI_ALL
error_prepend_string NULL PHP_INI_ALL
error_append_string NULL PHP_INI_ALL
error_log NULL PHP_INI_ALL
syslog.facility "LOG_USER" PHP_INI_SYSTEM Доступно, начиная с PHP 7.3.0.
syslog.filter "no-ctrl" PHP_INI_ALL Доступно, начиная с PHP 7.3.0.
syslog.ident "php" PHP_INI_SYSTEM Доступно, начиная с PHP 7.3.0.

Для подробного описания констант PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации.

Краткое разъяснение конфигурационных директив.

Задаёт уровень протоколирования ошибки. Параметр может быть либо числом, представляющим битовое поле, либо именованной константой. Соответствующие уровни и константы приведены в разделе Предопределённые константы, а также в php.ini . Для установки настройки во время выполнения используйте функцию error_reporting() . Смотрите также описание директивы display_errors.

В PHP 5.3 и новее, значение по умолчанию равно E_ALL &

E_NOTICE &

E_STRICT &

E_DEPRECATED . При этой настройке не отображаются уровни ошибок E_NOTICE , E_STRICT и E_DEPRECATED . Можно отображать их при разработке. До версии PHP 5.3.0, значением по умолчанию было E_ALL &

E_NOTICE &

E_STRICT .

Замечание:

Включение E_NOTICE во время разработки имеет ряд преимуществ. Для отладки: NOTICE сообщения могут предупреждать о возможных ошибках в коде. Например, использование не проинициализированных переменных вызовет подобное сообщение. Это очень полезно при поиске опечаток и экономит время при отладке. NOTICE сообщения также предупреждают о плохом стиле. Например, $arr[item] лучше писать так: $arr['item'] с тех пор, как PHP начал интерпретировать "item" как константу. Если это не константа, PHP принимает это выражение за строковый индекс элемента массива.

Замечание:

До PHP 5.4.0 E_STRICT не был включён в состав E_ALL , поэтому необходимо явно включать этот уровень ошибок в PHP < 5.4.0. Включение E_STRICT во время разработки также имеет свои преимущества. STRICT сообщения предлагают подсказки, которые могут помочь обеспечить лучшую функциональную и обратную совместимость вашего кода. Эти сообщения могут включать в себя такие вещи, как вызов нестатических методов статически, определение свойств в совместимого класса, в то время как они уже определены в используемом трейте, и до PHP 5.3 некоторые устаревшие возможности также будут выдавать ошибки уровня E_STRICT , такие как присвоение объектов по ссылке при создании экземпляра.

Замечание: PHP-константы за пределами PHP

Использование PHP-констант за пределами PHP, например в файле httpd.conf , не имеет смысла, так как в таких случаях требуются целочисленные значения ( int ). Более того, с течением времени будут добавляться новые уровни ошибок, а максимальное значение константы E_ALL соответственно будет расти. Поэтому в месте, где предполагается указать E_ALL , лучше задать большое целое число, чтобы перекрыть все возможные битовые поля. Таким числом может быть, например, 2147483647 (оно включит все возможные ошибки, не только E_ALL ).

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

Значение "stderr" посылает ошибки в поток stderr вместо stdout . Значение доступно в версии PHP 5.2.4. В ранних версиях эта директива имела тип bool .

Замечание:

Эта функциональность предназначена только для разработки и не должен использоваться в готовых производственных системах (например, системах, имеющих доступ в интернет).

Замечание:

Несмотря на то, что display_errors может быть установлена во время выполнения (функцией ini_set() ), это ни на что не повлияет, если в скрипте есть фатальные ошибки. Это обусловлено тем, что ожидаемые действия программы во время выполнения не получат управления (не будут выполняться).

Даже если display_errors включена, ошибки, возникающие во время запуска PHP, не будут отображаться. Настойчиво рекомендуем включать директиву display_startup_errors только для отладки.

Отвечает за выбор журнала, в котором будут сохраняться сообщения об ошибках. Это может быть журнал сервера или error_log. Применимость этой настройки зависит от конкретного сервера.

Замечание:

Настоятельно рекомендуем при работе на готовых работающих web сайтах протоколировать ошибки там, где они отображаются.

Задание максимальной длины log_errors в байтах. В error_log добавляется информация об источнике. Значение по умолчанию 1024. Установка значения в 0 позволяет снять ограничение на длину log_errors. Это ограничение распространяется на записываемые в журнал ошибки, на отображаемые ошибки, а также на $php_errormsg , но не на явно вызываемые функции, такие как error_log() .

Если используется int , значение измеряется байтами. Вы также можете использовать сокращённую запись, которая описана в этом разделе FAQ. ignore_repeated_errors bool

Не заносить в журнал повторяющиеся ошибки. Ошибка считается повторяющейся, если происходит в том же файле и в той же строке, и если настройка ignore_repeated_source выключена.

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

Если настройка включена (по умолчанию), будет формироваться отчёт об утечках памяти, зафиксированных менеджером памяти Zend. На POSIX платформах этот отчёт будет направляться в поток stderr. На Windows платформах он будет посылаться в отладчик функцией OutputDebugString(), просмотреть отчёт в этом случае можно с помощью утилит, вроде » DbgView. Эта настройка имеет смысл в сборках, предназначенных для отладки. При этом E_WARNING должна быть включена в список error_reporting.

Если включена, последняя произошедшая ошибка будет первой в переменной $php_errormsg .

Если разрешена, сообщения об ошибках будут включать теги HTML. Фомат для HTML-ошибок производит нажимаемые ссылки, ведущие на описание ошибки, либо функии, в которой она произошла. За такие ссылки ответственны docref_root и docref_ext.

Если запрещена, то ошибки будут выдаваться простым текстом, без форматирования.

Если включена, то нормальное оповещение об ошибках отключается и, вместо него, ошибки выводятся в формате XML-RPC.

Используется в качестве значения XML-RPC элемента faultCode.

Новый формат ошибок содержит ссылку на страницу с описанием ошибки или функции, вызвавшей эту ошибку. Можно разместить копию описаний ошибок и функций локально и задать ini директиве значение URL этой копии. Если, например, локальная копия описаний доступна по адресу "/manual/" , достаточно прописать docref_root=/manual/ . Дополнительно, необходимо задать значение директиве docref_ext, отвечающей за соответствие расширений файлов файлам описаний вашей локальной копии, docref_ext=.html . Также возможно использование внешних ссылок. Например, docref_root=http://manual/en/ или docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon &url=http%3A%2F%2Fwww.php.net%2F"

В большинстве случаев вам потребуется, чтобы значение docref_root оканчивалось слешем "/" . Тем не менее, бывают случаи, когда это не требуется (смотрите выше, второй пример).

Замечание:

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

Замечание:

Значение docref_ext должно начинаться с точки "." .

Строка, которая будет выводиться непосредственно перед сообщением об ошибке.

Строка, которая будет выводиться после сообщения об ошибке.

Имя файла, в который будут добавляться сообщения об ошибках. Файл должен быть открыт для записи пользователем веб-сервера. Если используется специальное значение syslog , то сообщения будут посылаться в системный журнал. На Unix-системах это syslog(3), на Windows NT — журнал событий. Смотрите также: syslog() . Если директива не задана, ошибки будут направляться в SAPI журналы. Например, это могут быть журналы ошибок Apache или поток stderr командной строки CLI. Смотрите также функцию error_log() .

Указывает, какой тип программы регистрирует сообщение. Действует только в том случае, если опция error_log установлена в "syslog".

  • all – строка будет разделена на символы новой строки и все символы будут переданы без изменений
  • ascii – строка будет разделена на символы новой строки, а любые непечатаемые 7-битные символы ASCII будут экранированы
  • no-ctrl – строка будет разделена на символы новой строки, а любые непечатаемые символы будут экранированы
  • raw – все символы передаются в системный журнал без изменений, без разделения на новые строки (идентично PHP до 7.3)

Замечание:

Тип фильтра raw доступен начиная с PHP 7.3.8 и PHP 7.4.0.

Определяет строку идентификатора, которая добавляется к каждому сообщению. Действует только в том случае, если опция error_log установлена в "syslog".

Источник



Управление выводом ошибок PHP

PHP предлагает гибкие настройки вывода ошибок, среди которых функия error_reporting($level) – задает, какие ошибки PHP попадут в отчет, могут быть значения:

  • E_ALL – все ошибки,
  • E_ERROR – критические ошибки,
  • E_WARNING – предупреждения,
  • E_PARSE – ошибки синтаксиса,
  • E_NOTICE – замечания,
  • E_CORE_ERROR – ошибки обработчика,
  • E_CORE_WARNING – предупреждения обработчика,
  • E_COMPILE_ERROR – ошибки компилятора,
  • E_COMPILE_WARNING – предупреждения компилятора,
  • E_USER_ERROR – ошибки пользователей,
  • E_USER_WARNING – предупреждения пользователей,
  • E_USER_NOTICE – уведомления пользователей.

Вывод ошибок в браузере

В htaccess

На рабочем проекте вывод ошибок лучше сделать только у авторизированного пользователя или в крайнем случаи по IP.

Запись ошибок в лог файл

Файлы логов также не должны быть доступны из браузера, храните их в закрытой директории с файлом .htaccess:

Или запретить доступ к файлам по расширению .log (заодно и другие системные файлы и исходники):

Отправка ошибок на e-mail

Ошибки можно отправлять на е-mail разработчика, но приведенные методы не работает при критических ошибках.

Первый – register_shutdown_function() регистрирует функцию, которая выполнится при завершении работы скрипта, error_get_last() получает последнюю ошибку.

Второй метод использует «пользовательский обработчик ошибок», поэтому в браузер ошибки выводится не будут.

Пользовательские ошибки

PHP позволяет разработчику самому объявлять ошибки, которые выведутся в браузере или в логе. Для создания ошибки используется функция trigger_error() :

Источник

PHP вывод ошибок

aPHP вывод ошибок

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

Чтобы php начал выводить ошибки, ему необходимо установить значение display_errors = On и задать уровень серьёзности выводимых ошибок через error_reporting. Директива error_reporting может принимать значения (E_ALL, E_ERROR, E_WARNING, E_PARSE и т.п.). Но лучше всего error_reporting задавать как E_ALL, чтобы видеть все недочёты своего кода.

Вывод ошибок через PHP файл

Самый приемлемый способ — это задание директив внутри php файла:

ini_set(‘error_reporting’, E_ALL);
ini_set(‘display_errors’, 1);

Добавьте эти строки до кода, который необходимо отладить. Иначе ошибки не выведутся.

Этот способ вывода самый приемлемый, потому что на него можно поставить права доступа. К примеру, ставим эти две строчки внутри проверки административных прав:

if( *проверка прав администратора* ) <

ini_set(‘error_reporting’, E_ALL);
ini_set(‘display_errors’, 1);

>

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

Если нужно посмотреть ошибки от простого пользователя, то проверку прав администратора можно заменить на проверку какого-нибудь параметра в адресе. К примеру, if( $_GET[‘m’]==’y’ ). И запрашивать страницу с этим параметром ‘?m=y’ для вывода отладки.

Вывод ошибок через файл .htaccess

Другим вариантом включения вывода ошибок php является задание значений директив в файле .htaccess:

<IfModule mod_php7.c>

php_value display_errors 1
php_value error_reporting E_ALL

</IfModule>

Обратите внимание, что php_value задаётся в блоке <IfModule mod_php7.c>. Если у вас на сервере стоит php 5-ой версии, то стоит заменить «mod_php7» на «mod_php5».

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

Вывод ошибок в php.ini

Вывод ошибок в php можно включить путём задания директив в файле php.ini:

error_reporting = E_ALL
display_errors = On

Эти строки уже есть в файле php.ini, но закомментированы. Попробуйте сделать поиск по названию.

После внесения изменений необходимо перезапустить Apache. В этом и кроется основное неудобство. Потому что отладка может производиться на работающем проекте.

Как и со случаем .htaccess, ошибки сайта увидят все, включая простых пользователей.

Источник

Как включить вывод ошибок и предупреждений в PHP

Программирование на PHP — не самый приятный процесс, но я расскажу как сделать его чуть комфортней.

Регулярно гуглю как включить вывод warning’ов и error’ов в PHP, когда что-то быстро прогаю и нет времени разбираться во всём коде (обычно чужом), а нужно просто впилить фичу здесь и сейчас. Решил добавить к себе соответствующую инструкцию, чтобы качать себе же поведенческие факторы, находя свой блог в выдаче.

Так что если вы нашли эту статью в поисковике и перешли сюда — спасибо! 🙂

Рассмотрим 3 самых юзабельных способа:

Самое главное — не забудьте отключить показ ошибок и предупреждений после окончания работ, даже если уже всё хорошо. Там выводится техническая информация, которая может быть полезна злоумышленникам во время атаки на сайт.

Включить вывод ошибок и предупреждений в коде PHP-файла

Быстрый способ показать php-ошибки — просто впилить это сразу после <?php или <? . Если вы работаете не с движком (например с WordPress), то наверняка строчки ниже нужно вставлять в index.php.

Включить ошибки и предупреждения через .htaccess

Если вы знаете что такое web-сервер и уверены, что у вас Apache — поместите это в корневой .htaccess, в начале.

Включить ошибки и предупреждения через php.ini

Расположение php.ini зависит от дистрибутива Linux на вашем сервере. Проще всего узнать где он находится — загуглить «Ubuntu php.ini», подставив вместо «Ubuntu» свой дистрибутив.

После изменений нужно перезагрузить web-сервер.

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

Источник

Кроме этого:  Автономная установка пожаротушения ФОГ