wake-up-neo.net

pHP zurück 500 Fehler, aber kein Fehlerprotokoll

Ich habe ein Problem, wenn ich eine PHP-Anwendung habe, die einen internen Serverfehler (500) zurückgibt, jedoch nichts im Fehlerprotokoll angezeigt wird.

Jetzt weiß ich, dass es Fehler bei dem gibt, was ich ausführen möchte. Ich weiß, dass mir einige Dateien fehlen und was nicht, aber etwas sollte im Apache-Fehlerprotokoll angezeigt werden (wie soll ich genau wissen, was mir fehlt).

Ich habe ein Testskript erstellt, in dem Fehler unter derselben vhost-Konfiguration enthalten sind, und diese Fehler werden in Ordnung angezeigt, so dass alles wie php/Apache richtig konfiguriert ist. Gibt es bestimmte PHP-Fehler, die im Fehlerprotokoll angezeigt werden (PHP ist so konfiguriert, dass Benachrichtigungen, Warnungen, Fehler, schwerwiegende Fehler usw. angezeigt werden)?

Dies läuft auf Ubunut 10.04 mit dem Standard Apache und PHP aus dem Ubuntu Repo mit apt-get.

47
ryanzec

Scannen Sie Ihre Quelldateien nach @.

Von der PHP-Dokumentationsseite

Derzeit wird das Operator-Präfix "@" für die Fehlerkontrolle sogar deaktiviert Fehlerberichterstattung für kritische Fehler, die das Skript beenden Ausführung. Dies bedeutet unter anderem, wenn Sie "." Für .__ verwenden. Fehler von einer bestimmten Funktion unterdrücken und entweder nicht verfügbar ist oder wurde falsch geschrieben, stirbt das Skript gleich dort mit no Angabe, warum.

49
Luc M

Möglicherweise schaltet etwas die Fehlerausgabe ab. (Ich verstehe, dass Sie versuchen zu sagen, dass andere Skripts ihre Fehler ordnungsgemäß im Fehlerprotokoll ausgeben?)

Sie können mit dem Debuggen des Skripts beginnen, indem Sie festlegen, wo das Skript beendet wird. Beginnen Sie, indem Sie der ersten Zeile des Skripts einen echo 1; exit; hinzufügen und prüfen, ob der Browser 1 ausgibt, und diese Zeile dann nach unten verschieben.

6
akirk

In der Vergangenheit hatte ich in zwei Fällen keine Fehlerprotokolle:

  1. Der Benutzer, unter dem Apache ausgeführt wurde, hatte keine Berechtigung zum Ändern der php_error_log-Datei.
  2. Der Fehler 500 ist auf Grund einer fehlerhaften Konfiguration von .htaccess aufgetreten, z. B. aufgrund falscher Moduleinstellungen. In dieser Situation werden Fehler in der Apache error_log-Datei protokolliert.
5
sgnsajgon

Kopieren Sie folgende Datei, fügen Sie sie in eine neue .htaccess-Datei ein und platzieren Sie sie im Stammordner Ihrer Website:

php_flag  display_errors                  on
php_flag  display_startup_errors          on

Fehler werden direkt auf Ihrer Seite angezeigt. 

Das ist der beste Weg, um schnell zu debuggen, aber verwenden Sie es nicht für lange Zeit , weil dies eine Sicherheitsverletzung darstellen könnte.

4
Meloman

Überprüfen Sie bei Symfony-Projekten unbedingt die Dateien in der App/den Protokollen des Projekts

Weitere Details zu diesem Beitrag:
So debuggen Sie 500 Fehler in Symfony 2

Übrigens, andere Frameworks oder CMS teilen dieses Verhalten.

3
Balmipour

Dies ist ein weiterer Grund, warum Fehler möglicherweise nicht sichtbar sind:

Ich hatte das gleiche Problem. In meinem Fall hatte ich die Quelle aus einer Produktionsumgebung kopiert. Daher wurde die in index.php definierte Variable ENVIRONMENT auf 'production' gesetzt. Dies führte dazu, dass error_reporting auf 0 gesetzt wurde (keine Protokollierung). Setzen Sie es einfach auf 'development' und Sie sollten Fehlermeldungen im Apache-Protokoll sehen.

Es stellte sich heraus, dass die 500 aufgrund eines Semikolons in der Datenbank-Konfiguration fehlte :-)

2
Aswin Kumar

Ein anderer Fall, der mir passiert ist, ist, dass ich eine CURL für einige meiner Seiten durchgeführt habe und einen internen Serverfehler erhalten habe und nichts in den Apache-Protokollen war, selbst wenn ich alle Fehlerberichte aktiviert habe.

Mein Problem war, dass ich in der CURL curl_setopt($CR, CURLOPT_FAILONERROR, true);

Was dann meinen Fehler nicht angezeigt hat, obwohl es einen gab, geschah dies, weil der Fehler auf Framework-Ebene und nicht auf PHP lag und daher nicht in den Protokollen angezeigt wurde.

1
eric.itzhak

Stellen Sie sicher, dass Ihre Dateiberechtigungen korrekt sind. Wenn Apache keine Berechtigung zum Lesen der Datei hat, kann er nicht in das Protokoll schreiben.

0
Johnny Ruin

Wenn Sie immer noch 500 Fehler und keine Protokolle haben, können Sie versuchen, die Befehlszeile auszuführen:

php -f file.php

es funktioniert nicht genau wie in einem Browser (vom Server), aber wenn in Ihrem Code ein Syntaxfehler vorliegt, wird eine Fehlermeldung in der Konsole angezeigt.

0
jcubic

Sie müssen das Fehlerprotokoll PHP aktivieren.

Dies liegt an einem zufälligen Fehler im Webserver, wenn Sie einen PHP-Fehler haben. Es wird ein interner Fehler von 500 ausgelöst (ich habe das gleiche Problem).

Wenn Sie im Fehlerprotokoll PHP nachschauen, sollten Sie Ihre Lösung finden.

siehe hier im Dokument, wie man es in der php.ini aktiviert

0
Neal