मैं एक पार्सर लिखने की प्रक्रिया में हूं, और अपवादों के साथ अच्छी त्रुटि प्रबंधन करने की कोशिश कर रहा हूं।अमान्य दस्तावेज़ों में PHP त्रुटियों को फेंकने के लिए PHP के XMLReader को प्राप्त करना
निम्नलिखित नमूना कोड:
<?php
$xml = <<<XML
<?xml version="1.0"?>
<rootElem>
XML;
$reader = new XMLReader();
$reader->xml($xml, null, LIBXML_NOERROR | LIBXML_NOWARNING);
$reader->read();
का उत्सर्जन करता है:
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
के अलावा:
libxml_use_internal_errors(true);
कोई प्रभाव नहीं।
मेरा लक्ष्य बाद में त्रुटियों की जांच करना है (libxml_get_errors()
के साथ), और अपवाद फेंक दें। मुझे लगता है कि एकमात्र समाधान चुप्पी (@
) ऑपरेटर का प्रयोग होता है, लेकिन यह एक बुरा विचार की तरह लगता है ..
ध्यान दें कि जब मैं LIBXML
स्थिरांक उत्तीर्ण नहीं होते हैं, और न ही libxml_use_internal_errors
उपयोग करते हैं, मुझे कोई दूसरी त्रुटि प्राप्त , जैसे:
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
यह पता चलता है कि अंतर्निहित libxml पुस्तकालय वास्तव में त्रुटि दबाकर है, लेकिन XMLReader भीतर एक त्रुटि वैसे भी फेंक दिया है।
त्रुटियों का ट्रैक रखने के लिए शायद 'try' और 'catch' लागू करें? – Anne
हालांकि वे अपवाद नहीं हैं, वे पारंपरिक PHP त्रुटियां हैं। कोशिश करने का एकमात्र तरीका मैं कोशिश कर सकता हूं, 'set_error_handler' के साथ है, जिसे मैं पुस्तकालय लिख रहा हूं, क्योंकि मैं वैश्विक राज्य को बदलना नहीं चाहता हूं। – Evert