PHP Handbuch
Zurück |  | Nach vorne

# set_error_handler

(PHP 4 )

set_error_handler -- Sets a user-defined error handler function.

## Description

``string set_error_handler` (string error_handler)`

Sets a user function (`error_handler`) to handle errors in a script. Returns the previously defined error handler (if any), or `FALSE` on error. This function can be used for defining your own way of handling errors during runtime, for example in applications in which you need to do cleanup of data/files when a critical error happens, or when you need to trigger an error under certain conditions (using trigger_error())

The user function needs to accept 2 parameters: the error code, and a string describing the error. The example below shows the handling of internal execptions by triggering errors and handling them with a user defined function:

Beispiel 1. Error handling with set_error_handler() and trigger_error()
    <?php

    // redefine the user error constants - PHP4 only
    define(FATAL,E_USER_ERROR);
    define(ERROR,E_USER_WARNING);
    define(WARNING,E_USER_NOTICE);

    // set the error reporting level for this script
    error_reporting(FATAL + ERROR + WARNING);

    // error handler function
    function myErrorHandler ($errno, $errstr) {
        switch ($errno) {
        case FATAL:
        echo "<b>FATAL</b> [$errno] $errstr<br>\n";
        echo "  Fatal error in line ".__LINE__." of file ".__FILE__;
        echo ", PHP ".PHP_VERSION." (".PHP_OS.")<br>\n";
        echo "Aborting...<br>\n";
        exit -1;
        break;
        case ERROR:
        echo "<b>ERROR</b> [$errno] $errstr<br>\n";
        break;
        case WARNING:
        echo "<b>WARNING</b> [$errno] $errstr<br>\n";
        break;
        default:
        echo "Unkown error type: [$errno] $errstr<br>\n";
        break;
        }
    }

    // function to test the error handling
    function scale_by_log ($vect, $scale) {
        if ( !is_numeric($scale) || $scale <= 0 )
        trigger_error("log(x) for x <= 0 is undefined, you used: scale = $scale",
          FATAL);
        if (!is_array($vect)) {
        trigger_error("Incorrect input vector, array of values expected", ERROR);
        return null;
        }
        for ($i=0; $i<count($vect); $i++) {
        if (!is_numeric($vect[$i]))
        trigger_error("Value at position $i is not a number, using 0 (zero)",
          WARNING);
        $temp[$i] = log($scale) * $vect[$i];
        }
        return $temp;
    }

    // set to the user defined error handler
    $old_error_handler = set_error_handler("myErrorHandler");

    // trigger some errors, first define a mixed array with a non-numeric item
    echo "vector a\n";
    $a = array(2,3,"foo",5.5,43.3,21.11);
    print_r($a);

    // now generate second array, generating a warning
    echo "----\nvector b - a warning (b = log(PI) * a)\n";
    $b = scale_by_log($a, M_PI);
    print_r($b);

    // this is trouble, we pass a string instead of an array
    echo "----\nvector c - an error\n";
    $c = scale_by_log("not array",2.3);
    var_dump($c);

    // this is a critical error, log of zero or negative number is undefined
    echo "----\nvector d - fatal error\n";
    $d = scale_by_log($a, -2.5);

    ?>

And when you run this sample script, the output will be

    vector a
    Array
    (
        [0] => 2
        [1] => 3
        [2] => foo
        [3] => 5.5
        [4] => 43.3
        [5] => 21.11
    )
    ----
    vector b - a warning (b = log(PI) * a)
    <b>WARNING</b> [1024] Value at position 2 is not a number, using 0 (zero)<br>
    Array
    (
        [0] => 2.2894597716988
        [1] => 3.4341896575482
        [2] => 0
        [3] => 6.2960143721717
        [4] => 49.566804057279
        [5] => 24.165247890281
    )
    ----
    vector c - an error
    <b>ERROR</b> [512] Incorrect input vector, array of values expected<br>
    NULL
    ----
    vector d - fatal error
    <b>FATAL</b> [256] log(x) for x <= 0 is undefined, you used: scale = -2.5<br>
      Fatal error in line 16 of file trigger_error.php, PHP 4.0.1pl2 (Linux)<br>
    Aborting...<br>

See also error_reporting(), restore_error_handler(), trigger_error(), user_error()

Zurück | Zum Anfang | Nach vorne
restore_error_handler | Nach oben | trigger_error