PHP hatalar.log performans sorunları

3 Cevap php

Ben bir hata durumunda bana e-posta olacak ben sitelerinde kullanabileceğiniz bir hata işleme sınıfı, yazmaya çalışıyorum. Sorun bu hatalar.log fonksiyonu boğulmadan, ben uygulama profil zaman vardır. İşte benim kod sınıf atlama (bulunuyor:

class ErrorHandler
{
private static $instance;
private static $mail;
private function __clone(){}

private function __construct()
    {
    error_reporting( E_ALL | E_STRICT );

    if(!defined('ENV')){
        if($_SERVER['SERVER_ADDR']=='127.0.0.1' || $_SERVER['SERVER_NAME']=='localhost')
            {
            #echo"local environment<br>";
            DEFINE('ENV','LOCAL');
            ini_set('display_errors', 1);
            }
        else
            {
            #echo"live environment";
            DEFINE('ENV','LIVE');
            ini_set('display_errors', 0);
            }
        }
    }
public function setErrorConfig($error_level,$mail='',$mode='production')
    {
    error_reporting($error_level);
    switch($mode)
        {
        case 'development':
        ini_set('display_errors', '1');
        break;

        case 'production':
        ini_set('display_errors', '0');
        if($mail != ''){
            self::$mail = $mail;
            set_error_handler(array('ErrorHandler', 'handleError'));
            }
        break;

        default:
        ini_set('display_errors', '0');
        error_reporting( E_ERROR );
        break;
        }
    }

public function handleError($e_num,$e_msg,$e_file,$e_line,$e_vars)
    {
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headers .= 'From: DC_Research Site' . "\r\n";

    $msg = '';
    $msg .= '<html><head></head><body>';
    $msg .= '<STYLE>h2{font-family:verdana;}</STYLE>';
    $msg .= '<h2>Error Description:</h2>';
    $msg .= '<h2>Script:</h2><p>'.$e_file.'</p>';
    $msg .= '<h2>Line:</h2><p>'.$e_line.'</p>';
    $msg .= '<h2>Message:</h2><p>'.$e_msg.'</p>';
    $msg .= '<h2>Variables:</h2><p>'.$e_vars.'</p>';
    $msg .= '</html></body>';

    #mail(self::$mail,'Error Report',$msg,$headers);
    error_log($msg,1,self::$mail,$headers);
    }
}

Beni öldürme neler olduğunu anlamaya yardımcı olabilir?

3 Cevap

Sonunda bu sorunu çözüldü - benim kötü. Bir posta sunucusu (I varsayıyorum) bulamıyorum çünkü - sadece yerel bir kurulum üzerinde çuf komut neden postalamak için oturum hata işleyicisi ayarlamak çalışıyorum. Yerini tespit koşullu bir de yöntem çağrısı sarma sorunu durur.

(Oldukça büyük olasılıkla bir SMTP sunucusuna bağlanmaya çünkü) tanımına göre bir mail göndererek pahalı bir işlem olduğu, bu nedenle programı profile zaman error_log harcanan zaman programın diğer hatlarında harcanan zaman ile karşılaştırıldığında çok büyük olacaktır.

Siz veritabanında hata bilgilerini depolamak ve daha sonra bir cron script size içeriğini e-posta olabilir. Ben DB tasarrufu bir e-posta göndererek daha kullanıcı için daha hızlı olacağını düşünüyorum