2009-11-22 14 views
10

C'è un modo per dire universalmente a php di reindirizzare a una certa pagina su eventuali errori fatali?catturare tutti gli errori e reindirizzare alla pagina con php

Supponiamo di avere un sito con molti file diversi e di nascondere i problemi (mentre li registro ancora) e di inviare l'utente alla stessa pagina di errore, indipendentemente dall'errore o dalla pagina in cui si trovano.

Consente solo di fingere per argomento che non voglio vedere gli errori e le pagine vengono continuamente modificate e aggiornate dai robot che causano errori ogni 23 o 51 modifica della pagina.

Sto cercando qualcosa che forse coinvolge il file php.ini o htaccess, qualcosa che posso fare in tutto il sito.

+0

Dopo aver finalmente funzionato, ho postato la mia soluzione qui: http : //stackoverflow.com/a/19263800/1993494 – relipse

risposta

5

è possibile modificare la pagina di errore predefinita 500 in Apache con la direttiva 'ErrorDocument':

ErrorDocument 500 /500.html 

Questo reindirizza un errore di 500 server interno a 500.html. Puoi anche usare una pagina PHP lì e spedire la pagina di riferimento.

Per rilevare gli errori è possibile registrarli in un file error.log. Utilizzare i seguenti due direttive nel file php.ini:

error_log = /var/log/httpd/error_php 
log_errors = On 

Non dimenticare di riavviare Apache.

+4

Questo non funziona per errori PHP. – Cybot

9

Vedi set_error_handler:

set_error_handler - Imposta una definito dall'utente errore funzione del gestore

esempio rudimentale:

<?php 

function errorHandler($n, $m, $f, $l) { 
    header('Location: http://example.com/error.php'); 
} 

set_error_handler('errorHandler'); 
... 
?> 
5

In primo luogo, cambiare il vostro php.ini per sopprimere i messaggi di errore e per attivare la registrazione:

display_errors=Off 
log_errors=On 
error_log=whatever/path 

Scrivi un gestore di errori (a differenza set_error_handler, questo prende anche Fatals)

register_shutdown_function('errorHandler'); 
function errorHandler() { 
    $err = error_get_last(); 
    if($err) 
    include "error_page.php"; // your custom error page 
} 

mettere questo codice in un file e dire php per includerlo su ogni requrest (vedi auto_prepend_file @http://php.net/manual/en/ini.core.php)

+0

Rif: http://stackoverflow.com/questions/2171055/register-shutdown-function-registered-function-cannot-include-files-if-terminat Questo codice non funzionerebbe se si verifica un errore di analisi della sintassi. L'inclusione porterebbe il tuo script a fallire silenziosamente, lasciando poche tracce. Se qualcuno ha inserito questo, sono tutto orecchie. –

+0

Questo è in realtà un po 'vicino alla risposta che ha funzionato per me. http://stackoverflow.com/a/19263800/1993494 – relipse

Problemi correlati