2010-02-09 6 views
16

Ich benutze nginx mit PHP-FPM. Meine nginx-Konfiguration für PHP-Dateien verarbeitet werden wie folgt aussieht:PHP FPM gibt HTTP 500 für alle PHP Fehler zurück

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; 
     } 

Nun, ich habe eine einfache PHP-Datei wie folgt aus:

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

Ja, mit einem offensichtlichen Fehler. Wenn ich versuche, auf die PHP-Datei zuzugreifen, bekomme ich, anstatt einen Syntaxfehler zu verfolgen, immer einen HTTP 500 Internal Server Error. Ich habe versucht, error_reporting(-1); zu verwenden, aber es immer HTTP 500 zurückgibt. Wie bekomme ich PHP den genauen Fehler zu drucken, anstatt zurückzukehren ein generisches HTTP 500?

+0

Wenn die Datei, würden Sie nicht den Fehler haben bekommen der richtige Antwortcode (HTTP 200 OK)? – echo

+0

Ja, ich bekomme ein HTTP 200 OK, wenn die Datei keinen Fehler hat. – ErJab

+0

Es ist generell besser, Fehler zu protokollieren als sie anzuzeigen. – umassthrower

Antwort

29

Versuchen Sie, die folgende Zeile in der php.ini zu finden:

display_errors = Off 

es dann auf

machen
+0

Danke! Ich verwende eine Produktionsversion von php.ini, in der display_errors ausgeschaltet ist. – ErJab

+1

Ich benutzte ein PHP-Fastcgi-Skript, also als ich vor kurzem zu PHP-FPM wechselte. Ich habe nicht bemerkt, dass die php.ini in FPMs Version geändert wurde. Ihre Version hat dispaly_errors = Off, so dass alle meine Seiten leer wurden, als ein Fehler auftrat! – Xeoncross

+6

nicht vergessen, danach php-fpm zurückzusetzen. (sudo service php-fpm neustart) – alioygur

8

eine vollständigere Antwort zu schreiben, habe ich eine Produktionsversion von php.ini verwendet hatte, die display_errors hat = Aus. Anstatt es global einzuschalten, was ich jetzt mache, verwende ich für Dateien, für die ich eine Fehlerberichterstattung benötige, ini_set('display_errors', 'On'); am Anfang der Datei.

+0

Das Problem damit ist, dass es laut der Dokumentation nicht funktioniert, wenn ein Fataler Fehler passiert. – srcspider

+0

@srcspider Nicht wirklich nicht wahr? Selbst fatale Fehler werden angezeigt. Alles, was Sie tun müssen, ist nur sicherzustellen, dass Sie dieses 'ini_set ('display_errors', 'On') 'ganz oben in dem Bereich setzen, den Sie in Betracht ziehen. –

4

Auch ich traf das Problem, und ich setzte display_errors = Off in php.ini aber es funktioniert nicht. Dann habe ich die php[display_errors]=off in php-fpm.conf gefunden, und es wird den Wert php.ini überschreiben und es funktioniert.

+0

'php.ini' hat nichts mit Konfigurationen zu tun, wenn Sie 'php-fpm' verwenden. In diesem Fall müssen Sie die' php-fpm.conf' modifizieren. –

1

Anzeigefehler wirken sich nur auf die Tatsache aus, dass die Fehler ausgegeben werden oder nicht.

Wenn Protokollfehler aktiviert sind, fehlen die Fehler weiterhin im Protokoll, es sei denn, die Anzeige ist ausgeschaltet, was nicht dem erwarteten Verhalten entspricht.

Das erwartete Verhalten ist, wenn Protokoll aktiviert ist, Fehler dort gefunden werden. Wenn die Anzeige eingeschaltet ist, werden Fehler auf dem Bildschirm/der Ausgabe gefunden. Wenn beide eingeschaltet sind, werden auf beiden Fehler gefunden.

Aktuelle Versionen haben einen Fehler, der das verpasst.

+0

Kennen Sie ein Bug-Ticket in php.net, das diesen Fehler verfolgt? Kannst du es verlinken? – Sven

+0

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

1

Für Ubuntu 12.10, in php-fpm-pool-config-Datei:

php_flag[display_errors] = on 

In php.ini:

display_errors = On