避免在php中使用DOMDocument XML警告

OHL*_*ÁLÁ 11 php warnings

我从服务器获取xml文件,有时我得到一个无效的xml文件,因此我收到一个警告:

Warning: DOMDocument::load() [domdocument.load]: Start tag expected, '<' not found in 
Run Code Online (Sandbox Code Playgroud)

如何捕获此警告并删除文件?

she*_*sek 39

你有两个选择.@在你的load()调用中使用错误控制操作符,例如@$dom->load(),这有点慢,因为它全局地将display_errors的值更改为off,执行该函数并将其重新设置为on.

另一个选项,我个人更喜欢(我讨厌@运算符,我无法忍受在我的代码中看到它)是保存libxml_use_internal_errors的旧值,启用它libxml_use_internal_errors(TRUE),调用函数,清除错误缓冲区并恢复旧的价值.这是我的代码中的代码片段:

<?php
$previous_value = libxml_use_internal_errors(TRUE);
$doc->loadHTML((string)$e->response->getBody());
libxml_clear_errors();
libxml_use_internal_errors($previous_value);
Run Code Online (Sandbox Code Playgroud)

我还不能评论答案,所以我会在这里写一下:

  • 迈克尔解决方案使其不那么严格,但它仍然会针对一些错误发出警告:
nadav@shesek:~$ php -r '$dom=new DOMDocument; $dom->strictErrorChecking = FALSE ; $dom->loadHTML("<xy></zx>");'
PHP Warning:  DOMDocument::loadHTML(): Tag xy invalid in Entity, line: 1 in Command line code on line 1
  • 不要做Fran Verona所建议的 - 全局禁用错误报告是你永远不应该做的事情.在生产中,设置自己的错误处理程序并向用户显示更漂亮的消息,并确保在某处记录错误 - 但永远不要完全禁用它.将error_reporting设置为0将导致PHP也禁用错误日志记录.
  • Xeon06解决方案存在问题,因为您正在影响特定代码段的整个脚本错误处理程序.使用您自己的错误处理程序只是忽略错误导致与Fran的解决方案相同的问题.