Benim çerçeve Hata İşleme uygulamak

0 Cevap php

Ben bir çerçeve içine hata işleme uygulanması ve onu inşa etmek için bazı tavsiyeler için aramaya başlamak üzereyim.

Öncelikle benim çerçevesi halen inşa nasıl anlatalım:

Uygulama başlatma gelen çerçeve başlangıç ​​ayıran Im, böylece uygulamanın başlangıcında içinde neden herhangi bir hata için adanmış bir sınıf tarafından özel olarak ele alınmalıdır.

Benim fikrim o zaman benim gibi benim çerçeve için hatalar sıkı olacak gibi Core_Error_exception cadı E_ALL raporlama hata koyacaktır PHP 5.3 adında bir sınıf, sahip olmaktır Benim uygulama yük Ben değiştim tüm varsayılan değerlerini geri yüklemek için bu sınıf içinde bir kapatma fonksiyonu işlevi çalışacaktır.

Im ne yapmak isteyen yakalama tüm hatalar E_*_NOTICE olup E_*_ERROR ve ardından uygulama başlamadan önce ben gibi hataları yakalama durdurmak için sınıfa söylemesi Application_Error_Exception hatalar için dışarı izliyor olacak.

Yani ben o zaman istisnalar ve tetikleyiciler ve dahil olmak üzere tüm hatalarını izlemek için bir yol gerekir uygulama bir çerçeve hata ayıklama sayfa gösterir başlatır önce.

Ben arıyordum sınıfının çok çeşit gibidir:

class Core_Error_Exception
{
    var $previus_error_level,$captured_contents;

    private $stack_trace = array();

    public function Core_Error_Exception()
    {
        $this->previus_error_level = error_reporting(-1);
        set_error_handler(array($this,'_collect_error'));
        set_exception_handler(array($this,'_collect_error'));
        ob_start(array($this,'_capture'));
    }

    public function _collect_error($errno, $errstr, $errfile, $errline, $context)
    {
        $this->stack_trace[] = array(
            array('name' => 'Error ID:',    'value' => $errno),
            array('name' => 'Error String:','value' => $errstr),
            array('name' => 'Error File:',  'value' => $errfile),
            array('name' => 'Error Line:',  'value' => $errline),
            array('name' => 'Context PRE:', 'value' => $context)
        );
        var_dump($this->stack_trace);
    }

    /*
     * _capture is used to capture pre_bufferd content.
     */
    public function _capture($content,$bitfeild)
    {
        if($bitfeild & PHP_OUTPUT_HANDLER_START)
        {
            $this->captured_contents = $content;
        }

        if($bitfeild & PHP_OUTPUT_HANDLER_CONT)
        {
            $this->captured_contents .= $content;
        }

        if($bitfeild & PHP_OUTPUT_HANDLER_END)
        {
            $this->captured_contents .= $content;
        }
        return false;
    }
}

E_ERROR haber denir tetiklenir olabilecek herhangi bir bildirim hataları, bir diziye yerleştirilir böylece Peki ne im yapmak isteyen bir sonbahar-geçirmez bir şekilde bu sınıf inşa edebilmek için o zaman bu otomatik olarak çalışır shut- bu noktada aşağı, daha fazla hata neden önlemek için.

Ben hataları bu bağlamda setleri geçmek, böylece hataları ve tek bir E_*_ERROR varsa dikkat küçük bir html şablon işleyicisi kullanarak olacaktır.

Bu sınıf oluşturmak için en iyi yolu, geçmişte ben Hata İzleme / Raporlama yaparken biraz zorluk vardı gibi nedir.

Updated: akım sınıfı ile

Gibi hataları trigger_error ('test', XXX) olarak tetiklenir ise; Ben uygulama başlattı ya da bir E_USER_ERROR tetiklenene kadar tüm hataları takip edebilmek istiyorum.

Bazen tam PHP'nin hata sistemini kavramak için mücadele, ve benzeri gibi bazen ben bu yüzden onun sonbahar-dayanıklı inşa etmek nasıl karıştı olsun.

0 Cevap