2012-12-19 16 views
6

Próbuję zastąpić wbudowaną funkcję wyłączania php z niestandardową.register_shutdown_function() nadal wyświetla oryginalny komunikat o błędzie

Działa doskonale, ale nadal wyświetla oryginalny błąd (wbudowany w błąd) powyżej mojego nowego komunikatu o błędzie.

<?php 
    function shutdown_output() { 
     $error = error_get_last(); 
     if($error !== NULL) { 
      echo "ERROR"; 
      exit(); 
     } else { 
      echo "NO ERROR"; 
     } 
    } 

    // Set the error reporting: 
    register_shutdown_function('shutdown_output'); 

    // test.php does not exist, just here to get a critical error 
    require_once("test.php"); 

    ?> 

Wszelkie pomysły?

+0

Nie zdziwię się, jeśli nie wyłączyłeś raportowania błędów w PHP. ['error_reporting (0)'] (http://php.net/manual/en/function.error-reporting.php) –

+0

Musisz także ustawić 'error_reporting (0);' i 'ini_set ('display_errors', 0); 'nie powoduje to wyprowadzenia oryginalnego komunikatu o błędzie. – shadyyx

Odpowiedz

3

Jak już wspomniano w komentarzach, użycie register_shutdown_function nie zastąpi wbudowanej obsługi błędów (w ten sam sposób, w jaki set_error_handler też nie).

Jeśli nie chcesz widzieć oryginalnej wiadomości, wyłącz jej wynik w swoim php.ini przy użyciu display_errors = 0. Lub w locie w skrypcie za pomocą ini_set('display_errors', 0);.

+0

"w taki sam sposób, w jaki' set_error_handler' nie ": ale [manual] (http://php.net/manual/en/function.set-error-handler.php) mówi:" standardowy błąd PHP handler jest całkowicie ominięty dla typów błędów określonych przez 'error_types', chyba że funkcja zwrotna zwraca' FALSE' "? –

+0

@AlvinWong Być może to, co powiedziałem, wprowadzało w błąd, 'set_error_handler' obsługuje tylko błędy" E_USER_ * "(i kilka innych), w innych przypadkach użyty zostanie domyślny handler. –

Powiązane problemy