2010-04-22 10 views
101

Questo non è mai successo prima. Di solito visualizza l'errore, ma ora mi dà solo un errore del server interno 500. Ovviamente prima, quando ha visualizzato l'errore, erano diversi server. Ora sono su un nuovo server (ho una root completa, quindi se devo configurarlo da qualche parte nel php.ini, posso farlo.) O forse è qualcosa con Apache?Come posso far visualizzare a PHP l'errore invece di darmi 500 Internal Server Error

L'ho sopportato trasferendo il file sul mio altro server e eseguendolo lì per trovare l'errore, ma è diventato troppo noioso. C'è un modo per risolvere questo problema?

+3

Che suona come un problema di apache, non un problema con PHP. Apache genererà un 500 ogni volta che ha problemi di configurazione (come la sintassi errata in .htaccess). Controlla il tuo log degli errori di Apache per un messaggio di errore. –

risposta

155

Controllare le impostazioni error_reporting, display_errors e display_startup_errors nel file php.ini. Devono essere impostati rispettivamente su E_ALL e(sebbene non si debba usare display_errors su un server di produzione, quindi disabilitarlo e utilizzare log_errors invece se/quando lo si distribuisce). È inoltre possibile modificare queste impostazioni (tranne display_startup_errors) proprio all'inizio dello script per impostare loro in fase di esecuzione (se non si può catturare tutti gli errori in questo modo):

error_reporting(E_ALL); 
ini_set('display_errors', 'On'); 

Dopo di che, riavviare il server.

+1

Come disattiviamo display_errors, ma abbiamo PHP display 200 o 404 invece di 500? – Pacerier

+0

Non sono sicuro se fosse nel 2010 ma, non è necessario riavviare il server (a meno che non usi una cache Opcode come APC) nel 2014. –

+0

Anche dopo aver fatto tutto ciò, ottengo ancora l'errore 500 ... forse sta arrivando da IIS? –

12

Vale la pena notare che se il tuo errore è dovuto a .htaccess, ad esempio un rewrite_module mancante, vedrai comunque l'errore del server interno 500.

+3

In realtà mi mancava un modulo su apache. L'ho ottenuto guardando il registro degli errori (l'impostazione predefinita per ubuntu è /var/log/apache2/error.log) –

2

L'attivazione della visualizzazione degli errori dal codice PHP non funziona per me. Nel mio caso, utilizzando NGINX e PHP-FMP, rintraccio il file di registro utilizzando grep. Ad esempio, so che il nome file mycode.php causa l'errore 500, ma non conosco quale riga. Dalla console, io uso questo:

/var/log/php-fpm# cat www-error.log | grep mycode.php 

E ho l'output:

[04-Apr-2016 06:58:27] PHP Parse error: syntax error, unexpected ';' in /var/www/html/system/mycode.php on line 1458 

Questo mi aiuta a trovare la linea dove ho l'errore di battitura.

7

Utilizzare "php -l < nome file >" (che è una "L") dalla riga di comando per emettere l'errore di sintassi che potrebbe causare l'errore di stato 500 da parte di PHP. Sarà qualcosa di simile uscita:

PHP Errore di analisi: errore di sintassi, inaspettata '}' nel nome del file < > on line 18

+1

Questo mi ha davvero aiutato! Tail'ing il mio log degli errori non ha prodotto nulla, ma questa gemma ha funzionato perfettamente e ha visualizzato il mio errore di sintassi e il numero di riga. È stato eseguito il debug di un file di classe. Grazie! –

0

Fare attenzione a verificare se

display_errors 

o

error_reporting 

è attivo (non un commento) da qualche altra parte nel file ini.

Il mio server di sviluppo ha rifiutato di visualizzare errori dopo l'aggiornamento a Kubuntu 16.04 - Ho controllato php.ini numerose volte ... ho scoperto che c'era un diplay_errors = off; circa 100 righe sotto il mio

display_errors = on; 

Quindi ricorda l'ultimo conteggio!

0

Se tutto il resto fallisce provare a spostare (ad es.in bash) tutti i file e le directory "si allontanano" e li si aggiungono uno alla volta.

Ho appena scoperto in questo modo che il mio file .htaccess faceva riferimento a un file .htpasswd inesistente. (#silly)

2

cercare di non andare

MAMP > conf > [your PHP version] > php.ini 

ma

MAMP > bin > php > [your PHP version] > conf > php.ini 

e cambiare lì, ha funzionato per me ...

Problemi correlati