Sono in procinto di scrivere un parser e sto cercando di fare una buona gestione degli errori con eccezioni.Ottenere XMLReader di PHP per non generare errori php nei documenti non validi
Il codice di esempio seguente:
<?php
$xml = <<<XML
<?xml version="1.0"?>
<rootElem>
XML;
$reader = new XMLReader();
$reader->xml($xml, null, LIBXML_NOERROR | LIBXML_NOWARNING);
$reader->read();
Emette:
PHP Warning: XMLReader::read(): An Error Occured while reading in /Users/evert/code/xml/errortest.php on line 11
PHP Stack trace:
PHP 1. {main}() /Users/evert/code/xml/errortest.php:0
PHP 2. XMLReader->read() /Users/evert/code/xml/errortest.php:11
L'aggiunta di:
libxml_use_internal_errors(true);
ha alcun effetto.
Il mio obiettivo è controllare gli errori in seguito (con libxml_get_errors()
) e generare un'eccezione. Sento l'unica soluzione è l'utilizzo dell'operatore di silenzio (@
), ma questa sembra una cattiva idea ..
Nota che quando non supero i LIBXML
costanti, né uso libxml_use_internal_errors
, ottengo un errore diverso , come ad esempio:
PHP Warning: XMLReader::read(): /Users/evert/code/xml/:2: parser error : Extra content at the end of the document in /Users/evert/code/xml/errortest.php on line 11
Questo suggerisce che la libreria libxml sottostante è infatti sopprimendo l'errore, ma all'interno XMLReader viene generato un errore comunque.
Forse implementare 'try' e' catch' per tenere traccia degli errori? – Anne
Tuttavia non sono eccezioni, sono errori PHP tradizionali. L'unico modo in cui potrei usare try..catch, è con 'set_error_handler', che vorrei evitare mentre sto scrivendo una libreria, e non voglio alterare lo stato globale. – Evert