trigger_error

(PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8)

trigger_error Erzeugt eine benutzerdefinierte Fehlermeldung/Warnung/Benachrichtigung

Beschreibung

trigger_error(string $message, int $error_level = E_USER_NOTICE): true

Wird verwendet, um eine benutzerdefinierte Fehlerbedingung auszulösen und kann in Verbindung mit der eingebauten Fehlerbehandlung verwendet werden oder mit einer benutzerdefinierten Funktion, die mittels set_error_handler() als neue Fehlerbehandlung festgelegt wurde.

Diese Funktion ist nützlich, wenn Sie zur Laufzeit eine bestimmte Rückmeldung bei einer Ausnahme brauchen.

Parameter-Liste

message

Die gewünschte Fehlermeldung für diesen Fehler. Die Länge ist auf 1024 Bytes begrenzt, darüber hinausgehende Zeichen werden abgeschnitten.

error_level

Der gewünschte Fehlertyp für diesen Fehler. Es können nur Konstanten der E_USER-Familie gewählt werden, der Vorgabewert ist E_USER_NOTICE.

Rückgabewerte

Gibt immer true zurück.

Fehler/Exceptions

Wenn error_level nicht einer der Werte E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE, E_USER_DEPRECATED ist, wirft diese Funktion einen ValueError.

Changelog

Version Beschreibung
8.0.0 Die Funktion wirft nun einen ValueError, wenn ein ungültiges error_level angegeben wird; zuvor gab sie false zurück.

Beispiele

Beispiel #1 trigger_error()-Beispiel

Siehe auch set_error_handler() für ein ausführlicheres Beispiel.

<?php
if ($divisor == 0) {
trigger_error("Kann nicht durch 0 teilen", E_USER_ERROR);
}
?>

Anmerkungen

Warnung

Die HTML-Entities in der error_msg werden nicht automatisch maskiert. Wenn die Fehlermeldung in einem Browser ausgegeben werden soll, so sollten Sie diese mit htmlentities() vorverarbeiten.

Siehe auch

add a note

User Contributed Notes 5 notes

up
54
someone at attbi dot com
21 years ago
the idea is never to give out file names, line numbers, and cryptic codes to the user. Use trigger_error() after you used set_error_handler() to register your own callback function which either logs or emails the error codes to you, and echo a simple friendly message to the user.

And turn on a more verbose error handler function when you need to debug your scripts. In my init.php scripts I always have:

if (_DEBUG_) {
set_error_handler ('debug_error_handler');
}
else {
set_error_handler ('nice_error_handler');
}
up
14
Howard Yeend
15 years ago
trigger_error always reports the line and file that trigger_error was called on. Which isn't very useful.

eg:

main.php:
<?php
include('functions.php');
$x = 'test';
doFunction($x);
?>

functions.php:
<?php
function doFunction($var) {
if(
is_numeric($var)) {
/* do some stuff*/
} else {
trigger_error('var must be numeric');
}
}
?>

will output "Notice: var must be numeric in functions.php on line 6"
whereas "Notice: var must be numeric in main.php on line 4" would be more useful

here's a function to do that:

<?php

function error($message, $level=E_USER_NOTICE) {
$caller = next(debug_backtrace());
trigger_error($message.' in <strong>'.$caller['function'].'</strong> called from <strong>'.$caller['file'].'</strong> on line <strong>'.$caller['line'].'</strong>'."\n<br />error handler", $level);
}
?>

So now in our example:

main.php:
<?php
include('functions.php');
$x = 'test';
doFunction($x);
?>

functions.php:
<?php
function doFunction($var) {
if(
is_numeric($var)) {
/* do some stuff*/
} else {
error('var must be numeric');
}
}

function
error($message, $level=E_USER_NOTICE) {
$caller = next(debug_backtrace());
trigger_error($message.' in <strong>'.$caller['function'].'</strong> called from <strong>'.$caller['file'].'</strong> on line <strong>'.$caller['line'].'</strong>'."\n<br />error handler", $level);
}
?>

now outputs:

"Notice: var must be numeric in doFunction called from main.php on line 4"
up
8
richard at 2006 dot atterer dot net
18 years ago
Beware, trigger_error() is absolutely useless for transporting your own function's error messages in $php_errormsg:

ini_set('track_errors', TRUE);
function x() { trigger_error('MY ERROR'); }
@x();
echo "Error 1: \\"$php_errormsg\\"\\n";
@file_get_contents('/nonexisting');
echo "Error 2: \\"$php_errormsg\\"\\n";

This outputs:

Error 1: ""
Error 2: "failed to open stream: No such file or directory"

This behaviour is consistent with the description of $php_errormsg, which says that the variable will only be available within the scope in which the error occurred. The problem can be worked around with a custom error handler like the one below. However, I'm undecided whether changing the language in this way is good:

function errHandler($errno, $errstr, $errfile, $errline) {
global $php_errormsg; $php_errormsg = $errstr;
}
set_error_handler('errHandler');
up
5
aydin dot kn12 at gmail dot com
10 years ago
If error_type is E_USER_ERROR then trigger_error throw FATAL ERROR and script stopped after this line.

<?php

$msg
= 'This is the test message for echo';

trigger_error('Error message', E_USER_ERROR); // Script stopped after this line...

echo $msg; // This line does not appear...

?>
up
4
PhpMyCoder
13 years ago
For those of you looking to use your own file or line number in the error (possibly using debug_backtrace()) instead of the ones created by trigger_error(), here is a solution:
Create a custom function to handle E_USER_ERRORs that simply outputs the error type and message, while excluding the line number and file trigger_error() reports. You may also configure it to handle user warnings and notices if necessary (I did in the example below).

<?php
function error_handler($level, $message, $file, $line, $context) {
//Handle user errors, warnings, and notices ourself
if($level === E_USER_ERROR || $level === E_USER_WARNING || $level === E_USER_NOTICE) {
echo
'<strong>Error:</strong> '.$message;
return(
true); //And prevent the PHP error handler from continuing
}
return(
false); //Otherwise, use PHP's error handler
}

function
trigger_my_error($message, $level) {
//Get the caller of the calling function and details about it
$callee = next(debug_backtrace());
//Trigger appropriate error
trigger_error($message.' in <strong>'.$callee['file'].'</strong> on line <strong>'.$callee['line'].'</strong>', $level);
}

//Use our custom handler
set_error_handler('error_handler');

//-------------------------------
//Demo usage:
//-------------------------------
function abc($str) {
if(!
is_string($str)) {
trigger_my_error('abc() expects parameter 1 to be a string', E_USER_ERROR);
}
}

abc('Hello world!'); //Works
abc(18); //Error: abc() expects parameter 1 to be a string in [FILE].php on line 31
?>

This is a pretty simple concept and I'm sure most of you know this, but for those that don't, let it serve as a good example!
To Top