error_get_last

(PHP 5 >= 5.2.0)

error_get_last Получение информации о последней произошедшей ошибке

Описание

array error_get_last ( void )

Получает информацию о последней произошедшей ошибке.

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

Возвращает ассоциативный массив с описанием последней произошедшей ошибки. Ключи массива: "type", "message", "file" и "line". Если ошибка произошла во внутренней функции PHP, элемент с ключом "message" будет начинаться с имени этой функции. Возвращает NULL, если ошибок еще не произошло.

Примеры

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

<?php
echo $a;
print_r(error_get_last());
?>

Результатом выполнения данного примера будет что-то подобное:

Array
(
    [type] => 8
    [message] => Undefined variable: a
    [file] => C:\WWW\index.php
    [line] => 2
)

Коментарии

Автор:
It can't be completely reset, but you can "clear" it well enough for all practical purposes:
<?php
@trigger_error("");
// do stuff...
$e=error_get_last();
if(
$e['message']!==''){
   
// An error occurred
}
?>
2008-06-16 14:36:24
http://php5.kiev.ua/manual/ru/function.error-get-last.html
Автор:
Like $php_errormsg, the return value of this function may not be updated if a user-defined error handler returns non-FALSE. Tested on PHP 5.2.6.

<?php
var_dump
(PHP_VERSION);
// Outputs: string(5) "5.2.6"

@trigger_error("foo");
$e=error_get_last();
var_dump($e['message']);
// Outputs: string(3) "foo"

set_error_handler(create_function('$a,$b',''));

@
trigger_error("bar");
$e=error_get_last();
var_dump($e['message']);
// Outputs: string(3) "foo"

set_error_handler(create_function('$a,$b','return false;'));

@
trigger_error("baz");
$e=error_get_last();
var_dump($e['message']);
// Outputs: string(3) "baz"
?>
2008-06-16 14:54:38
http://php5.kiev.ua/manual/ru/function.error-get-last.html
While mail at mbaierl dot com makes the point that this function isn't best for reporting the possible error condition of the most recently executed step, there are situations in which it is especially helpful to know the last error—regardless of when it occurred.

As an example, imagine if you had some code that captured the output from dynamic pages, and cached it for faster delivery to subsequent visitors. A final sanity check would be to see if an error has occurred anywhere during the execution of the script. If there has been an error, we probably don't want to cache that page.
2008-12-04 18:12:34
http://php5.kiev.ua/manual/ru/function.error-get-last.html
The error_get_last() function will give you the most recent error even when that error is a Fatal error.

Example Usage:

<?php

register_shutdown_function
('handleFatalPhpError');

function 
handleFatalPhpError() {
   
$last_error error_get_last();
   if(
$last_error['type'] === E_ERROR) {
      echo 
"Can do custom output and/or logging for fatal error here...";
   }
}

?>
2009-08-10 13:15:12
http://php5.kiev.ua/manual/ru/function.error-get-last.html
Beware that registing a shutdown function to catch errors won't work if other shutdown functions throw errors.

<?php

register_shutdown_function
('cleanupObjects');
register_shutdown_function('handleFatalPhpError');

function 
cleanupObjects() {
   
trigger_error('An insignificant problem'E_USER_WARNING);
}

function 
handleFatalPhpError() {
   
$last_error error_get_last();
   if(
$last_error['type'] === E_ERROR || $last_error['type'] === E_USER_ERROR) {
      echo 
"Can do custom output and/or logging for fatal error here...";
   }
}

trigger_error('Something serious'E_USER_ERROR);

?>

In the above code, $last_error will contain the warning, becuase cleanupObjects() is called first.
2009-11-05 11:13:10
http://php5.kiev.ua/manual/ru/function.error-get-last.html
If you have the need to check whether an error was a fatal error  before PHP 5.2 (in my case, within an output buffer handler), you can use the following hack:

<?php
# Check if there was a PHP fatal error.
# Using error_get_last is the "right" way, but it requires PHP 5.2+. The back-up is a hack.
if (function_exists('error_get_last')) {
   
$lastPHPError error_get_last();
   
$phpFatalError = isset($lastPHPError) && $lastPHPError['type'] === E_ERROR;
} else {
   
$phpFatalError strstr($output'<b>Fatal error</b>:') && ! strstr($output'</html>');
}
?>

This is, of course, language-dependent, so it wouldn't be good in widely-distributed code, but it may help in certain cases (or at least be the base of something that would work).
2010-06-25 16:47:48
http://php5.kiev.ua/manual/ru/function.error-get-last.html
Автор:
Function error_get_last() will return an error information even if the error is hidden because you've used character @, because of  the "error_reporting" directive in the php.ini file, or because you've used function error_reporting().

Examples:

<?php
error_reporting
(E_ALL E_NOTICE);
$y $x;
$err error_get_last();
var_export($err);
?>
Will display: array ( 'type' => 8, 'message' => 'Undefined variable: x', 'file' => 'test.php', 'line' => 4, )

<?php
$y 
= @$x;
$err error_get_last();
var_export($err);
?>
Will display: array ( 'type' => 8, 'message' => 'Undefined variable: x', 'file' => 'test.php', 'line' => 4, )
2010-07-24 18:09:20
http://php5.kiev.ua/manual/ru/function.error-get-last.html
If an error handler (see set_error_handler ) successfully handles an error then that error will not be reported by this function.
2010-10-07 07:41:59
http://php5.kiev.ua/manual/ru/function.error-get-last.html
To simulate this function in a horrid way for php <5.2, you can use something like this.
<?php
if( !function_exists('error_get_last') ) {
   
set_error_handler(
       
create_function(
           
'$errno,$errstr,$errfile,$errline,$errcontext',
           
'
                global $__error_get_last_retval__;
                $__error_get_last_retval__ = array(
                    \'type\'        => $errno,
                    \'message\'        => $errstr,
                    \'file\'        => $errfile,
                    \'line\'        => $errline
                );
                return false;
            '
       
)
    );
    function 
error_get_last() {
        global 
$__error_get_last_retval__;
        if( !isset(
$__error_get_last_retval__) ) {
            return 
null;
        }
        return 
$__error_get_last_retval__;
    }
}
?>
2011-04-19 05:36:58
http://php5.kiev.ua/manual/ru/function.error-get-last.html
To know if something happened between two statements one can of course use a special string with user_error() (in lieu of a built-in special reset mentioned by mail at mbaierl dot com): <?php
@user_error($error_get_last_mark='error_get_last mark');
$not_set;
$error_get_last=error_get_last();
$something_happened=($error_get_last['message']!=$error_get_last_mark); ?>

If your <?php set_error_handler(function) ?> function returns true then you'll have to roll you own error_get_last functionality. (Shortly mentioned by dmgx dot michael at gmail dot com).

To manual moderators: Re php.net/manual/add-note.php: Since i guess the above technically sorts under "References to other notes" i feel the need to defend myself with that i'm thinking it might show for usability where other's say it fails and no, i haven't got any other medium to reach the readers of the php manual notes.
Also, you could have some examples of what notes you think is okay. Thanks for your moderation.
2013-03-06 13:26:37
http://php5.kiev.ua/manual/ru/function.error-get-last.html
[Editor's note: as of PHP 7.0.0 there is error_clear_last() to clear the most recent error.]

To clear error_get_last(), or put it in a well defined state, you should use the code below. It works even when a custom error handler has been set.

<?php

// var_dump or anything else, as this will never be called because of the 0
set_error_handler('var_dump'0);
@
$undef_var;
restore_error_handler();

// error_get_last() is now in a well known state:
// Undefined variable: undef_var

... // Do something

$e error_get_last();

...

?>
2013-10-24 00:37:29
http://php5.kiev.ua/manual/ru/function.error-get-last.html
This is a simple debugging script for mail functions...

<?php
//Built By Manomite for Debugging

class Error{

function 
__construct(){

error_reporting E_ALL E_NOTICE );
$err error_get_last ();

if(
$err){

$res "An error has occurred in your application sir.\n Details Include " .$err.""

mail("admin@manomite.net","Error Occurred",$res,$from);
}
}
}
?>
2017-12-19 01:06:41
http://php5.kiev.ua/manual/ru/function.error-get-last.html
Автор:
Be aware that error_get_last() returns only uncaught errors.
Caught ones will never get to the error_get_last(), i.e.:
- $error_levels registered with set_error_handler() when $callback does not return false,
- all exceptions, including errors not supported by set_error_handler() (like :E_ERROR/fatal error, E_PARSE, etc.) that are exceptions in fact,
  when set_exception_handler($callback) is registered,
- exceptions caught by try/catch block.
2023-05-20 10:24:27
http://php5.kiev.ua/manual/ru/function.error-get-last.html

    Поддержать сайт на родительском проекте КГБ