PHP/Zend:如何强制浏览器不在特定案例的网页上显示警告?

Nav*_*eed 2 php warnings zend-framework httprequest

我想获得这样的Twitter更新:

try {

  $doc = new DOMDocument();
  $doc->load('http://twitter.com/statuses/user_timeline/1234567890.rss');
  $isOK = true;

} catch( Zend_Exception $e ) {
  $isOK = false;
}
Run Code Online (Sandbox Code Playgroud)

如果互联网连接没有问题,那么$ isOK = true; 已设定.但是如果在加载twitter页面时出现问题,那么它会显示以下警告并且不会设置$ isOK = false;

警告:DOMDocument :: load(http://twitter.com/statuses/user_timeline/1234567890.rss)[domdocument.load]:无法打开流:HTTP请求失败!在第120行的/var/www/vcred/application/controllers/IndexController.php中找不到HTTP/1.1 404

在任何情况下,我都不希望在我的网页上看到上述警告.任何的想法?

谢谢

Gor*_*don 7

几个选项:

仅针对此函数调用抑制所有错误

@$doc->load('http://twitter.com/statuses/user_timeline/1234567890.rss');
Run Code Online (Sandbox Code Playgroud)

这是一样的

$oldLevel = error_reporting(0);
$doc->load('http://twitter.com/statuses/user_timeline/1234567890.rss');
error_reporting($oldLevel);
Run Code Online (Sandbox Code Playgroud)

以这种方式抑制错误通常是不受欢迎的,因为它使代码更难调试.像Shrapnel指出的那样,你想要禁止在生产系统上公开显示所有错误消息.在Dev系统上,我们鼓励您使用error_reporting(-1);,这将启用E_ALLE_STRICT.

如果要使用try/catch,还可以更改默认错误处理并通过执行将所有错误转换为异常

function myErrorHandler($errno, $errstr, $errfile, $errline) {
    throw new Exception($errstr, $errno);
}
set_error_handler("myErrorHandler");
Run Code Online (Sandbox Code Playgroud)

这是一个全球性的变化,并影响到所提出的一切.您还必须在代码中使用catch(Exception $e)而不是Zend_Exception那样,但它会起作用.请注意,上面的内容将转换所有内容,甚至是Notices,因此$isOk如果您稍后尝试访问此内容,您还将获得有关未定义的异常.您可以随意根据自己的喜好调整处理程序,并查看用户注释以set_error_handler获取更精细的版本.

另一个全局变化是更改应用程序文件夹中的application.ini,例如让Zend Framework控制错误处理:

phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
Run Code Online (Sandbox Code Playgroud)

根据您的需求更改这些.它们与PHP.ini中的相同,例如

display_errors:

这确定是否应将错误作为输出的一部分打印到屏幕上,或者是否应该向用户隐藏错误.

display_startup_errors:

即使启用了display_errors,也不会显示PHP启动序列期间发生的错误.除了调试之外,强烈建议关闭display_startup_errors.