Php set error level

error_reporting — Задает, какие ошибки PHP попадут в отчет

(PHP 4, PHP 5, PHP 7)

error_reporting — Задает, какие ошибки PHP попадут в отчет

Описание

Функция error_reporting() задает значение директивы error_reporting во время выполнения. В PHP есть много уровней ошибок. Используя эту функцию, можно задать уровень ошибок времени выполнения скрипта, которые попадут в отчет. Если необязательный аргумент level не задан, error_reporting() вернет текущее значение уровня протоколирования ошибок.

Список параметров

Новое значение уровня error_reporting. Это может быть битовая маска или именованные константы. При использовании именованных констант нужно будет следить за совместимостью с новыми версиями PHP. В новых версиях могут добавиться новые уровни ошибок, увеличиться диапазон целочисленных типов. Все это может привести к нестабильной работе при использовании старых целочисленных обозначений уровней ошибок.

Доступные константы уровней ошибок и их описания приведены в разделе Предопределенные константы.

Возвращаемые значения

Возвращает старое значение уровня error_reporting либо текущее значение, если аргумент level не задан.

Список изменений

Версия Описание
5.4.0 E_STRICT стал частью E_ALL .
5.3.0 Добавлены E_DEPRECATED и E_USER_DEPRECATED .
5.2.0 Добавлена E_RECOVERABLE_ERROR .
5.0.0 Добавлена E_STRICT (не входит в состав E_ALL ).

Примеры

Пример #1 Примеры использования error_reporting()

// Выключение протоколирования ошибок
error_reporting ( 0 );

// Включать в отчет простые описания ошибок
error_reporting ( E_ERROR | E_WARNING | E_PARSE );

// Включать в отчет E_NOTICE сообщения (добавятся сообщения о
//непроинициализированных переменных или ошибках в именах переменных)
error_reporting ( E_ERROR | E_WARNING | E_PARSE | E_NOTICE );

// Добавлять сообщения обо всех ошибках, кроме E_NOTICE
error_reporting ( E_ALL &

// Добавлять в отчет все PHP ошибки (см. список изменений)
error_reporting ( E_ALL );

// Добавлять в отчет все PHP ошибки
error_reporting (- 1 );

// То же, что и error_reporting(E_ALL);
ini_set ( ‘error_reporting’ , E_ALL );

Примечания

Большинство E_STRICT ошибок отлавливаются на этапе компиляции, поэтому такие ошибки не включаются в отчет в файлах, где error_reporting расширен для включения E_STRICT ошибок (и наоборот).

Если передать -1, будут отображаться все возможные ошибки, даже если в новых версиях PHP добавятся уровни или константы. В версии PHP 5.4. передача константы E_ALL дает тот же результат.

Источник

Настройка во время выполнения

Поведение этих функций зависит от установок в 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 Доступно, начиная с 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 error_reporting integer

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

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

E_NOTICE &

E_STRICT &

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

E_NOTICE &

E_STRICT . В PHP 4 значением по умолчанию было E_ALL &

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 ).

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

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

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

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

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

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

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

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

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

Не заносить в журнал повторяющиеся ошибки. Ошибка признается повторяющейся, если происходит в том же файле и в той же строке, и если настройка 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 должно начинаться с точки «.».

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

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

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

Источник

Предопределённые константы

Перечисленные ниже константы всегда доступны как часть ядра PHP.

Замечание: Данные имена констант можно использовать в файле php.ini но не вне PHP, как например в файле httpd.conf , где вместо них необходимо использовать значения их битовых масок.

Ошибки и протоколирование
Значение Константа Описание Примечание
1 E_ERROR ( int ) Фатальные ошибки времени выполнения. Это неустранимые средствами самого скрипта ошибки, такие как ошибка распределения памяти и т.п. Выполнение скрипта в таком случае прекращается.
2 E_WARNING ( int ) Предупреждения времени выполнения (не фатальные ошибки). Выполнение скрипта в таком случае не прекращается.
4 E_PARSE ( int ) Ошибки на этапе компиляции. Должны генерироваться только парсером.
8 E_NOTICE ( int ) Уведомления времени выполнения. Указывают на то, что во время выполнения скрипта произошло что-то, что может указывать на ошибку, хотя это может происходить и при обычном выполнении программы.
16 E_CORE_ERROR ( int ) Фатальные ошибки, которые происходят во время запуска РНР. Такие ошибки схожи с E_ERROR , за исключением того, что они генерируются ядром PHP.
32 E_CORE_WARNING ( int ) Предупреждения (не фатальные ошибки), которые происходят во время начального запуска РНР. Такие предупреждения схожи с E_WARNING , за исключением того, что они генерируются ядром PHP.
64 E_COMPILE_ERROR ( int ) Фатальные ошибки на этапе компиляции. Такие ошибки схожи с E_ERROR , за исключением того, что они генерируются скриптовым движком Zend.
128 E_COMPILE_WARNING ( int ) Предупреждения на этапе компиляции (не фатальные ошибки). Такие предупреждения схожи с E_WARNING , за исключением того, что они генерируются скриптовым движком Zend.
256 E_USER_ERROR ( int ) Сообщения об ошибках, сгенерированные пользователем. Такие ошибки схожи с E_ERROR , за исключением того, что они генерируются в коде скрипта средствами функции PHP trigger_error() .
512 E_USER_WARNING ( int ) Предупреждения, сгенерированные пользователем. Такие предупреждения схожи с E_WARNING , за исключением того, что они генерируются в коде скрипта средствами функции PHP trigger_error() .
1024 E_USER_NOTICE ( int ) Уведомления, сгенерированные пользователем. Такие уведомления схожи с E_NOTICE , за исключением того, что они генерируются в коде скрипта, средствами функции PHP trigger_error() .
2048 E_STRICT ( int ) Включаются для того, чтобы PHP предлагал изменения в коде, которые обеспечат лучшее взаимодействие и совместимость кода.
4096 E_RECOVERABLE_ERROR ( int ) Фатальные ошибки с возможностью обработки. Такие ошибки указывают, что, вероятно, возникла опасная ситуация, но при этом, скриптовый движок остаётся в стабильном состоянии. Если такая ошибка не обрабатывается функцией, определённой пользователем для обработки ошибок (смотрите set_error_handler() ), выполнение приложения прерывается, как происходит при ошибках E_ERROR .
8192 E_DEPRECATED ( int ) Уведомления времени выполнения об использовании устаревших конструкций. Включаются для того, чтобы получать предупреждения о коде, который не будет работать в следующих версиях PHP.
16384 E_USER_DEPRECATED ( int ) Уведомления времени выполнения об использовании устаревших конструкций, сгенерированные пользователем. Такие уведомления схожи с E_DEPRECATED за исключением того, что они генерируются в коде скрипта, с помощью функции PHP trigger_error() .
32767 E_ALL ( int ) Все поддерживаемые ошибки, предупреждения и замечания.

Представленные выше значения (как числовые, так и символьные) используются для задания битовой маски, определяющей об ошибках какого типа будет даваться отчёт. Вы можете использовать побитовые операторы, чтобы совмещать эти значения для указания определённых типов ошибок. Стоит отметить, что в php.ini допустимы только следующие операторы: ‘|’, ‘

User Contributed Notes 20 notes

[Editor’s note: fixed E_COMPILE_* cases that incorrectly returned E_CORE_* strings. Thanks josiebgoode.]

The following code expands on Vlad’s code to show all the flags that are set. if not set, a blank line shows.

= error_reporting ();
for ( $i = 0 ; $i 15 ; $i ++ ) <
print FriendlyErrorType ( $errLvl & pow ( 2 , $i )) . «
\\n» ;
>

function FriendlyErrorType ( $type )
<
switch( $type )
<
case E_ERROR : // 1 //
return ‘E_ERROR’ ;
case E_WARNING : // 2 //
return ‘E_WARNING’ ;
case E_PARSE : // 4 //
return ‘E_PARSE’ ;
case E_NOTICE : // 8 //
return ‘E_NOTICE’ ;
case E_CORE_ERROR : // 16 //
return ‘E_CORE_ERROR’ ;
case E_CORE_WARNING : // 32 //
return ‘E_CORE_WARNING’ ;
case E_COMPILE_ERROR : // 64 //
return ‘E_COMPILE_ERROR’ ;
case E_COMPILE_WARNING : // 128 //
return ‘E_COMPILE_WARNING’ ;
case E_USER_ERROR : // 256 //
return ‘E_USER_ERROR’ ;
case E_USER_WARNING : // 512 //
return ‘E_USER_WARNING’ ;
case E_USER_NOTICE : // 1024 //
return ‘E_USER_NOTICE’ ;
case E_STRICT : // 2048 //
return ‘E_STRICT’ ;
case E_RECOVERABLE_ERROR : // 4096 //
return ‘E_RECOVERABLE_ERROR’ ;
case E_DEPRECATED : // 8192 //
return ‘E_DEPRECATED’ ;
case E_USER_DEPRECATED : // 16384 //
return ‘E_USER_DEPRECATED’ ;
>
return «» ;
>
?>

-1 is also semantically meaningless as a bit field, and only works in 2s-complement numeric representations. On a 1s-complement system -1 would not set E_ERROR. On a sign-magnitude system -1 would set nothing at all! (see e.g. http://en.wikipedia.org/wiki/Ones%27_complement)

If you want to set all bits,

0 is the correct way to do it.

But setting undefined bits could result in undefined behaviour and that means *absolutely anything* could happen 🙂

A simple and neat way to get the error level from the error code. You can even customize the error level names further.

= [
E_ERROR => «E_ERROR» ,
E_WARNING => «E_WARNING» ,
E_PARSE => «E_PARSE» ,
E_NOTICE => «E_NOTICE» ,
E_CORE_ERROR => «E_CORE_ERROR» ,
E_CORE_WARNING => «E_CORE_WARNING» ,
E_COMPILE_ERROR => «E_COMPILE_ERROR» ,
E_COMPILE_WARNING => «E_COMPILE_WARNING» ,
E_USER_ERROR => «E_USER_ERROR» ,
E_USER_WARNING => «E_USER_WARNING» ,
E_USER_NOTICE => «E_USER_NOTICE» ,
E_STRICT => «E_STRICT» ,
E_RECOVERABLE_ERROR => «E_RECOVERABLE_ERROR» ,
E_DEPRECATED => «E_DEPRECATED» ,
E_USER_DEPRECATED => «E_USER_DEPRECATED» ,
E_ALL => «E_ALL»
];

echo $exceptions [ «1» ];
$code = 256 ;
echo $exceptions [ $code ];
?>

Output:
E_ERROR
E_USER_ERROR

This will need updating when PHP updates the error level names. Otherwise, it works just fine.

An other way to get all PHP errors that are set to be reported. This code will even work, when additional error types are added in future.

= 0 ;
foreach ( array_reverse ( str_split ( decbin ( error_reporting ()))) as $bit ) <
if ( $bit == 1 ) <
echo array_search ( pow ( 2 , $pot ), get_defined_constants ( true )[ ‘Core’ ]). «
\n» ;
>
$pot ++;
>
?>

A neat way to have a place in code to control error reporting configuration 🙂

= [
E_ERROR => FALSE ,
E_WARNING => TRUE ,
E_PARSE => TRUE ,
E_NOTICE => TRUE ,
E_CORE_ERROR => FALSE ,
E_CORE_WARNING => FALSE ,
E_COMPILE_ERROR => FALSE ,
E_COMPILE_WARNING => FALSE ,
E_USER_ERROR => TRUE ,
E_USER_WARNING => TRUE ,
E_USER_NOTICE => TRUE ,
E_STRICT => FALSE ,
E_RECOVERABLE_ERROR => TRUE ,
E_DEPRECATED => FALSE ,
E_USER_DEPRECATED => TRUE ,
E_ALL => FALSE ,
];

error_reporting (
array_sum (
array_keys ( $errorsActive , $search = true )
)
);

super simple error code to human readable conversion:

function prettycode($code) <
return $code == 0 ? «FATAL» : array_search($code, get_defined_constants(true)[‘Core’]);
>

Notes posted above limited to current errors level as on 26th Aug 2016, following snippet will work even on introduction of new error level

$errLvl = error_reporting();
for ( $i = 1; $i

As for me, the best way to get error name by int value is that. And it’s works fine for me 😉
( array_slice ( get_defined_constants ( true )[ ‘Core’ ], 1 , 15 , true ))[ $type ];

//the same in readable form
array_flip (
array_slice (
get_defined_constants ( true )[ ‘Core’ ],
1 ,
15 ,
true
)
)[ $type ]

A shorter version of vladvarna’s FriendlyErrorType($type)
function getErrorTypeByValue ( $type ) <
$constants = get_defined_constants ( true );

foreach ( $constants [ ‘Core’ ] as $key => $value ) < // Each Core constant
if ( preg_match ( ‘/^E_/’ , $key ) ) < // Check error constants
if ( $type == $value )
return( » $key = $value » );
>
>
> // getErrorTypeByValue()

echo «[» . getErrorTypeByValue ( 1 ) . «]» . PHP_EOL ;
echo «[» . getErrorTypeByValue ( 0 ) . «]» . PHP_EOL ;
echo «[» . getErrorTypeByValue ( 8 ) . «]» . PHP_EOL ;
?>

Will give
[E_ERROR=1]
[]
[E_NOTICE=8]

My version!
For long list function returns for example «E_ALL without E_DEPRECATED «

function errorLevel()
<
$levels = array(
‘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’,
‘E_STRICT’,
‘E_RECOVERABLE_ERROR’,
‘E_DEPRECATED’,
‘E_USER_DEPRECATED’,
‘E_ALL’
);
$excluded = $included = array();
$errLvl = error_reporting();
foreach ($levels as $lvl) <
$val = constant($lvl);
if ($errLvl & $val) <
$included []= $lvl;
> else <
$excluded []= $lvl;
>
>
if (count($excluded) > count($included)) <
echo ‘
Consist: ‘.implode(‘,’, $included);
> else <
echo ‘
Consist: E_ALL without ‘.implode(‘,’, $excluded);
>
>

Well, technically -1 will show all errors which includes any new ones included by PHP. My guess is that E_ALL will always include new error constants so I usually prefer:

( E_ALL | E_STRICT );
?>

Reason being: With a quick glance anyone can tell you what errors are reported. -1 might be a bit more cryptic to newer programmers.

this would give you all the reported exception list of your configuration.

Источник

Читайте также:  Spring restcontroller exception handler
Smartadm.ru
Adblock
detector