The constants below are always available as part of the PHP core.
The following constants (either the corresponding numerical value or their symbolic name) are used as a bitmask to specify which errors to report. It is possible to use bitwise operators to combine these values or mask out certain types of errors.
The name of the constants can be used within php.ini,
instead of the raw numerical values to which they correspond to.
However, only the
|
,
~
,
^
,
!
,
&
operators are understood within php.ini.
It is not possible to use the symbolic names outside of PHP. For example in httpd.conf the computed bitmask value must be used instead.
E_ERROR
(int )
1
E_WARNING
(int )
2
E_PARSE
(int )
4
E_NOTICE
(int )
8
E_CORE_ERROR
(int )
E_ERROR
,
except it is generated by the core of PHP.
Value of the constant: 16
E_CORE_WARNING
(int )
E_WARNING
,
except it is generated by the core of PHP.
Value of the constant: 32
E_COMPILE_ERROR
(int )
E_ERROR
,
except it is generated by the Zend Scripting Engine.
Value of the constant: 64
E_COMPILE_WARNING
(int )
E_WARNING
,
except it is generated by the Zend Scripting Engine.
Value of the constant: 128
E_DEPRECATED
(int )
8192
E_USER_ERROR
(int )
E_ERROR
,
except it is generated in PHP code by using the PHP function
trigger_error() .
Value of the constant: 256
Usage of this constant with trigger_error() is
deprecated as of PHP 8.4.0.
It is recommended to either throw
an Exception
or call exit() instead.
E_USER_WARNING
(int )
E_WARNING
,
except it is generated in PHP code by using the PHP function
trigger_error() .
Value of the constant: 512
E_USER_NOTICE
(int )
E_NOTICE
,
except it is generated in PHP code by using the PHP function
trigger_error() .
Value of the constant: 1024
E_USER_DEPRECATED
(int )
E_DEPRECATED
,
except it is generated in PHP code by using the PHP function
trigger_error() .
Value of the constant: 16384
E_STRICT
(int )
2048
This error level is unused, and has been deprecated as of PHP 8.4.0.
E_RECOVERABLE_ERROR
(int )
E_ERROR
.
Value of the constant: 4096
Note: This error level is effectively unused, the only case where this can happen is when interpreting an object as a bool fails. This can only happen for internal objects. The most common example, prior to PHP 8.4.0, is using a GMP instance in a conditional.
E_ALL
(int )
32767
-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 :-)
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++;
}
?>
[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 "";
}
?>
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)
)
);
?>
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.
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]
?>
super simple error code to human readable conversion:
function prettycode($code){
return $code == 0 ? "FATAL" : array_search($code, get_defined_constants(true)['Core']);
}
Since PHP 8.4.0:
E_STRICT (2048) has been removed.
E_ALL is now equal to 30719
<?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]