SORU
6 AĞUSTOS 2009, PERŞEMBE


Bir uyarı yakalamak/deneyebilir miyim?

Bazı uyarılar bazı yerli php fonksiyonları atılan yakalamak ve onları idare etmen gerek.

Özellikle:

array dns_get_record  ( string $hostname  [, int $type= DNS_ANY  [, array &$authns  [, array &$addtl  ]]] )

DNS sorgusu başarısız olduğunda bir uyarı atar.

try/catch bir uyarı, bir özel durum olmadığı için çalışmıyor.

Ben şimdi 2 seçeneğiniz var:

  1. set_error_handler sayfa (bu doğru mu?) her uyarı filtre kullanmak zorundayım çünkü overkill gibi görünüyor;

  2. Hata bildirimi/Bu uyarılar ekrana yankılandı alamadım, ekranı, dönüş değeri kontrol edin ve ayarlayın; false, eğer hiçbir kayıt hostname için bulundu.

En iyi uygulama nedir?

CEVAP
6 AĞUSTOS 2009, PERŞEMBE


Set ve hata işleyicisi geri

Bir ihtimal aramadan önce kendi hata işleyicisi ayarlamak ve önceki hata işleyicisi restore_error_handler() daha sonra geri yüklemek için.

set_error_handler(function() { /* ignore errors */ });
dns_get_record();
restore_error_handler();

Bu fikir üzerine inşa etmek ve sizin için hata günlükleri yeniden kullanılabilir hata işleyicisi yazabilirsiniz.

set_error_handler([$logger, 'onSilencedError']);
dns_get_record();
restore_error_handler();

İstisnalar içine hataları dönüm

İstisnalar içine tüm php hatalarını kapatmak için set_error_handler() ErrorException sınıfını kullanabilirsiniz.

set_error_handler(function($errno, $errstr, $errfile, $errline, array $errcontext) {
    // error was suppressed with the @-operator
    if (0 === error_reporting()) {
        return false;
    }

    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
});

try {
    dns_get_record();
} catch (ErrorException $e) {
    // ...
}

Kendi hata işleyicisi kullanarak not için önemli şey error_reporting ayarı bypass ve tüm hataları (ilan, vb. uyarılar) geçecek. hata işleyicisi. set_error_handler() ikinci bir argüman almak istediğiniz tanımlamak veya mevcut ayarı hata işleyicisi içinde ... = error_reporting() kullanarak erişim sağlayabilirsiniz.

Uyarı engelleniyor

Başka bir olasılık @ operatörü ile çağrı bastırmak ve dns_get_record() dönüş değeri sonradan kontrol etmektir.Ama bunu yapmamanı tavsiye ederimhatalar/uyarılar olarak ele alınması, bastırılması değil tetiklenir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChannelRichard

    ChannelRicha

    7 Kasım 2008
  • Disney Pets and Animals

    Disney Pets

    29 ŞUBAT 2012
  • The Scary Snowman

    The Scary Sn

    1 ŞUBAT 2011