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

Следующие константы доступны как часть ядра PHP.

Битовая маска из символических имён или числовых эквивалентов следующих констант устанавливает уровень отчёта об ошибках. Отчёт о конкретных типах ошибок включается путём установки или сброса битов маски при комбинации констант побитовыми операторами.

Подсказка

В файле php.ini вместо буквальных числовых значений разрешается указывать названия констант с эквивалентными значениями. В файле php.ini распознаются только побитовые операторы |, ~, ^, & и оператор отрицания !.

Внимание

Символические имена констант не поддерживаются вне PHP-среды, например, в файле httpd.conf вместо констант потребуется указать вычисленное значение битовой маски.

E_ERROR (int)
Фатальные ошибки времени выполнения. Значение указывает на неустранимые ошибки наподобие проблемы выделения памяти. При критической ошибке выполнение скрипта прерывается. Значение константы: 1
E_WARNING (int)
Предупреждения времени выполнения, некритические ошибки. Выполнение скрипта не прерывается. Значение константы: 2
E_PARSE (int)
Синтаксические ошибки на этапе компиляции. Ошибки разбора генерирует только синтаксический анализатор. Значение константы: 4
E_NOTICE (int)
Уведомления времени выполнения. Значение указывает, что скрипт не нарушает формальные правила синтаксиса и не ломает выполнение программы, но содержит возможную ошибку, которая делает результат работы программы непредсказуемым. Значение константы: 8
E_CORE_ERROR (int)
Фатальные ошибки при запуске и инициализации PHP. Ошибки этого уровня аналогичны ошибкам уровня E_ERROR, но генерируются ядром PHP. Значение константы: 16
E_CORE_WARNING (int)
Предупреждения при запуске и инициализации PHP, некритические ошибки. Ошибки этого уровня аналогичны ошибкам уровня E_WARNING, но генерируются ядром PHP. Значение константы: 32
E_COMPILE_ERROR (int)
Фатальные ошибки на этапе компиляции. Ошибки этого уровня аналогичны ошибкам уровня E_ERROR, но генерируются движком Zend. Значение константы: 64
E_COMPILE_WARNING (int)
Предупреждения на этапе компиляции, некритические ошибки. Ошибки этого уровня аналогичны ошибкам уровня E_WARNING, но генерируются движком Zend. Значение константы: 128
E_DEPRECATED (int)
Уведомления времени выполнения об устаревании. Ошибки этого уровня предупреждают о коде, который перестанет работать в следующих версиях PHP. Значение константы: 8192
E_USER_ERROR (int)
Пользовательские сообщения об ошибках. Ошибки этого уровня аналогичны ошибкам уровня E_ERROR, но генерируются в PHP-коде вызовом функции trigger_error(). Значение константы: 256
Внимание

С PHP 8.4.0 передача константы в функцию trigger_error() устарела. Альтернатива — ключевое слово throw и исключения Exception или вызов функции exit().

E_USER_WARNING (int)
Пользовательские предупреждения. Ошибки этого уровня аналогичны ошибкам уровня E_WARNING, но генерируются в PHP-коде вызовом функции trigger_error(). Значение константы: 512
E_USER_NOTICE (int)
Пользовательские уведомления. Ошибки этого уровня аналогичны ошибкам уровня E_NOTICE, но генерируются в PHP-коде вызовом функции trigger_error(). Значение константы: 1024
E_USER_DEPRECATED (int)
Пользовательские сообщения об устаревании. Ошибки этого уровня аналогичны ошибкам уровня E_DEPRECATED, но генерируются в PHP-коде вызовом функции trigger_error(). Значение константы: 16384
E_STRICT (int)
Ошибки времени выполнения. На этом уровне PHP выдаёт предложения об изменениях кода, которые повысят совместимость кода с новыми версиями PHP. Значение константы: 2048
Внимание

С PHP 8.4.0 ошибки этого уровня устарели, PHP перестал выдавать рекомендации.

E_RECOVERABLE_ERROR (int)
Устаревшие «исключения» движка, которые соответствуют перехватываемым фатальным ошибкам. Ошибки этого уровня похожи на ошибки Error, но отлавливаются пользовательским обработчиком ошибок: set_error_handler(). Поведение необработанной ошибки этого уровня аналогично поведению ошибок уровня E_ERROR. Значение константы: 4096

Замечание: PHP фактически не выдаёт ошибки этого уровня, единственный пример — ошибка при интерпретации внутреннего объекта (object) как значения с типом bool. До PHP 8.4.0 такую ошибку, например, генерировало включение объекта GMP в условное выражение.

E_ALL (int)
Битовая маска, которая включает отчёт обо всех ошибках, предупреждениях и уведомлениях. Значение константы: 30719
Внимание

Значение константы до PHP 8.4: 32767

Добавить

Примечания пользователей 8 notes

up
23
Andy at Azurite (co uk)
14 years ago
-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 :-)
up
15
cl at viazenetti dot de
8 years ago
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++;
}
?>
up
18
russthom at fivegulf dot com
13 years ago
[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 "";
}
?>
up
13
fadhilinjagi at gmail dot com
4 years ago
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.
up
13
bbrokman at gmail dot com
6 years ago
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)
    )
);

?>
up
6
kezzyhko at NOSPAM dot semysha dot ru
9 years ago
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]

?>
up
2
kaioker
4 years ago
super simple error code to human readable conversion:

function prettycode($code){
    return $code == 0 ? "FATAL" : array_search($code, get_defined_constants(true)['Core']);
}
up
-1
ErikBachmann
6 years ago
<?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]
To Top