Come posso registrare errori e avvisi in un file?


233

Come accendo tutti gli errori e gli avvisi e li registro in un file, ma per impostare tutto ciò all'interno dello script (non cambiando nulla in php.ini)?

Voglio definire un nome file e in modo che tutti gli errori e gli avvisi vengano registrati.

Risposte:


358

Usa il seguente codice:

ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "Hello, errors!" );

Quindi guarda il file:

tail -f /tmp/php-error.log

O aggiorna php.inicome descritto in questo post di blog dal 2008.


41
ini_setfunziona solo se quel codice viene eseguito. Non utile per il codice che presenta errori di analisi perché l'errore sarà prima dell'esecuzione del codice. Invece scrivi quelle modifiche in php.ini.
hakre,

9
Se non è possibile modificare php.ini, si dovrebbe essere in grado di aggiungere questo nella .htaccess: php_flag log_errors on php_value error_log /home/path/public_html/domain/PHP_errors.log. Vedi perishablepress.com/…
Matthieu

1
Ho una domanda, come ottenere invece il file error.log da creare nella mia cartella htdocs?
Tommy

Immagino che hai appena cambiato la cartella da tmp/php-error.logquale posizione desideri?
Luca,

Questo si blocca il mio PHP in 5.4.0
Supuhstar


42

Metti semplicemente questi codici in cima al tuo file PHP / index:

error_reporting(E_ALL); // Error/Exception engine, always use E_ALL

ini_set('ignore_repeated_errors', TRUE); // always use TRUE

ini_set('display_errors', FALSE); // Error/Exception display, use FALSE only in production environment or real server. Use TRUE in development environment

ini_set('log_errors', TRUE); // Error/Exception file logging engine.
ini_set('error_log', 'your/path/to/errors.log'); // Logging file path

4
Questo è solo se si desidera visualizzare anche tutti gli errori nell'output e / o nel browser, oltre alla registrazione. display_errorsnon dovrebbe MAI essere attivato su un server di produzione live - tale direttiva è specifica per l'output per l'utente e non ha alcun effetto sulla registrazione. php.net/manual/it/…
Aaron Wallentine

22

aggiungi questo codice in .htaccess (in alternativa alla funzione php.ini / ini_set ):

<IfModule mod_php5.c>
php_flag log_errors on 
php_value error_log ./path_to_MY_PHP_ERRORS.log
# php_flag display_errors on 
</IfModule>

* come commentato: questo è per server di tipo Apache e non per Nginx o altri.


7
Ciò ha molto a che fare con il modulo PHP di Apache, tuttavia.
SacredSkull

9

Questa è la mia funzione personale breve

# logging
/*
[2017-03-20 3:35:43] [INFO] [file.php] Here we are
[2017-03-20 3:35:43] [ERROR] [file.php] Not good
[2017-03-20 3:35:43] [DEBUG] [file.php] Regex empty

mylog ('hallo') -> INFO
mylog ('fail', 'e') -> ERROR
mylog ('next', 'd') -> DEBUG
mylog ('next', 'd', 'debug.log') -> DEBUG file debug.log
*/
function mylog($text, $level='i', $file='logs') {
    switch (strtolower($level)) {
        case 'e':
        case 'error':
            $level='ERROR';
            break;
        case 'i':
        case 'info':
            $level='INFO';
            break;
        case 'd':
        case 'debug':
            $level='DEBUG';
            break;
        default:
            $level='INFO';
    }
    error_log(date("[Y-m-d H:i:s]")."\t[".$level."]\t[".basename(__FILE__)."]\t".$text."\n", 3, $file);
}

6

Dai un'occhiata log_errorsall'opzione di configurazione in php.ini. Sembra fare proprio quello che vuoi. Penso che tu possa usare l' error_logopzione per impostare anche il tuo file di registrazione.

Quando la log_errorsdirettiva è impostata su On, tutti gli errori segnalati da PHP verrebbero registrati nel registro del server o nel file specificato con error_log. Puoi impostare anche queste opzioni ini_set, se necessario.

(Nota che display_errorsdovrebbe essere disabilitato in php.ini se questa opzione è abilitata)


1
Perché dovrebbe display_errorsessere disabilitato se si abilita log_errors? Non ha senso secondo me. :)
Guido Hendriks,

5
Perché non è necessario inviare il contenuto degli errori al pubblico su un server di produzione, specialmente se il testo dell'errore viene registrato in modo discreto in un file.
Shabbyrobe

3
Gli errori di visualizzazione devono essere sempre disabilitati sul server di produzione. Non se la registrazione degli errori è configurata da qualche altra parte, ma sempre. Gli errori vengono registrati nel registro degli errori di Apache per impostazione predefinita, che è spesso sufficiente.
Pihhan,

1
La visualizzazione degli errori sulla produzione rende PHP più popolare :)
PeterM

0

Inoltre, è necessaria la direttiva "AllowOverride Options" affinché funzioni. (Apache 2.2.15)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.