A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://www.php.net/manual/en/function.trigger-error.php below:

PHP: trigger_error - Manual

trigger_error

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

trigger_errorGenerates a user-level error/warning/notice message

Description

This function is useful when you need to generate a particular response to an exception at runtime.

Parameters
message

The designated error message for this error. It's limited to 1024 bytes in length. Any additional characters beyond 1024 bytes will be truncated.

error_level

The designated error type for this error. It only works with the E_USER_* family of constants, and will default to E_USER_NOTICE.

Return Values

Always returns true.

Changelog Version Description 8.4.0 Passing E_USER_ERROR as the error_level is now deprecated. Throw an Exception or call exit() instead. 8.4.0 The function now has a return type of true instead of bool. 8.0.0 The function now throws a ValueError if an invalid error_level is specified. Previously, it returned false. Examples

Example #1 trigger_error() example

See set_error_handler() for a more extensive example.

<?php
$password
= $_POST['password'] ?? '';
if (
$password === '') {
trigger_error("Using an empty password is unsafe", E_USER_WARNING);
}
$hash = password_hash($password, PASSWORD_DEFAULT);
?>

Notes Warning

HTML entities in message are not escaped. Use htmlentities() on the message if the error is to be displayed in a browser.

someone at attbi dot com

22 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');
}
Howard Yeend

16 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)) {
} 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)) {
} 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"

richard at 2006 dot atterer dot net

19 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');
aydin dot kn12 at gmail dot com

11 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); echo $msg; ?>

PhpMyCoder

15 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) {
if($level === E_USER_ERROR || $level === E_USER_WARNING || $level === E_USER_NOTICE) {
echo
'<strong>Error:</strong> '.$message;
return(
true); }
return(
false); }

function

trigger_my_error($message, $level) {
$callee = next(debug_backtrace());
trigger_error($message.' in <strong>'.$callee['file'].'</strong> on line <strong>'.$callee['line'].'</strong>', $level);
}
set_error_handler('error_handler');function abc($str) {
if(!
is_string($str)) {
trigger_my_error('abc() expects parameter 1 to be a string', E_USER_ERROR);
}
}
abc('Hello world!'); abc(18); ?>


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!
theking2 at king dot ma

10 months ago

The function trigger_error will terminate the script if $error_level is equal or higher than E_USER_ERROR.

If you write your own error handler you will have to do these yourself.

Example in which we assume the global LOG constant points to a PSR2 logging interface.


<?php

set_error_handler

( function ($errno, $errstr, $errfile, $errline) {
if( 0 === error_reporting() ) {
return
false;
}
switch(
$errno) {
default:
LOG->error( "Unknown error type: [$errno] $errstr", [ 'file' => $errfile, '@' => $errline ] );
exit(
1);

case

E_USER_ERROR: case E_WARNING: LOG->error( $errstr, [ 'file' => $errfile, '@' => $errline ] );
exit(
1);

case

E_USER_DEPRECATED:
case
E_DEPRECATED:
LOG->error( "DEPRECATED $errstr", [ 'file' => $errfile, '@' => $errline ] );
break;

case

E_USER_WARNING: case E_NOTICE: LOG->warning( $errstr, [ 'file' => $errfile, '@' => $errline ] );
break;

case

E_USER_NOTICE:
LOG->notice( $errstr, [ 'file' => $errfile, '@' => $errline ] );
break;

case

E_ERROR: case E_RECOVERABLE_ERROR:
LOG->critical( $errstr, [ 'file' => $errfile, '@' => $errline ] );
exit(
1);

}


return true;
} );
?>

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4