update page now
PHP 8.4.20 Released!

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

Следующие константы доступны как часть ядра 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
14
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
17
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
12
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
12
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
3
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
1
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
-2
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