Настройка во время выполнения
Поведение этих функций зависит от установок в 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 | Available since PHP 4.3.0. |
ignore_repeated_errors | "0" | PHP_INI_ALL | Доступно, начиная с PHP 4.3.0. |
ignore_repeated_source | "0" | PHP_INI_ALL | Доступно, начиная с PHP 4.3.0. |
report_memleaks | "1" | PHP_INI_ALL | Доступно, начиная с PHP 4.3.0. |
track_errors | "0" | PHP_INI_ALL | |
html_errors | "1" | PHP_INI_ALL | PHP_INI_SYSTEM в PHP <= 4.2.3. |
xmlrpc_errors | "0" | PHP_INI_SYSTEM | Доступно, начиная с PHP 4.1.0. |
xmlrpc_error_number | "0" | PHP_INI_ALL | Доступно, начиная с PHP 4.1.0. |
docref_root | "" | PHP_INI_ALL | Доступно, начиная с PHP 4.3.0. |
docref_ext | "" | PHP_INI_ALL | Доступно, начиная с PHP 4.3.2. |
error_prepend_string | NULL | PHP_INI_ALL | |
error_append_string | NULL | PHP_INI_ALL | |
error_log | NULL | PHP_INI_ALL |
Краткое разъяснение конфигурационных директив.
-
error_reporting
integer -
Задает уровень протоколирования ошибки. Параметр может быть либо числом, представляющим битовое поле, либо именованной константой. Соответствующие уровни и константы приведены в разделе Предопределенные константы, а также в php.ini. Для установки настройки во время выполнения используйте функцию error_reporting(). См. также описание директивы display_errors.
В PHP 4 и PHP 5 значение по умолчанию
E_ALL
& ~E_NOTICE
. В этом режиме ошибки уровняE_NOTICE
не показываются. Однако, они могут потребоваться во время разработки скрипта.Замечание:
Включение
E_NOTICE
во время разработки имеет ряд преимуществ. Для отладки: NOTICE сообщения могут предупреждать о возможных ошибках в коде. Например, использование непроинициализированных переменных вызовет подобное сообщение. Это очень полезно при поиске опечаток и экономит время при отладке. NOTICE сообщения также предупреждают о плохом стиле. Например, $arr[item] лучше писать так: $arr['item'] с тех пор, как PHP начал интерпретировать "item" как константу. Если это не константа, PHP принимает это выражение за строковый индекс элемента массива.Замечание:
В PHP 5 доступен новый уровень ошибок
E_STRICT
. Так какE_STRICT
не входит в составE_ALL
, необходимо явно включать этот уровень ошибок. ВключениеE_STRICT
во время разработки также имеет свои преимущества. STRICT сообщения предлагают подсказки, которые могут помочь обеспечить лучшую функциональную и обратную совместимость вашего кода. Эти сообщения могут включать в себя такие вещи, как вызов нестатических методов статически, определение свойств в совместимого класса, в то время как они уже определены в используемом трейте, и до PHP 5.3 некоторые устаревшие возможности также будут выдавать ошибки уровняE_STRICT
, такие как присвоение объектов по ссылке при создании экземпляра.Замечание: PHP константы за пределами PHP
Использование PHP констант за пределами PHP, например в файле httpd.conf, не имеет смысла, так как в таких случаях требуются целочисленные значения (integer). Более того, с течением времени будут добавляться новые уровни ошибок, а максимальное значение константы
E_ALL
соответственно будет расти. Поэтому в месте, где предполагается указатьE_ALL
, лучше задать большое целое число, чтобы перекрыть все возможные битовые поля. Таким числом может быть, например, 2147483647 (оно включит все возможные ошибки, не толькоE_ALL
). -
display_errors
string -
Эта настройка определяет, требуется ли выводить ошибки на экран вместе с остальным выводом, либо ошибки должны быть скрыты от пользователя.
Значение "stderr" посылает ошибки в поток stderr вместо stdout. Значение доступно в версии PHP 5.2.4. В ранних версиях эта директива имела тип boolean.
Замечание:
Этот функционал предназначен только для разработки и не должен использоваться в готовых производственных системах (например, системах, имеющих доступ в интернет).
Замечание:
Несмотря на то, что display_errors может быть установлена во время выполнения (функцией ini_set()), это ни на что не повлияет, если в скрипте есть фатальные ошибки. Это обусловлено тем, что ожидаемые действия программы во время выполнения не получат управления (не будут выполняться).
-
display_startup_errors
boolean -
Даже если display_errors включена, ошибки, возникающие во время запуска PHP, не будут отображаться. Настойчиво рекомендуем включать директиву display_startup_errors только для отладки.
-
log_errors
boolean -
Отвечает за выбор журнала, в котором будут сохраняться сообщения об ошибках. Это может быть журнал сервера или error_log. Применимость этой настройки зависит от конкретного сервера.
Замечание:
Настоятельно рекомендуем при работе на готовых работающих web сайтах протоколировать ошибки там, где они отображаются.
-
log_errors_max_len
integer -
Задание максимальной длины log_errors в байтах. В error_log добавляется информация об источнике. Значение по умолчанию 1024. Установка значения в 0 позволяет снять ограничение на длину log_errors. Это ограничение распространяется на записываемые в журнал ошибки, на отображаемые ошибки, а также на $php_errormsg.
Если используется integer, значение измеряется байтами. Вы также можете использовать сокращенную запись, которая описана в этом разделе FAQ. -
ignore_repeated_errors
boolean -
Не заносить в журнал повторяющиеся ошибки. Ошибка признается повторяющейся, если происходит в том же файле и в той же строке, и если настройка ignore_repeated_source выключена.
-
ignore_repeated_source
boolean -
Игнорировать источник ошибок при пропуске повторяющихся сообщений. Когда эта настройка включена, повторяющиеся сообщения об ошибках не будут заноситься в журнал вне зависимости от того, в каких файлах и строках они происходят.
-
report_memleaks
boolean -
Если настройка включена (по умолчанию), будет формироваться отчет об утечках памяти, зафиксированных менеджером памяти Zend. На POSIX платформах этот отчет будет направляться в поток stderr. На Windows платформах он будет посылаться в отладчик функцией OutputDebugString(), просмотреть отчет в этом случае можно с помощью утилит, вроде » DbgView. Эта настройка имеет смысл в сборках, предназначенных для отладки. При этом
E_WARNING
должна быть включена в список error_reporting. -
track_errors
boolean -
Если включена, последняя произошедшая ошибка будет первой в переменной $php_errormsg.
-
html_errors
boolean -
Отключает HTML тэги в сообщениях об ошибках. Новый формат HTML сообщений об ошибках предоставляет возможность вставлять ссылки в сообщения и перенаправлять пользователя на страницы с описаниями ошибок. За такие ссылки ответственны docref_root и docref_ext.
-
xmlrpc_errors
boolean -
Переключает форматирование сообщений об ошибках на формат XML-RPC сообщений.
-
xmlrpc_error_number
integer -
Используется в качестве значения XML-RPC элемента faultCode.
-
docref_root
string -
Новый формат ошибок содержит ссылку на страницу с описанием ошибки или функции, вызвавшей эту ошибку. Можно разместить копию описаний ошибок и функций локально и задать 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
string -
См. docref_root.
Замечание:
Значение docref_ext должно начинаться с точки ".".
-
error_prepend_string
string -
Строка, которая будет выводиться непосредственно перед сообщением об ошибке.
-
error_append_string
string -
Строка, которая будет выводиться после сообщения об ошибке.
-
error_log
string -
Имя файла, в который будут добавляться сообщения об ошибках. Файл должен быть открыт для записи пользователем web сервера. Если используется специальное значение syslog, то сообщения будут посылаться в системный журнал. На Unix системах это syslog(3), на Windows NT - журнал событий. Системный журнал не поддерживается в Windows 95. См. также: syslog(). Если директива не задана, ошибки будут направляться в SAPI журналы. Например, это могут быть журналы ошибок Apache или поток stderr командной строки CLI. Смотрите также функцию error_log().
Коментарии
Using
<?php ini_set('display_errors', 1); ?>
at the top of your script will not catch any parse errors. A missing ")" or ";" will still lead to a blank page.
This is because the entire script is parsed before any of it is executed. If you are unable to change php.ini and set
display_errors On
then there is a possible solution suggested under error_reporting:
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
include("file_with_errors.php");
?>
[Modified by moderator]
You should also consider setting error_reporting = -1 in your php.ini and display_errors = On if you are in development mode to see all fatal/parse errors or set error_log to your desired file to log errors instead of display_errors in production (this requires log_errors to be turned on).
There does not appear to be a way to set a tag / ident / program for log entries in the ini file when using error_log=syslog. When I test locally, "apache2" is used.
However, calling openlog() with an ident parameter early in your script (or using an auto_prepend_file) will make PHP use that value for all subsequent log entries. closelog() will restore the original tag.
This can be done for setting facility as well, although the original value does not seem to be restored by closelog().
Document says
So in place of E_ALL consider using a larger value to cover all bit fields from now and well into the future, a numeric value like 2147483647 (includes all errors, not just E_ALL).
But it is better to set "-1" as the E_ALL value.
For example, in httpd.conf or .htaccess, use
php_value error_reporting -1
to report all kind of error without be worried by the PHP version.
If you set the error_log directive to a relative path, it is a path relative to the document root rather than php's containing folder.
When `error_log` is set to a file path, log messages will automatically be prefixed with timestamp [DD-MMM-YYYY HH:MM:SS UTC]. This appears to be hard-coded, with no formatting options.