Dosyadan Özel Hatalar

1 Cevap php

Ben özel bir hata sayfası atabilir ben hiç bir hata script'lerime içinde meydana geldiğinde bir dosyayı okumaya çalışıyorum.

Ob_start / set_error_handler kullanırken benim hata şablon içeriğini almak için geri arama içinde file_get_contents veya ob_start kullanmak mümkün duyuyorum.

Ben nasıl çıktısı benim özel şablonu (ve eval kullanarak) geri arama içinde kimse biliyor mu?


Edit: Bazı kod

error_reporting(E_ALL);
ini_set("display_errors", 1); 

function fatal_error_handler($buffer) {
  if (ereg("(error</b>:)(.+)(<br)", $buffer, $regs) ) {
    $ErrorString = preg_replace("/<.*?>/","",$regs[2]);
    error_log($ErrorString);

    $template = file_get_contents(sprintf('%s/errors/Error.php', TEMPLATES));
    return eval(sprintf('?>%s<?', $template);
    //return "ERROR CAUGHT check log file";
  }
  return $buffer;
}

function handle_error ($errno, $errstr, $errfile, $errline)
{
    error_log("$errstr in $errfile on line $errline");
    if($errno == FATAL || $errno == ERROR){
        ob_end_flush();
        echo "ERROR CAUGHT check log file";
        exit(0);
    }
}

ob_start("fatal_error_handler");
set_error_handler("handle_error");

Yukarıda sadece boş bir sayfa gösterir.

error_reporting(E_ALL);
ini_set("display_errors", 1); 

function fatal_error_handler($buffer) {
  if (ereg("(error</b>:)(.+)(<br)", $buffer, $regs) ) {
    $ErrorString = preg_replace("/<.*?>/","",$regs[2]);
    error_log($ErrorString);

    ob_start();
    include(sprintf('%s/errors/Error.php', TEMPLATES));
    $template = ob_get_contents();
    ob_end_clean();
    return eval(sprintf('?>%s<?', $template));
    //return "ERROR CAUGHT check log file";
  }
  return $buffer;
}

function handle_error ($errno, $errstr, $errfile, $errline)
{
    error_log("$errstr in $errfile on line $errline");
    if($errno == FATAL || $errno == ERROR){
        ob_end_flush();
        echo "ERROR CAUGHT check log file";
        exit(0);
    }
}

ob_start("fatal_error_handler");
set_error_handler("handle_error");

ve yukarıdaki şu şekildedir:

Fatal error: ob_start() [<a href='ref.outcontrol'>ref.outcontrol</a>]: Cannot use output buffering in output buffering display handlers in /var/www/index.php on line 16

1 Cevap

Sen var:

  • know that file_get_contents returns false when it encounters an error.
    • hangi dönüş değerini sınamak anlamına gelir,
    • ve iade eğer false, size şablonu görüntüleyebilirsiniz
  • also be careful : when there's a problem, it generates an error, and you don't want that one displayed
    • Bu, size @ operator kullanabileceğiniz için durum tür
    • false döndü yine, sınamak - "maske" hata için

Bu kodu bu tür verecekti:

$result = @file_get_contents('non-existing-file');
if ($result === false) {
    echo "An error has occured";
}

Hangi benim durumumda, görüntüler:

An error has occured

Şimdi, size kalmış kullanarak ve tüm bu olabilir Framework bağlı olarak, hata şablonu görüntülemek için ;-)