2010-02-09 14 views
16

Sto eseguendo nginx con PHP-FPM. La mia configurazione nginx per la gestione dei file php assomiglia a questo:PHP FPM restituisce HTTP 500 per tutti gli errori PHP

location ~ \.php$ { 
      set $php_root /home/me/www; 
      fastcgi_pass 127.0.0.1:9000; 
      fastcgi_index index.php; 
      fastcgi_param SCRIPT_FILENAME $php_root$fastcgi_script_name; 
      include /etc/nginx/fastcgi_params; 
     } 

Ora, ho un semplice file PHP come questo:

<?php 
    ech "asd" 
    asd"" 
?> 

Sì, con un errore evidente. Quando provo ad accedere al file php, invece di rintracciare un errore di sintassi, ottengo sempre un errore interno del server HTTP 500. Ho provato ad usare error_reporting(-1); ma comunque restituisce sempre HTTP 500. Come faccio a ottenere da PHP che stampi l'errore esatto invece di tornare un HTTP 500 generico?

+0

Se il file non ha avuto l'errore, vuoi ottenere il codice di risposta corretto (HTTP 200 OK)? – echo

+0

Sì, ottengo un HTTP 200 OK se il file non ha un errore. – ErJab

+0

In genere è meglio registrare gli errori che visualizzarli. – umassthrower

risposta

29

cercare di trovare la seguente riga nel vostro php.ini:

display_errors = Off 

poi fare sul

+0

Grazie! Io uso una versione di produzione di php.ini in cui display_errors è disattivato. – ErJab

+1

Stavo usando uno script PHP-Fastcgi quindi quando sono passato a php-fpm di recente. Non ho notato che php.ini è cambiato nella versione di FPM. La loro versione ha dispaly_errors = Off, quindi tutte le mie pagine hanno iniziato a comparire in bianco quando si è verificato un errore! – Xeoncross

+6

non dimenticare di resettare php-fpm dopo. (sudo service php-fpm restart) – alioygur

8

Per pubblicare una risposta più completa, avevo usato una versione di produzione di php.ini che ha display_errors = spento. Invece di accenderlo globalmente, quello che faccio ora è, per i file su cui ho bisogno di segnalazione degli errori, uso ini_set('display_errors', 'On'); all'inizio del file.

+0

Il problema è che, secondo la documentazione, non funzionerà se si verifica un errore irreversibile. – srcspider

+0

@srcspider Non proprio eh? Sono indicati anche errori fatali. Tutto quello che devi fare è assicurarti di mettere questo 'ini_set ('display_errors', 'On')' nella parte più alta dell'ambito che stai considerando. –

4

Inoltre ho riscontrato il problema e ho impostato display_errors = Off in php.ini ma non funziona. Quindi ho trovato il php[display_errors]=off in php-fpm.conf e sostituisce il valore di php.ini e funziona.

+0

'php.ini' non ha nulla a che fare con le configurazioni, se si utilizza 'php-fpm', nel qual caso sarà necessario modificare' php-fpm.conf'. –

1

Gli errori di visualizzazione influiscono solo sul fatto che gli errori vengono stampati sull'output o meno.

Se si verificano errori di registro, gli errori saranno comunque mancanti dal registro a meno che la visualizzazione non sia disattivata, il che non è il comportamento previsto.

Il comportamento previsto è se il registro è attivo, gli errori si trovano lì. Se il display è acceso, gli errori si trovano sullo schermo/output. Se entrambi sono su erros si trovano su entrambi.

Le versioni correnti presentano un bug che lo perde.

+0

Conosci un bug in php.net che tiene traccia di questo bug? Puoi collegarti ad esso? – Sven

+0

Questo: https://bugs.php.net/bug.php?id=61045 - Risolto in PHP 5.3.14. – jorisw

1

Per Ubuntu 12.10, nel file php-FPM-piscina-config:

php_flag[display_errors] = on 

Nel file php.ini:

display_errors = On 
Problemi correlati