CascadiaPHP 2024

libxml_get_errors

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

libxml_get_errors Obtém um array de erros

Descrição

libxml_get_errors(): array

Obtém um array de erros.

Parâmetros

Esta função não possui parâmetros.

Valor Retornado

Retorna um array com objetos LibXMLError se houver algum erro no buffer, ou um array vazio caso contrário.

Exemplos

Exemplo #1 Um exemplo de libxml_get_errors()

Este exemplo demonstra como construir um simples manipulador de erro da libxml.

<?php

libxml_use_internal_errors
(true);

$xmlstr = <<< XML
<?xml version='1.0' standalone='yes'?>
<movies>
<movie>
<titles>PHP: Por Trás do Analisador</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 .= "Alerta $error->code: ";
break;
case
LIBXML_ERR_ERROR:
$return .= "Erro $error->code: ";
break;
case
LIBXML_ERR_FATAL:
$return .= "Erro fatal $error->code: ";
break;
}

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

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

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

?>

O exemplo acima produzirá:

<titles>PHP: Por Trás do Analisador</title>
----------------------------------------------^
Erro fatal 76: Opening and ending tag mismatch: titles line 4 and title
  Line: 4
  Column: 46

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

Veja Também

add a note

User Contributed Notes 1 note

up
6
lech
6 years ago
Please beware that the column property seems almost always to be invalid. I thought it only occurred when the line in question was long (and I was just about to submit a bug report with an example), however, at the time of posting, you can even see the problem in the example provided on this page: line 4 does not even have 46 characters. Where the XML line is long, the difference can be very large.

This property comes from the libxml extension, so in any case I don't think this is a PHP bug, however it is worth knowing that the value might be totally unreliable to save some confusion.

The PHP documentation page for the libXMLError class gives some indication, stating:

"This property isn't entirely implemented in libxml and therefore 0 is often returned."

(My libxml version: 2.9.1)
To Top