Php 检错控制算子
请告诉我这是否正确。在我的错误处理程序中,我需要能够检测何时使用@error control操作符来抑制错误,因为一些外部库(遗憾的是)经常使用它。脚本的执行应该继续,就像不使用自定义错误处理程序一样 使用at符号时,PHP会临时将错误报告设置为0。因此,在脚本开始时,我们将error_reporting设置为除零以外的任何值-我们现在可以执行一些漂亮的IF/ELSE魔术。为了避免在前端显示任何错误,我们还将display_errors设置为0,这将覆盖错误报告(但我们仍然可以将其值用于magic)Php 检错控制算子,php,error-handling,Php,Error Handling,请告诉我这是否正确。在我的错误处理程序中,我需要能够检测何时使用@error control操作符来抑制错误,因为一些外部库(遗憾的是)经常使用它。脚本的执行应该继续,就像不使用自定义错误处理程序一样 使用at符号时,PHP会临时将错误报告设置为0。因此,在脚本开始时,我们将error_reporting设置为除零以外的任何值-我们现在可以执行一些漂亮的IF/ELSE魔术。为了避免在前端显示任何错误,我们还将display_errors设置为0,这将覆盖错误报告(但我们仍然可以将其值用于magi
所以。。这里没有渔获物吗?除了外部库覆盖我的错误处理的那一个。。(有什么提示吗?考虑到你的脚本做了什么,以及一些用户在上的注释,看起来你正在做的是可以的 例如: 我不知道@符号是什么 事实上是的,几分钟后 实验得出了结论 以下:
- 设置的错误处理程序将被调用,而与错误的级别无关 错误报告已设置为打开,或者 这句话的开头是@
- 由错误处理程序在不同的代码上赋予某些含义 错误级别。你可以做你的 自定义错误处理程序回显所有错误, 即使错误报告设置为 没有
- 那么@operator做什么呢?它临时设置错误报告 该行的级别为0。如果那条线 触发一个错误,错误处理程序 仍将被调用,但它将被调用 调用时错误级别为0
不过,如果您希望“禁用”@operator的效果(不确定我是否正确理解了这个问题;这可能会对您有所帮助),以便在您的开发环境中获取错误消息,那么您可以安装尖叫扩展(,) 如果您以正确的方式配置它,请在php.ini中设置它(当然,在安装/加载扩展之后): 这个扩展只会禁用@operator
下面是一个例子(引用原文):
我不确定我是否会在生产服务器上使用此扩展(我从不希望显示错误),但它在开发机器上非常有用,在使用旧代码时,在使用@operator extensivly…+1的应用程序/库上。这是我所需要的全部。尖叫扩展似乎很有用,可以检查一下。但今天的情况并非如此,我只是希望外部库能够完成它的任务——就好像我的应用程序不在那里一样。
<?php
ini_set('display_errors',0);
error_reporting(E_ALL);
function error_handler($errno, $errstr, $errfile, $errline)
{
if (error_reporting()===0) return;
else die();
}
set_error_handler('error_handler');
//This issues an error, but the handler will return and execution continues.
//Remove the at-sign and the script will die()
@file();
echo 'Execution continued, hooray.';
?>
scream.enabled = 1
<?php
// Make sure errors will be shown
ini_set('display_errors', true);
error_reporting(E_ALL);
// Disable scream - this is the default and produce an error
ini_set('scream.enabled', false);
echo "Opening http://example.com/not-existing-file\n";
@fopen('http://example.com/not-existing-file', 'r');
// Now enable scream and try again
ini_set('scream.enabled', true);
echo "Opening http://example.com/not-existing-file\n";
@fopen('http://example.com/another-not-existing-file', 'r');
?>
Opening http://example.com/not-existing-file
Opening http://example.com/not-existing-file
Warning: fopen(http://example.com/another-not-existing-file): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in example.php on line 14