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 .= "Warning $error->code: ";
break;
case
LIBXML_ERR_ERROR:
$return .= "Error $error->code: ";
break;
case
LIBXML_ERR_FATAL:
$return .= "Fatal Error $error->code: ";
break;
}

$return .= trim($error->message) .
"\n Line: $error->line" .
"\n Column: $error->column";

if (
$error->file) {
$return .= "\n File: $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