650 Stimmen

Wie kann ich nützliche Fehlermeldungen in PHP erhalten?

Oft versuche ich, ein PHP-Skript auszuführen, und erhalte nur einen leeren Bildschirm zurück. Keine Fehlermeldung, nur ein leerer Bildschirm. Die Ursache könnte ein einfacher Syntaxfehler (falsche Klammer, fehlendes Semikolon), ein fehlgeschlagener Funktionsaufruf oder etwas ganz anderes sein.

Es ist sehr schwierig, herauszufinden, was schief gelaufen ist. Am Ende muss ich Code auskommentieren, überall "echo"-Anweisungen eingeben usw., um das Problem einzugrenzen. Aber es muss doch einen besseren Weg geben, oder?

Gibt es eine Möglichkeit, PHP dazu zu bringen, eine nützliche Fehlermeldung auszugeben, wie es Java tut?

1 Stimmen

5 Stimmen

@JuannStrauss, Das ist noch untertrieben. Und wenn Sie schließlich siehe die Fehler, es heißt T_PAAMAYIM_NEKUDOTAYIM . Oder vielleicht "muss eine Instanz von integer sein, integer gegeben" .

2 Stimmen

1voto

Aamnah Punkte 509

Sie können die Datei auch im Terminal (Befehlszeile) wie folgt ausführen: php -f filename.php .

Dadurch wird Ihr Code ausgeführt und Sie erhalten bei Fehlern die gleiche Ausgabe, die Sie in der error.log . Es werden der Fehler und die Zeilennummer angegeben.

0voto

Vladimir Ramik Punkte 1955

Zusätzlich zu den vielen ausgezeichneten Antworten oben könnten Sie auch die folgenden zwei Funktionen in Ihre Projekte implementieren. Sie fangen jeden Nicht-Syntax-Fehler ab, bevor die Anwendung/das Skript beendet wird. Innerhalb der Funktionen können Sie einen Backtrace durchführen und protokollieren oder der Öffentlichkeit eine angenehme Meldung "Website wird gewartet" anzeigen.

Fatale Fehler:

register_shutdown_function

http://php.net/manual/en/function.register-shutdown-function.php

Irrtümer:

set_error_handler

http://php.net/manual/en/function.set-error-handler.php

Rückverfolgung:

debug_backtrace

http://php.net/manual/en/function.debug-backtrace.php

0voto

kris Punkte 10519

Das Einschalten der Fehlerberichterstattung ist die richtige Lösung, aber sie scheint nicht in dem Programm wirksam zu werden, das sie einschaltet, sondern nur in nachfolgend eingebundenen Programmen.

Daher erstelle ich immer eine Datei/Programm (das ich normalerweise "genwrap.php" nenne), das im Wesentlichen den gleichen Code wie die beliebte Lösung hier hat (d.h. Fehlerberichterstattung einschalten), und es enthält dann auch die Seite, die ich tatsächlich aufrufen möchte.

Es gibt 2 Schritte, um diese Fehlersuche zu implementieren;

Eine - erstellen Sie genwrap.php und fügen Sie diesen Code ein:

<?php
error_reporting(-1);
ini_set('display_errors', 'On');

include($_REQUEST['page']);
?>

Zwei - ändern Sie den Link zu dem Programm/der Seite, das/die Sie debuggen wollen, so dass er über genwrap.php geht,

Beispiel: Veränderung:

$.ajax('dir/pgm.php?param=val').done(function(data) { /* ... */

zu

$.ajax('dir/genwrap.php?page=pgm.php&param=val').done(function(data) { /* ... */

0voto

Denegen Punkte 17

Einige Anwendungen handhaben diese Anweisungen selbst, indem sie etwas wie dieses aufrufen:

error_reporting(E_ALL & ~E_DEPRECATED); or error_reporting(0);

Dadurch werden Ihre .htaccess-Einstellungen außer Kraft gesetzt.

0voto

Saghachi Punkte 673

Ich habe mein gesamtes 500er-Problem auf diese Weise gelöst:

A. Überprüfen Sie die php.ini-Parameter

  1. php.ini >> error_reporting = E_ALL | E_STRICT
  2. php.ini >> display_errors = Ein
  3. php.ini >> display_startup_errors = Aus

B. IIS-Manager-Parameter aktualisieren

  1. IIS Manager >> Fehlerseiten >> 500 >> Funktionseinstellungen bearbeiten >> detaillierte Fehler

in diesem Schritt, erhalten Sie 500 Fehler wie diese und ohne html laden.

enter image description here

  1. IIS Manager >> FastCGI Einstellungen >> php-cgi.exe >> Standard-Fehlermodus >> IgnoreAndReurn200

In diesem Schritt können Sie eine HTML-Seite mit php-Fehlern wie folgt sehen. enter image description here

UND FERTIG :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X