register_shutdown_function: başarısızlık sonlandırma eğer kayıtlı işlev dosyaları dahil değil mi?

2 Cevap php

Selamlar,

PHP 5.3 için bir çerçeve içinde bazı kod yazıyorum ve bana incelikle aynı zamanda bazı günlük girdisini istemci tarafında çökmesine ve eklemek sağlayacak bir şekilde tüm hataları yakalamak için çalışıyorum. Ayrıca ayrıştırma hatalarını yakalamak için emin olmak için, ben özellikle çözümleme hataları yakalamak için register_shutdown_function kullanıyorum.

İşte ben kayıt fonksiyonu

static function shutdown()
{  
    if(is_null($e = error_get_last()) === FALSE)
      if($e["type"] == E_PARSE)
        self::error($e["type"], $e["message"], $e["file"], $e["line"], array(self::$url));
} 

Yanılma yöntemi iki şey yapar:

  1. Bu append Fopen kullanarak bir günlük dosyasına bir hata girdi ekler.
  2. Bu bir hata ekranı çalıştırmak: Bu explicitely 500 HTTP kodu ayarlar ve özel formatlamasýný 500 hata sayfası görüntüler. Bazı (ki ben bir Wapper sınıfı içinde, ama sadece bir an için, gibi) oradan gerekli

Nedense, benim günlük dosyasını fopen ve append, ama dahil bir basit yapamaz; sadece sessizce oradan ölür.

Her içerir için bir günlük girdisi eklerseniz burada ne günlük çıkışlar olduğunu

static public function file($file)
{
  if(class_exists("Logs"))
    Logs::append("errors.log", $file . ":" . ((include $file) ? 1 : 0));
  else
    include $file;
}

// Inside the Logs class...
static public function append($file, $message)
{
  if(!is_scalar($message)) 
   $message = print_r($message, true);

  $fh = fopen(Config::getPath("LOGS") . "/" . $file, 'a');
 fwrite($fh, $message."\r\n");
 fclose($fh);
}

İşte ne günlük dosyası bana verir:

/Users/mt/Documents/workspace/core/language.php:1
...
/Users/mt/Documents/workspace/index.php:1
/Users/mt/Documents/workspace/core/view.php:1
[2010-01-31 08:16:31] Parsing Error (Code 4) ~ syntax error, unexpected T_VARIABLE {/Users/mt/Documents/workspace/controllers/controller1.php:13}

Ayrıştırma hatası hitted sonra, en kısa sürede yeni bir include dosyasını vurur gibi kayıtlı işlevi çalıştırmak, ama yok, bu aşmak için bir yol var ... sessiz bir ölüm ölür? Neden okuma / yazma için bir dosyayı açmak mümkün olmayabilir, ama dahil mi?

2 Cevap

Kullanmayı deneyin Lagger

Bu, bazı yapı özellikleri ile ya config şey, ya ile ilgili olduğunu görünüyor.

Ben çalıştırmak ve açıklandığı gibi başarısız olmaz MacOSX başlangıçta kodu, koştu, ancak Ubuntu altında PHP derlenmiş bir sürümü üzerinde çalışıyor.

Hangi benim için de çok iyi, ama hemen hemen hala (daha kesin olarak XAMPP) OSX altında neden başarısız beni meraklandırıyor.