Suchen
Inside Wiki
Nützliche Links
phpforum.de Tipp
 
phpforum.de bei Facebook
 
phpforum.de bei Twitter
 

Zurück   PHP Forum: phpforum.de > phpforum.de Wiki > phpforum.de Wiki

PHP Wiki Dieses Wiki sammelt Lösungen, zu Problemen, welche immer wieder im Forum auftauchen.

 
 
Artikel-Optionen Ansicht
  #1  

Standard Fehlermeldungen (PHP)

 

Inhalte

Allgemeines


PHP Fehlermeldungen einschalten und anzeigen


In der Datei selbst


Um Fehlermeldungen anzeigen zu lassen ist folgender Code nötig. Dieser gehört ganz an den Anfang des betreffenden Scripts.
PHP Quellcode:
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', TRUE);
// Auf manchen System ist die Funktion ini_set() nicht erlaubt, dann bitte entfernen.

Des weiteren sind alle @ vor Funktionsaufrufen und vor Variablenzuweisungen zu entfernen. Dadurch würden die Fehlermeldungen unterdrückt werden.

In der php.ini


Es kann vorkommen, dass ein Fehler bereits vor den obigen beiden Zeilen auftritt, obwohl sie an erster Stelle in der Datei stehen. Das führt dazu, dass trotz des Codes in der Datei keine Fehler angezeigt werden. Um trotzdem Fehler anzuzeigen, muss in der php.ini der Wert error_reporting auf "E_ALL | E_STRICT" gesetzt werden. Zusätzlich muss display_errors der Wert "1" zugewiesen werden. Danach den Webserver neu starten.

In einer .htaccess Datei


Achtung! Diese Variante funktioniert nur beim Apache Webserver und wenn PHP als Modul läuft.
In die .htaccess Datei muss folgender Code:
Code:
php_value error_reporting "E_ALL | E_STRICT"
php_flag display_errors 1

Anzeigeort der Fehlermeldungen


PHP Fehlermeldungen können an den verschiedensten Stellen angezeigt werden. Es sollten alle überprüft werden.
  • Im Binärcode von ausgelieferten Bildern, PDFs usw. Ein Hexeditor zeigt diese Fehler.
  • Windows Ereignisprotokoll
  • Im Apache Log z.b. /var/log/httpd/error.log
  • In der PHP Logdatei
  • Im suEXEC Log
  • im suPHP Log
Die Fehlermeldungen müssen nicht überall auftauchen. Einige der oben genannten Orte sind Systemabhängig. Auch kann das Loggen abgeschaltet sein.

Der Fehlerkontrolloperator


Manche PHP-Anweisungen können Fehlermeldungen, Warnungen oder Hinweise generieren. Diese Meldungen werden bei der Ausführung von Scripten Bestandteil der Ausgabe, wo sie unter Umständen sehr stören können. Stellt man einem Funktionsaufruf ein @-Zeichen voran, wird der Interpreter die Ausgabe der Meldung unterdrücken. Das @ wird Fehlerkontrolloperator genannt.
Die Verwendung von @ macht nur in ganz wenigen Fällen Sinn:
  • In uralt Versionen wirft session_start() bei der Müllabfuhr einen Hint
  • getimagesize() liefert bei korrupten Daten manchmal ein Warning
Ansonsten ist es immer möglich, Fehlerquellen durch geschickte Programmierung zu umgehen.

Fehlermeldungen


Werte, die von % umschlossen sind repräsentieren eine Variable z.B. die Zeilennummer oder das Verzeichnis, in dem der Fehler auftrat.
Unterteilt wird in Fehlerstufen, die hier nachgeschlagen werden können. Alle Fehlermeldungen wurden mit html_errors=off erzeugt.

E_ERROR


Fatal error: Call to undefined function %function% in %file% on line %line%


Diese Fehlermeldung bedeutet, dass die Funktion, die sie aufrufen wollen, nicht existiert. Der Fehler kann durch einen einfachen Schreibfehler oder durch nicht aktivierte Extensions hervorgerufen werden.

Fatal error: Cannot use assign-op operators with overloaded objects nor string offsets in %file% on line %line%


Dieser Fehler tritt bei folgendem Szenario auf:
PHP Quellcode:
$string = 'Ein String.';
//was damit machen
/*
Später hat man vergessen(oder auch absichtlich), dass man $string schon benutzt hat und man will ein Array daraus machen.
Das unten ist KEIN Array, sondern immer noch ein String.
*/

$string['index'] = 'Ein Array';
$string['index'] .= ' wird angehängt'; //Hier entsteht der Fehler

Lösung: Andere Variablennamen verwenden.

Fatal error: Cannot redeclare %function% in %file% on line %line%


Dieser Fehler tritt auf, wenn man versucht eine bereits existierende Funktion erneut zu definieren. Das kann durch zweimaliges includen einer Datei passieren.

Fatal error: Cannot redeclare %function%() (previously declared in %file%:%line%) in %file% on line %line%


Dieser Fehler tritt auf, wenn man versucht eine benutzerdefinierte Funktion erneut zu definieren.

Fatal error: Cannot redeclare class %class% in %file% on line %line%


Dieser Fehler tritt auf, wenn man versucht eine Klasse erneut zu deklarieren. Das kann durch zweimaliges includen einer Datei passieren.

Fatal error: Class '%class%' not found in %file% on line %line%


Die Klasse wurde nicht gefunden. Wahrscheinlich hat man vergessen eine Datei zu includieren.

Fatal error: Undefined class constant '%constant%' in %file% on line %line%


Man hat eine Konstante einer Klasse verwendet, die nicht existiert.

Fatal error: Call to undefined method %method% in %file% on line %line%


Die Methode, die man versucht aufzurufen existiert nicht.

Fatal error: Call to a member function %function% on a non-object in %file% on line %line%


Man versucht eine Methode auf eine Variable anzuwenden, die kein Objekt ist.

Fatal error: Access type for interface method %interface%::%method%() must be omitted in %file% on line %line%


Dies tritt auf, wenn man versucht die Sichtbarkeit von Methoden in Interfaces anzugeben.
PHP Quellcode:
interface test {
//Falsch
protected function methode();
//Richtig
function methode();
}

Fatal error: Access level to %class%::%method%() must be public (as in class %interface%) in %file% on line %line%


Dies tritt auf, wenn man Methoden, die in einem Interface definiert sind, in einer Klasse mit der Sichtbarkeit protected oder private definieren will. Methoden in Interfaces müssen immer public sein.

E_WARNING


Warning: fopen(%file%, %mode%) - No such file or directory


Wenn dieser Fehler auftritt ist die Datei oder das Verzeichnis nicht vorhanden. PHP ist hier sehr ehrlich! Falls man dennoch davon überzeugt ist, dass die Datei bzw. das Verzeichnis existiert, sollte man sich mit dem Dateisystem des jeweiligen Betriebssystems auseinander setzen.

Warning: Supplied argument is not a valid File-Handle resource


in Script versucht mit einem Filehandle ($fp) zu arbeiten, welches das Resultat eines fopen() ist ($fp = fopen("..", "r") oder ähnlich). Dieses Filehandle ist ungültig, z. B. weil die Datei nicht existiert oder die Zugriffsrechte das Öffnen nicht gestatten.
Das Script ist fehlerhaft, weil es nach dem fopen() nicht prüft, ob das fopen() erfolgreich war:
PHP Quellcode:
<?php
        $fp = fopen(..., "r");
        /* Das fehlt zum korrekten Code:  */
        if (!$fp)
                die("Kann Datei ... nicht oeffnen.\n");
        /* Diese Anweisung macht dann Ärger */
        while($line = fgets($fp, 1000)) {
        ...
        }
?>

Warning: Cannot modify header information - headers already sent by (output started at %file%:%line%) in %file% on line %line%


Diesem Fehler geht IMMER ein Verstoß gegen das EVA Prinzip voraus.
Vor einem setcookie, header() und damit auch vor session_start() darf nichts ausgeben werden, kein Leerzeichen, keine Leerzeile oder gar HTML-Code. Der Parser zeigt in der Fehlermeldung an, wo dies aber schon passiert:
Code:
(output started at %file%:%line%)

Schwer zu finden sind Leerzeichen und Leerzeilen nach ?> in einer Include-Datei, da dann auch die Fehlermeldung von PHP nicht mehr die richtige Zeile ausgibt. Deshalb ist es durchaus zu empfehlen, dieses schließende Tag wegzulassen, sofern die Datei nur PHP-Code enthält. Dies sieht auch der Coding Standard des Zend Frameworks so vor. Es ist empfehlenswert sich an diese Regelung zu halten.
Gemeine Falle:
Mancher Editor klebt, im Unicode Modus, eine BOM an den Anfang des Scriptes. Diese "Byte Order Mark" ist leider nicht in jedem Editor sichtbar. Siehe hierzu auch UTF-8. Ein Hexeditor kann ungemein hilfreich sein, um diesen Fehler zu finden.

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at %file%:%line%) in %file% on line %line%


Siehe oben

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at %file%:%line%) in %file% on line %line%


Siehe oben

Warning: %function%() expects at least %number% parameters, %number% given in %file% on line %line


Dieser Fehler tritt auf, wenn man einer Funktion zu wenig Parameter übergeben hat.

Warning: stristr(): Empty delimiter. in %file% on line %line%


Der zweite Parameter: "needle" ist wohl leer..

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource


Diese Fehlermeldung erscheint immer dann, wenn eine vorherige Query einen Fehler erzeugt hat. Um genauere Informationen über den Fehler zu bekommen, sollte man nach der Zeile mit mysql_query diese Zeile einbauen:
PHP Quellcode:
if (mysql_errno()) die ("MySQL-Error: " . mysql_error());

Und MySQL sagt dir, was ihm nicht passt.

Alternativ, und wahrscheinlich einfacher ist es das unmittelbar nach dem Query zu notieren:
PHP Quellcode:
mysql_query($sql) or die ("MySQL-Error: " . mysql_error());

Auch hier wird im Fehlerfall eine informative Fehlermeldung ausgegeben, mit dessen Hilfe man schnell auf den Fehler schließen können sollte.

Warning: mysql_connect(): Lost connection to MySQL server during query


Das bedeutet meist, dass in /etc/my.cnf folgendes steht:
Code:
[mysqld]
bind-address    = 127.0.0.1
port            = 3306

Wenn PHP und MySQL auf dem selben Rechner laufen, ändere den Hostnamen im mysql_connect von 127.0.0.1 zu localhost.
Wenn du möchtest, dass dein MySQL Server von aussen erreichbar ist, trage in der /etc/my.cnf auch die öffendliche IP ein.

E_PARSE


Parse error: syntax error, unexpected T_OBJECT_OPERATOR in %file% on line %line%


Dieser Fehler tritt auf, wenn man versucht den Objektoperator (->) im falschen Kontext anzuwenden.

Parse error: parse error in %file% on line %line%


Diese Fehlermeldung weist auf einen Syntaxfehler in Ihrem Script hin. Dies kann bedeuten, das Sie z.B. ein ";" vergessen haben.

Parse error: syntax error, unexpected ';' in %file% on line %line%


Dieser Fehler kann vielfältige Ursachen haben. Meist eine Vergessene ).

Parse error: syntax error, unexpected $end in %file% on line %line%


Dieser Fehler erscheint, wenn man vergessen hat eine geschweifte Klammer } zu schließen oder am Ende der Datei ein ";" vergessen hat.

E_NOTICE


Notice: Undefined variable: %variable% in %file% on line %line%


Du versuchst eine Variable zu verwenden, welche bisher noch nicht mit definiert wurde. Diese, nicht existierende, Variabel wird behandelt, als wenn sie NULL liefern würde. Oft erscheinen plötzlich viele solcher Meldungen, wenn der Provider Register Globals endlich auf Off setzt.

Notice: Use of undefined constant %constant% - assuming '%constant%' in %file% on line %line%


Diese Fehlermeldung des Levels Notice tritt vor allem auf, wenn man bei Arrayschlüsseln die Hochkommas weglässt. Siehe hierzu Arrayschlüssel

PHP Notice: Undefined index: %bezeichner% in %file% on line %line%


Diese Fehlermeldung des Levels Notice tritt auf, wenn man versucht auf inexistente Array-Elemente zuzugreifen. Zur Abhilfe empfielt es sich, die Existenz des entsprechenden Elements vor dem Zugriff mittels [http://www.php.net/isset]isset()[/url] zu Überprüfen.

E_STRICT


Strict Standards: %timefunction%: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected '%timezone%' for '1.0/no DST' instead in %file% on line %line%


Dieser Fehler tritt auf, wenn man versucht eine Funktion aufzurufen, die etwas mit dem Datum oder der Uhrzeit zu tun hat. Einfach vorher date_default_timezone_set($timezone) aufrufen. Timezone enthält ihre Zeitzone. Eine Liste aller gültigen Zeitzonen gibt es hier.

Strict Standards: mktime(): You should be using the time() function instead in %file% on line %line%


Sie haben mktime() ohne Argumente aufgerufen. Dies hat den gleichen Effekt wie der Aufruf von time(). Verwenden sie stattdessen time().


Erstellt von dacat, 19.01.2008 am 12:26
Zuletzt bearbeitet von Jens Clasen, 15.02.2011 am 12:19
5 Kommentare , 11710 Betrachtungen

Dieser Text steht unter der GNU-Lizenz für freie Dokumentation


 

Lesezeichen

Artikel-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP Fehlermeldungen vincewega PHP 0 15.10.2007 09:47
Fehlermeldungen in PHP-CLI andrea-ulrike PHP 4 24.07.2007 11:22
Fehlermeldungen Saarwetter PHP 6 05.09.2006 16:43
Fehlermeldungen Dieda PHP 1 29.08.2006 20:31
Fehlermeldungen Sonja12 PHP 4 08.05.2006 10:00


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:32 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Powered by NuWiki v1.3 RC1 Copyright ©2006-2007, NuHit, LLC