trigger_error

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

trigger_error生成用户级错误/警告/通知消息

描述

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

用于触发用户错误条件,它可以与内置错误处理程序一起使用,或者与已设置为新错误处理程序的用户定义函数一起使用 (set_error_handler()).

当您需要在运行时对异常生成特定响应时,此函数很有用。

参数

message

此错误的指定错误消息。它的长度限制为 1024 字节。超过 1024 字节的任何额外字符将被截断。

error_level

此错误的指定错误类型。它只适用于 E_USER_* 常量系列,并且将默认设置为 E_USER_NOTICE

返回值

始终返回 true

错误/异常

如果 error_level 不是 E_USER_ERRORE_USER_WARNINGE_USER_NOTICEE_USER_DEPRECATED 之一,则此函数将抛出 ValueError

变更日志

版本 描述
8.0.0 如果指定了无效的 error_level,该函数现在会抛出 ValueError。以前它返回 false

示例

示例 #1 trigger_error() 示例

有关更详细的示例,请参阅 set_error_handler()

<?php
if ($divisor == 0) {
trigger_error("Cannot divide by zero", E_USER_ERROR);
}
?>

注释

警告

message 中的 HTML 实体不会被转义。如果错误要显示在浏览器中,请在消息上使用 htmlentities()

另请参阅

添加注释

用户贡献的注释 5 个注释

someone at attbi dot com
21 年前
诀窍是永远不要向用户提供文件名、行号和神秘代码。在使用 set_error_handler() 注册您自己的回调函数以记录或将错误代码通过电子邮件发送给您之后,使用 trigger_error(),并向用户回显一条简单的友好消息。

并在需要调试脚本时打开更详细的错误处理函数。在我的 init.php 脚本中,我总是拥有

if (_DEBUG_) {
set_error_handler ('debug_error_handler');
}
else {
set_error_handler ('nice_error_handler');
}
Howard Yeend
15 年前
trigger_error() 始终报告调用 trigger_error() 的行和文件。这不太有用。

例如

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');
}
}
?>

将输出 "Notice: var must be numeric in functions.php on line 6"
而 "Notice: var must be numeric in main.php on line 4" 将更有用

这是一个执行该操作的函数

<?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);
}
?>

所以现在在我们的例子中

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);
}
?>

现在输出

"Notice: var must be numeric in doFunction called from main.php on line 4"
richard at 2006 dot atterer dot net
18 年前
注意,trigger_error() 在将您自己的函数的错误消息传输到 $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";

这将输出

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

此行为与 $php_errormsg 的描述一致,该描述表明该变量仅在发生错误的范围内可用。可以使用下面的自定义错误处理程序来解决此问题。但是,我不确定以这种方式更改语言是否好

function errHandler($errno, $errstr, $errfile, $errline) {
global $php_errormsg; $php_errormsg = $errstr;
}
set_error_handler('errHandler');
aydin dot kn12 at gmail dot com
10 年前
如果 error_type 是 E_USER_ERROR,那么 trigger_error 会抛出致命错误,并且脚本在这行代码之后停止执行。

<?php

$msg
= '这是用于 echo 的测试消息';

trigger_error('错误信息', E_USER_ERROR); // 脚本在这行代码之后停止执行...

echo $msg; // 这行代码不会被执行...

?>
PhpMyCoder
14 年前
对于那些希望在错误中使用自己的文件或行号(可能使用 debug_backtrace())而不是由 trigger_error() 创建的那些行号的用户,这里有一个解决方案。
创建一个自定义函数来处理 E_USER_ERRORs,该函数只需输出错误类型和消息,同时排除 trigger_error() 报告的行号和文件。您也可以根据需要配置它来处理用户警告和通知(我在下面的示例中进行了配置)。

<?php
function error_handler($level, $message, $file, $line, $context) {
// 自己处理用户错误、警告和通知
if($level === E_USER_ERROR || $level === E_USER_WARNING || $level === E_USER_NOTICE) {
echo
'<strong>错误:</strong> '.$message;
return(
true); // 阻止 PHP 错误处理程序继续执行
}
return(
false); // 否则,使用 PHP 的错误处理程序
}

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); // 错误: abc() expects parameter 1 to be a string in [FILE].php on line 31
?>

这是一个非常简单的概念,我相信大多数人都知道这一点,但对于那些不知道的人,就让它作为一个很好的例子吧!
To Top