Bu SimpleXML dosya hataları yakalamak mümkün mü? Bazen başarısız bir webcoder bağlıyorum, ve ben bazı http hatası veya benzer bir şey dönerse sistem bir dosyayı atlamak yapmak gerekir.
Kullanımı @
sadece düz kirli.
Eğer kılavuzunu bakarsanız, bir opsiyon parametre vardır:
SimpleXMLElement simplexml_load_file ( string $filename [, string $class_name = "SimpleXMLElement" [, int $options = 0 [, string $ns = "" [, bool $is_prefix = false ]]]] )
Tüm seçenek listesi burada mevcuttur: http://www.php.net/manual/en/libxml.constants.php
Bu uyarıları bastırmak için doğru yolu:
$xml = simplexml_load_file('file.xml', 'SimpleXMLElement', LIBXML_NOWARNING);
İki farklı şeylerden bahsediyoruz. HTTP hataları bir XML dosyası geçerli olup olmadığı ile ilgisi yok, bu yüzden hata işleme iki ayrı bölgeye bakıyoruz.
Herhangi bir XML ayrıştırma hatalarını bastırmak için libxml_use_internal_errors() yararlanmak, ve sonra her ayrıştırma işlemi sonrasında (libxml_get_errors() kullanarak) elle bunları kontrol edebilirsiniz. Lütfen komut E_WARNING
mesajlarının bir ton üretmek değil, ama yine de geçersiz XML dosyalarını bulacaksınız olarak ben, bu şekilde yaparak öneririm.
HTTP hataları için olduğu gibi, bu taşıma size webservice bağlanma ve veri alma konum nasıl bağlıdır.
Webservice başarısız olduğunda hata raporlama veya günlük ilgilenen değilseniz hata baskılama operatörünü kullanabilirsiniz:
$xml= @simplexml_load_file('http://tri.ad/test.xml');
if ($xml) {
// Do some stuff . . .
}
Ama bu basit kesmek. Bir daha sağlam bir çözüm cURL, herhangi bir XML belge simplexml_load_string
, herhangi bir XML Ayrıştırma hataları oturum açın ve daha sonra bazı şeyler yapmak ile döndü ayrıştırmak, herhangi bir başarısız istekleri günlüğe ile XML dosyasını yüklemek olacaktır geçerli XML.
Herhangi bir PHP Hatalar üzerine bir özel durum atmak için PHP içinde bir hata işleyicisi ayarlayabilirsiniz: (Örnek ve daha fazla dokümantasyon burada bulunan: PHP.net)
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");