PHP - hiç hata / uyarı ifadeler kümesi ortaya çıkarsa bir şey yapın

3 Cevap php

Ben bunları bir araya bağlayan tutkal gibi hareket edecek, temelde xml dosyaları bir demet bağlamak için kullanılacak bir sayfa var. Kullanıcı erişimi olacak, çünkü kombine edilmektedir xml dosyaları da oluşmuş olabilir, küçük bir şans var.

Ben temelde if belirli bir kod kümesi atılmış hiçbir uyarı / hata vardır canlı dosyası yeniden yazmaya çalışıyorum.

Şimdiye kadar var:

try {
    $first = simplexml_load_file( 'file.xml' );
} catch ( Exception $e ) {
    $write = false;
}

if ( !$write ) { 
// write to live file.
}

Bu tabii ki hata durumları yakalar, ama hiçbir uyarı ve hatalar try bloğunda atılmış varsa bazen işlev çağrıları uyarılar ve hatalar başına, ben hataları yakalamak için ne kullanabilirsiniz, temelde sadece yazamaz dönebilirsiniz?

Bir uyarı örneği atılıyor:

Warning: simplexml_load_file() parser error : Start tag expected, '<'

3 Cevap

Sadece başarısız bir okuma diğer "belirtiler" arayın. simplexml_load_file manuel giriş Gönderen:

Return Values

XML belgesinin içinde tutulan verileri içeren özellikleri ile sınıf SimpleXMLElement bir nesne döndürür. On errors, it will return FALSE.

Yani, bu gibi kullanın:

$first = simplexml_load_file( 'file.xml' );

if ($first == false) {
    echo "File couldn't be loaded";
    exit(); // abort normal program execution, redirect or what have you
}

// continue as normal

Hemen hemen tüm fonksiyonlar bir hata durumunda false çeşit döner. Sen çok özel durumlar haricinde manuel "hata ayrıştırma" kullanmak gerekir. Bu onlardan biri değil.

Bir kaç şey bu durumun akla geliyor. Her zaman (bir üretim sunucusuna için harika bir fikir) etkin uyarılar var eğer herhangi bir metin olup olmadığını her zaman kontrol etmek için çıktı tamponlama işlevlerini kullanabilirsiniz gönderdi

ob_start();
... //code
$str = ob_get_contents();
if (! empty($string))
{
  // a warning was thrown.
}

Daha iyi bir yolu uyarıları için define an error handler olduğunu ve onlarla istersen:

set_error_handler("my_warning_handler", E_WARNING);

function my_warning_handler($errno, $errstr) {
   // do something
}

Bir hata işleyicisi ayarlamak, ve oradan istisnalar yükseltmek. Sonra her zamanki gibi onları yakalamak.