Предопределенные константы
Перечисленные ниже константы всегда доступны как часть ядра PHP.
Замечание: Данные имена констант можно использовать в файле php.ini но не вне PHP, как например в файле httpd.conf, где вместо них необходимо использовать значения их битовых масок.
Значение | Константа | Описание | Примечание |
---|---|---|---|
1 |
E_ERROR
(integer)
|
Фатальные ошибки времени выполнения. Это неустранимые средствами самого скрипта ошибки, такие как ошибка распределения памяти и т.п. Выполнение скрипта в таком случае прекращается. | |
2 |
E_WARNING
(integer)
|
Предупреждения времени выполнения (не фатальные ошибки). Выполнение скрипта в таком случае не прекращается. | |
4 |
E_PARSE
(integer)
|
Ошибки на этапе компиляции. Должны генерироваться только парсером. | |
8 |
E_NOTICE
(integer)
|
Уведомления времени выполнения. Указывают на то, что во время выполнения скрипта произошло что-то, что может указывать на ошибку, хотя это может происходить и при обычном выполнении программы. | |
16 |
E_CORE_ERROR
(integer)
|
Фатальные ошибки, которые происходят во время запуска РНР. Такие ошибки схожи с
E_ERROR , за исключением того, что они генерируются ядром PHP.
|
|
32 |
E_CORE_WARNING
(integer)
|
Предупреждения (не фатальные ошибки), которые происходят во время начального запуска РНР.
Такие предупреждения схожи с E_WARNING , за исключением того,
что они генерируются ядром PHP.
|
|
64 |
E_COMPILE_ERROR
(integer)
|
Фатальные ошибки на этапе компиляции. Такие ошибки
схожи с E_ERROR , за исключением того,
что они генерируются скриптовым движком Zend.
|
|
128 |
E_COMPILE_WARNING
(integer)
|
Предупреждения на этапе компиляции (не фатальные ошибки). Такие
предупреждения схожи с E_WARNING , за
исключением того, что они генерируются скриптовым движком Zend.
|
|
256 |
E_USER_ERROR
(integer)
|
Сообщения об ошибках сгенерированные пользователем. Такие
ошибки схожи с E_ERROR , за исключением
того, что они генерируются в коде скрипта средствами функции
PHP trigger_error().
|
|
512 |
E_USER_WARNING
(integer)
|
Предупреждения сгенерированные пользователем. Такие
предупреждения схожи с E_WARNING ,
за исключением того, что они генерируются в коде скрипта
средствами функции PHP trigger_error().
|
|
1024 |
E_USER_NOTICE
(integer)
|
Уведомления сгенерированные пользователем. Такие уведомления
схожи с E_NOTICE , за исключением того,
что они генерируются в коде скрипта, средствами
функции PHP trigger_error().
|
|
2048 |
E_STRICT
(integer)
|
Включаются для того, чтобы PHP предлагал изменения в коде, которые обеспечат лучшее взаимодействие и совместимость кода. | Начиная с PHP 5, но не включены в E_ALL вплоть до PHP 5.4.0 |
4096 |
E_RECOVERABLE_ERROR
(integer)
|
Фатальные ошибки с возможностью обработки. Такие ошибки указывают, что,
вероятно, возникла опасная ситуация, но при этом, скриптовый движок остается в стабильном состоянии.
Если такая ошибка не обрабатывается функцией, определенной пользователем для обработки ошибок
(см. set_error_handler()), выполнение приложения прерывается, как происходит
при ошибках E_ERROR .
|
Начиная с PHP 5.2.0 |
8192 |
E_DEPRECATED
(integer)
|
Уведомления времени выполнения об использовании устаревших конструкций. Включаются для того, чтобы получать предупреждения о коде, который не будет работать в следующих версиях PHP. | Начиная с PHP 5.3.0 |
16384 |
E_USER_DEPRECATED
(integer)
|
Уведомления времени выполнения об использовании устаревших
конструкций, сгенерированные пользователем. Такие уведомления
схожи с E_DEPRECATED за исключением того,
что они генерируются в коде скрипта, с помощью функции PHP
trigger_error().
|
Начиная с PHP 5.3.0 |
32767 |
E_ALL
(integer)
|
Все поддерживаемые ошибки и предупреждения, за исключением
ошибок E_STRICT до PHP 5.4.0.
|
32767 в PHP 5.4.x, 30719 в PHP 5.3.x, 6143 в PHP 5.2.x, 2047 ранее |
Представленные выше значения (как числовые, так и символьные) используются для задания битовой маски, определяющей об ошибках какого типа будет даваться отчет. Вы можете использовать побитовые операторы, чтобы совмещать эти значения для указания определенных типов ошибок. Стоит отметить, что в php.ini допустимы только следующие операторы: '|', '~', '!', '^' и '&'.
Коментарии
-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 :-)
[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.
<?php
$errLvl = error_reporting();
for ($i = 0; $i < 15; $i++ ) {
print FriendlyErrorType($errLvl & pow(2, $i)) . "<br>\\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 "";
}
?>
As for me, the best way to get error name by int value is that. And it's works fine for me ;)
<?php
array_flip(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]
?>
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.
<?php
$pot = 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']). "<br>\n";
}
$pot++;
}
?>
A neat way to have a place in code to control error reporting configuration :)
<?php
$errorsActive = [
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)
)
);
?>
<?php
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]
super simple error code to human readable conversion:
function prettycode($code){
return $code == 0 ? "FATAL" : array_search($code, get_defined_constants(true)['Core']);
}
A simple and neat way to get the error level from the error code. You can even customize the error level names further.
<?php
$exceptions = [
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.