While $php_errormsg is a global, it is not a superglobal.
You'll have to qualify it with a global keyword inside a function.
<?php
function checkErrormsg()
{
global $php_errormsg;
@strpos();
return $php_errormsg;
}
?>
PHP - Manual: $php_errormsg
2024-11-23
$php_errormsg — 前一个错误信息
本特性已自 PHP 7.2.0 起废弃。强烈建议不要使用本特性。
用 error_get_last() 函数代替。
$php_errormsg 变量包含由 PHP 生成的最新错误信息。这个变量只在错误发生的作用域内可用,并且要求 track_errors 配置项是开启的(默认是关闭的)。
如果用户定义了错误处理句柄(set_error_handler())并且返回 false
的时候,$php_errormsg 就会被设置。
版本 | 说明 |
---|---|
8.0.0 | 可使 $php_errormsg 可用的 track_errors 指令已被删除。 |
7.2.0 | 可使 $php_errormsg 可用的 track_errors 指令已被弃用。 |
示例 #1 $php_errormsg 范例
<?php
@strpos();
echo $php_errormsg;
?>
以上例程的输出类似于:
Wrong parameter count for strpos()
While $php_errormsg is a global, it is not a superglobal.
You'll have to qualify it with a global keyword inside a function.
<?php
function checkErrormsg()
{
global $php_errormsg;
@strpos();
return $php_errormsg;
}
?>
$php_errormsg does not contain the error message generated inside a function. See the example below:
<?php
@strpos();
function checkErrormsg()
{
global $php_errormsg;
echo "First Error is: $php_errormsg <br />";
@ini_set();
echo "Error is: $php_errormsg";
}
checkErrormsg();
?>
This will output:
First Error is: strpos() expects at least 2 parameters, 0 given
Error is: strpos() expects at least 2 parameters, 0 given
Note: This variable doesn't seem to get populated if you're running Xdebug.
The track_errors parameter is PHP_INI_ALL, so you can use code like this:
<?php
ini_set('track_errors', 1);
$result = @do_risky_thing();
if (! $result) {
echo '<p>Error' . htmlspecialchars($php_errormsg) . '</p>';
}
ini_set('track_errors', 0);
?>
官方地址:https://www.php.net/manual/en/reserved.variables.phperrormsg.php