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.
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.
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.
In der Vergangenheit hatte ich in zwei Fällen keine Fehlerprotokolle:
php_error_log
-Datei..htaccess
aufgetreten, z. B. aufgrund falscher Moduleinstellungen. In dieser Situation werden Fehler in der Apache error_log
-Datei protokolliert.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.
Ü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.
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 :-)
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.
Stellen Sie sicher, dass Ihre Dateiberechtigungen korrekt sind. Wenn Apache keine Berechtigung zum Lesen der Datei hat, kann er nicht in das Protokoll schreiben.
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.
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.