PHP simplexml_load_file - catch dosya hataları

5 Cevap php

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.

5 Cevap

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.

Hata, sizin simplexml_load_file return false olmalıdır.

Yani bu kadar somethign kadar basit yapıyor:

   $xml = @simplexml_load_file('myfile');
   if (!$xml) {
      echo "Uh oh's, we have an error!";
   }

Hataları tespit etmek için tek yoldur.

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");