Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类“Exception”的消息导致PHP致命错误_Php_Exception - Fatal编程技术网

类“Exception”的消息导致PHP致命错误

类“Exception”的消息导致PHP致命错误,php,exception,Php,Exception,执行此简单代码后: $message = 'some text '.inet_pton('119.252.33.171'); throw new \Exception($message); PHP返回致命错误 Fatal error</b>: in ... 但这并没有发生。通过此消息,类异常中会发生错误 注释和取消注释代码3-4和6-7的两行 转换许多其他IP时会注意到此行为。 目前,在抛出新代码之前,我使用以下行解决了问题: $message = preg_replace( '

执行此简单代码后:

$message = 'some text '.inet_pton('119.252.33.171');
throw new \Exception($message);
PHP返回致命错误

Fatal error</b>: in ...
但这并没有发生。通过此消息,类异常中会发生错误

注释和取消注释代码3-4和6-7的两行

转换许多其他IP时会注意到此行为。 目前,在抛出新代码之前,我使用以下行解决了问题:

$message = preg_replace( '/[^[:print:]\r\n]/', '_', $message);
如何正确地转义消息中的字符以防出现异常或PHP错误

我的PHP版本是7.2,这是因为inet\u pton不是用来输出字符串的,而是按网络顺序输出字节的,我不记得它是小端还是大端

异常消息不包含字节,而是包含可打印字符。但是,您可以将纯字节放入字符串中。然后将其解码为UTF-8或其他编码以显示可读文本

下面的代码

$message = inet_pton('119.252.33.171');
var_dump($message);
for($i = 0; $i < strlen($message); $i++)
{
   echo ord($message[$i]) . "\n";
}
比较这两条线

throw new \Exception(chr(33)); // Displays stacktrace
throw new \Exception(chr(252)); // Fails to output
我的猜测是,当PHP试图将字符串格式化为UTF-8以将异常消息打印到stdout时,会发生错误,但传入了无效的UTF-8字符串,写入/解码失败

无论哪种方式,都像是PHP中的一个bug。

您不正确地使用了inet\u pton,因为它就是这样做的:

inet_pton — Converts a human readable IP address to its packed in_addr representation
您应该在不调用inet\u pton的情况下将地址附加到字符串

现在,关于错误

从5.5.12到7.2.8,我的所有PHP设置中都不会出现此错误。 这是我从PHP5.5.12中得到的错误消息:

Fatal error: Uncaught exception 'Exception' with message 'some text wü!«' in C:\wamp\www\so\54584039.php:5 Stack trace: #0 {main} thrown in C:\wamp\www\so\54584039.php on line 5
我从其他版本得到了相同的未捕获异常错误,由确认

这意味着该错误必须由PHP设置中发生的异常消息的后处理引起 但在3v4l.org的设置和我的设置中没有出现

我突然想到,一个可能的罪魁祸首是html_错误配置选项。 我将其设置为On,以了解将要发生的事情,果然,我发现了您的错误:

<br />
<b>Fatal error</b>:   in <b>C:\wamp\www\so\54584039.php</b> on line <b>5</b><br />
因此,解决方案是将html_错误设置为Off

我强烈建议您始终将其设置为Off,
因为如果您正在处理JSON输出或其他格式,HTML格式是无用的,而且还会使错误消息更难阅读。

当您抛出异常时,您的标题和问题不匹配且令人困惑,这当然会导致致命错误。您捕获到异常了吗?没有,因为错误消息“some text”.inet_pton'119.252.33.171';它本身会在异常类中导致错误。在您的主机上运行我的示例并查看结果。我无法仅通过inet\u pton调用重现该错误。你确定这就是异常的原因吗?@Miron你确定这个致命错误吗?在我的7.2.11版上,设置了显示错误和E_ALL时不会发生这种情况。致命错误的确切信息是什么?致命错误:在。。。在第92行,这是PHP错误-这是真的。只有在您的示例中,最好使用mb_ord。
Fatal error: Uncaught exception 'Exception' with message 'some text wü!«' in C:\wamp\www\so\54584039.php:5 Stack trace: #0 {main} thrown in C:\wamp\www\so\54584039.php on line 5
<br />
<b>Fatal error</b>:   in <b>C:\wamp\www\so\54584039.php</b> on line <b>5</b><br />