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:
- Bu append Fopen kullanarak bir günlük dosyasına bir hata girdi ekler.
- 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?