Autor Abonniere diesen Autor
Benutzeravatar
AmigaLink
Administrator
 
Artikel: 7
Registriert: Sa 27. Mär 2010, 14:27
Wohnort: NRW
Bewerte diesen Artikel
Dieser Artikel ist derzeit mit 0 bewertet.
Es wurden 0 Stimmen abgegeben.
Ähnliche Artikel
 
Fatal error: Cannot redeclare ...

Fatal error: Cannot redeclare abc() (previously declared in .../xy.php:xx) in .../xyz.php on line xx
Was will und diese Fehlermeldung sagen?


Die Antwort ist recht simple:
Der Fehler kommt weil eine Funktion definiert wird die es bereits gibt!
Da es sich (in diesem Fall) nicht um eine Funktion vom PHP-Interpreter handelt, wurde sie also bereits an anderer stelle definiert. Und die Fehlermeldung sagt uns sogar genau wo. 8)

  • Cannot redeclare abc() gibt an welche Funktion es sich handelt.
  • (previously declared in .../xy.php:xx) besagt das die Funktion in Datei: xy.php Zeile: xx zum erstem mal definiert wurde.
  • und in .../xyz.php on line xx sagt uns das die Funktion in Datei: xyz.php Zeile: xx erneut definiert wird.
Die Definition von Funktionen erfolgt, in den meisten Fällen, in extra Dateien, welche sich beim phpBB im includes Ordner befinden und mittels include(); dann in die verschiedene Dateien eingebunden wird, wo die definierten Funktionen benötigt werden.
Nachteil dieser Methode ist, das die beiden Datei angaben der Fehlermeldung identisch sind. :?
Wir müssen also wissen welche (Haupt-)Datei aufgerufen wurde, als der Fehler gemeldet wurde!
In dieser Datei suchen wir dann den Code include('xyz.php); (beim phpBB sieht er meist so aus: include($phpbb_root_path.'includes/xyz'.$phpEx);) und ersetzen ihn gegen include_once('xyz.php);. :)

Warum?
Um Sicherzustellen das nicht mehrmals eingebunden wird, gibt es den Befehl include_once(); (genau genommen ist das auch eine Funktion).
Der Unterschied zwischen include(); und include_once(); ist, das include_once(); prüft ob die entsprechende Datei bereits an andere Stelle inkludiert wurde und dementsprechend, die Datei, einbindet oder eben nicht. 8)

Warum dann nicht einfach nur include_once(); verwenden?
Ganz einfach: Die Funktion erzeugt Zeiger auf Dateien und deren Inhalt, welcher wiederum Hauptspeicher belegt! Bei Umfangreichen Projekten, wie das phpBB, würde dies dazu führen das der Speicher voll läuft, was wiederum auch zu Fehlern führt.

Das gleiche gilt für require(); und require_once();!
Diese beiden Befehle (Funktionen) includieren ebenfalls Dateien. Mit dem Unterschied das sie beim auftreten von Fehlern, die Ausführung der aufrufenden Datei abbrechen.
Diese beide Befehle werden aber beim phpBB eher selten bis garnicht eingesetzt.

Eine ausführlichere Beschreibung der include(); und require(); Befehle ist hier auf oxpus.de zu finden. :)
Dieser Artikel wurde zuletzt bearbeitet von AmigaLink am Mo 19. Apr 2010, 18:00

Stichwörter: php, phpbb, fehler, programmieren

Wer ist online?

Mitglieder: 0 Mitglieder

Moderations-Bereich ]