PHP Conference Japan 2024

libxml_get_errors

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

libxml_get_errors检索错误数组

描述

libxml_get_errors(): 数组

检索错误数组。

参数

此函数没有参数。

返回值

如果缓冲区中存在任何错误,则返回包含 LibXMLError 对象的数组,否则返回空数组。

示例

示例 #1 libxml_get_errors() 示例

此示例演示如何构建简单的 libxml 错误处理程序。

<?php

libxml_use_internal_errors
(true);

$xmlstr = <<< XML
<?xml version='1.0' standalone='yes'?>
<movies>
<movie>
<titles>PHP: Behind the Parser</title>
</movie>
</movies>
XML;

$doc = simplexml_load_string($xmlstr);
$xml = explode("\n", $xmlstr);

if (
$doc === false) {
$errors = libxml_get_errors();

foreach (
$errors as $error) {
echo
display_xml_error($error, $xml);
}

libxml_clear_errors();
}


function
display_xml_error($error, $xml)
{
$return = $xml[$error->line - 1] . "\n";
$return .= str_repeat('-', $error->column) . "^\n";

switch (
$error->level) {
case
LIBXML_ERR_WARNING:
$return .= "警告 $error->code: ";
break;
case
LIBXML_ERR_ERROR:
$return .= "错误 $error->code: ";
break;
case
LIBXML_ERR_FATAL:
$return .= "严重错误 $error->code: ";
break;
}

$return .= trim($error->message) .
"\n 行号: $error->line" .
"\n 列号: $error->column";

if (
$error->file) {
$return .= "\n 文件: $error->file";
}

return
"$return\n\n--------------------------------------------\n\n";
}

?>

以上示例将输出

<titles>PHP: Behind the Parser</title>
----------------------------------------------^
Fatal Error 76: Opening and ending tag mismatch: titles line 4 and title
  Line: 4
  Column: 46

--------------------------------------------

参见

添加注释

用户贡献注释 1 条注释

lech
7 年前
请注意,column 属性几乎总是无效的。我以为只有当相关行很长时才会发生这种情况(我正要提交一个带有示例的错误报告),但是,在发布时,您甚至可以在此页面上提供的示例中看到此问题:第 4 行甚至没有 46 个字符。当 XML 行很长时,差异可能非常大。

此属性来自 libxml 扩展,因此无论如何我认为这不是 PHP 错误,但是值得知道该值可能完全不可靠,以避免一些混淆。

LibXMLError 类的 PHP 文档页面给出了一些指示,指出

"此属性在 libxml 中并未完全实现,因此通常会返回 0。"

(我的 libxml 版本:2.9.1)
To Top