1

可能重复:
PHP 捕获 SimpleXMLElement 解析错误

我正在使用 xml 文件进行文件上传。我有使用simplexml_load_file("files/sample.xml"); 如果给定 xml 文件错误意味着,它会显示这样的警告,

Warning (2): simplexml_load_file() [http://php.net/function.simplexml-load-file]: files/sample.xml:8: parser error : Opening and ending tag mismatch:
Warning (2): simplexml_load_file() [http://php.net/function.simplexml-load-file]:

我使用 try catch 收到警告。我正在使用 cakePHP

4

2 回答 2

1

您的脚本正在加载文件。但是,无法将文件解析为 XML。

要阻止警告自动吐出到页面上(无论您是否尝试/捕获,它都会这样做),您需要使用:

libxml_use_internal_errors(true);

在处理任何使用 libxml 的类之前。

来自 PHP.net 的描述:

libxml_use_internal_errors — 允许您禁用标准 libxml 错误并启用用户错误处理。

于 2012-10-17T09:06:39.270 回答
1

如果您想尝试/捕获警告,则必须将警告“转换”为异常。

像这样设置全局错误句柄:

set_error_handler( 'error_handler' );

然后将警告转换为异常:

function error_handler( $errno, $errmsg, $filename, $linenum, $vars )
  {
    // error was suppressed with the @-operator
    if ( 0 === error_reporting() )
      return false;

    if ( $errno !== E_ERROR )
      throw new \ErrorException( sprintf('%s: %s', $errno, $errmsg ), 0, $errno, $filename, $linenum );

}
于 2012-10-17T09:08:56.893 回答