2013-08-10 2 views
7

FastCGI non vuole registrare correttamente gli errori PHP. Bene, non è del tutto vero: registra errori, con un po 'di giochini; semplicemente non registrerà qualcos'altro, come gli avvertimenti.Nginx + FastCGI + PHP (php-fpm) errori di registrazione non rilevati/avvisi

Il famigerato FastCGI -> Nginx log bug non è un problema, necessariamente. Gli errori e gli avvisi di php-fpm vanno direttamente a Nginx, ma solo se non vengono presi in considerazione. Cioè, se set_error_handler intercetta un errore, nessuna voce di registro viene aggiunta. Ciò significa che posso vedere errori di analisi, ma questo è tutto.

php-fpm non registra gli errori PHP da solo (separati da nginx) senza un po 'di trucco. file di configurazione dell'istanza di php-fpm include queste due righe per impostazione predefinita:

php_admin_value[error_log] = /mnt/log/php-fpm/default.log 
php_admin_flag[log_errors] = on 

Ho cambiato il percorso error_log, ovviamente. Ho dovuto aggiungere la seguente riga per farlo per accedere in realtà nulla:

php_admin_value[error_reporting] = E_ALL & ~E_DEPRECATED & ~E_STRICT 

nota Versione: la parte E_STRICT non è necessaria, come sto utilizzando PHP 5.3.27, ma ho intenzione di aggiornamento a 5.4 ad un certo punto. Con questa linea, registra errori - e solo errori - a /mnt/log/php-fpm/default.log. Ora, questo imposta error_reporting sullo stesso valore che ho impostato in php.ini, quindi qualcosa è ovviamente sbagliato qui. Inoltre, non registra errori rilevati: il comportamento è identico a quello del registro nginx. Ho provato a usare il valore numerico (22527), ma ancora senza fortuna.

Non mi interessa in quale file di registro finiscono le voci (nginx rispetto a php-fpm), ma ho bisogno di errori rilevati per essere registrati da qualche parte. Potrei ricorrere all'iniezione del mio errore e dei gestori delle eccezioni, ma è un po 'hacker, quindi preferirei evitarlo.

+1

Sono pazzo nel ricordare che Apache non ha avuto questo problema? – Zenexer

risposta

5

Io uso questa direttiva nel file di configurazione del pool per PHP-FPM:

catch_workers_output = yes

+1

Ho quel set, ma non registra ancora gli errori rilevati. – Zenexer

+0

@Zenexer hai controllato le autorizzazioni sulle directory e sui file utilizzati nella registrazione? Probabilmente dovrebbero essere di proprietà di 'root'; 'chmod 0755' nelle directory e' chmod 0644' sui file. – parhamr

+0

Sì, le autorizzazioni vanno bene. Tutto è di proprietà di nginx e viene eseguito come nginx. Scrive cose, solo non tutto. Penso che mi aspetto un comportamento che non è destinato a essere esposto. Apache fa la stessa cosa – Zenexer