2009-07-29 3 views
15

Qual è l'impostazione di configurazione di PHP che consente o impedisce la creazione di escape di newline nell'output di debug?Registro errori PHP e caratteri di nuova riga

Su due diverse installazioni (un computer portatile di sviluppo che esegue MAMP/OSX e un server di sviluppo che esegue debian) Vedo diversi risultati nei log degli errori durante il debug.

error_log(print_r(array(1,2,4),1)); 

Su Debian questo appare in /var/log/apache2/error.log come

[Thu Jul 30 11:32:34 2009] [error] [client 118.93.246.104] Array\n(\n [0] => 1\n [1] => 2\n [2] => 4\n)\n, referer: http://dev.example.org/ 

Su OSX questo appare in/Applicazioni/MAMP/logs/php_error_log come

[30-Jul-2009 11:34:00] Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 4 
) 

Preferisco il modo MAMP per il debug (a parte il riposizionamento dei file di log nella directory/Applications).

Grazie!

risposta

12

Chris, dovresti essere in grado di modificare la direttiva error_log nel tuo php.ini su Debian per puntare a un file. Se questo non è definito, passerà attraverso syslog che non supporta più righe.

Dettagli:

error_log funzione

error_log direttiva

+0

Va anche detto che se l'utente che Apache esegue come non può scrivere nel file error_log specificato (a causa di problemi di autorizzazioni), andrà anche a syslog o al log di Apache. – Pistos

-2

mi si avvicinò con una bella soluzione per questo e solo bloggato su di esso, potrebbe essere utile per le persone: http://www.drcoen.com/2012/05/php-error_log-and-newlines-a-solution/. TL; DR: scrivi in ​​un file che crei in/tmp, scrivi una funzione che scrive le tue informazioni di debug in quel file e instrada anche la registrazione di Apache (quindi non devi tracciare 2 file di errore).

+0

Grazie. AFAICT questo è più o meno "aggirare le restrizioni delle autorizzazioni creando un nuovo file in/tmp"; l'indizio delle autorizzazioni da @Pistos sopra era l'ingrediente mancante per me alla fine. –

+0

Il link è inattivo e la risposta non contiene istruzioni dettagliate purtroppo. – Innovaat

+1

Ecco l'ultimo link, non ha realizzato che è stato modificato: http://www.drcoen.com/2012/05/php-error_log-and-newlines-a-solution/ Sentirsi a proprio agio con un voto basso, ti aiuterà se non puoi risolvere il problema originale, cosa che non ero in grado di fare (quindi la soluzione alternativa). – eclipse31

2

Il problema si verifica quando il processo Apache non può scrivere nel file error_log, quindi il syslog scrive nel file. Il syslog mette in disordine le interruzioni di riga.

Quindi basta fare:

chmod 777 error.log 

Questo dovrebbe risolvere il problema.

+3

Diffidare dell'impostazione vai + x su un file a cui gli autori degli attacchi possono scrivere. Impostare invece il gruppo lettura/scrittura e gruppo di proprietà all'utente del webserver. Prestare attenzione alle modifiche alle autorizzazioni che si annullano durante la rotazione del registro (impostazione chmod nella configurazione di logrotate, ecc.). –

+0

Accetto che questo sia alquanto insicuro (anche se spero che i tuoi file di registro non siano accessibili attraverso il server web ...) ma è un bel veloce per un ambiente di sviluppo locale e sottolinea il problema chiave, che è che i permessi di il file di registro può impedire ad Apache di scriverlo, causando l'uso di syslog. –

+1

La mia soluzione era più simile alla raccomandazione di Chris Burgess, ho aggiunto il mio utente al gruppo in cui il server web viene eseguito, modificato le autorizzazioni del file per consentire l'accesso completo al gruppo e cambiato la proprietà del file all'utente/gruppo che il server web esegue come , cioè su OSX con Apache preinstallato: '' 'sudo dseditgroup -o modifica -a nomeutente -t ​​utente _www; sudo chown _www: _www/var/log/apache2/error_log; sudo chmod 770/var/log/apache2/error_log; '' ' –