Problem mit "Cannot redeclare xxx" Fehler

Rios

Erfahrenes Mitglied
Hallo,

Ich habe ein komisches Problem mit dem oben genannten "cannot redeclare ..." Fehler von PHP, normalerweise bekommt man den ja (logischerweise) wenn man eine Funktion mehr als einmal deklariert, oder die Datei mehrmals included.

In meinem Fall allerdings lautet die Meldung so: PHP Fatal error: Cannot redeclare formtext() (previously declared in E:\WEBPROJECTS\wwwroot\fw_includes.inc.php:9) in E:\WEBPROJECTS\fw_includes.inc.php on line 28.

Das komische daran ist, dass in Zeile 9 der Funktionsname (function formText()) steht und in Zeile 28 die schliessende Klammer von der Funktion, was ich überhaupt nicht kapiere, normalerweise müsste die zweite Zeilenangabe doch die Stelle sein, an der die Funktion nochmal deklariert wird?
Die Datei wird in der ganzen Applikation 2 mal included, aber beide Male mit include_once().

Der Fehler tritt im Frontend nur sporadisch auf und ist nicht reproduzierbar, das System läuft mit PHP 5.2.5 im isapi Modus unter Win2k3/IIS6.

Bei php.net/bugs hab Ich ein paar ähnliche Einträge gefunden, aber keine Lösung dazu. Bevor ich allerdings jede Funktionsdeklaration mit if(!function_exists()) prüfe würd Ich doch ganz gern rausfinden woran das liegen kann.

Bin für jede Hilfe dankbar
 
Prinzipiell sollte man sich auf die Zeilennummern bei PHP Meldungen nicht verlassen. Das ist oftmals nur ein Anhaltspunkt.
Nach meiner Erfahrung gibt es bei PHP keine sporadischen Fehler, nur ganz spezielle Bedingungen. Laß dir doch mal alle daran beteiligen Variablen ausgeben. Da kann man dann meistens nachvollziehen, unter welchen Bedingungen der Fehler auftritt. Es könnte z.B. sein, daß beide includes in if Bedingungen stehen und bei bestimmten Bedingungen beide Bedingen wahr sind und angelaufen werden. Und schon passiert der redeclare.
 
Die includes stehen ohne Bedingungen so im code drin: include_once('fw_includes.inc.php');

Ich kann mir leider nichts zum debuggen ausgeben, weil ich es auf meinem Rechner nicht reproduzieren kann. Die User kriegen das ab und zu mal und schicken mir ne mail mit nem screenshot und wo sie geklickt haben, aber ich kann es weder auf der Test- noch auf der Produktionsumgebung sehen.

Wenn du folgendes Minibeispiel ausgibst zeigt dir PHP die Zeile an, in der die Funktion zum 2.mal deklariert wird, meines Wissens sind die Zeilenangaben nur in Javascript so unzuverlässig.

PHP:
<?php

function test() { echo 'test1'; }


function test() { echo 'test2'; }

?>

P.S. sporadische Fehler habe ich schon zu oft gesehen, die gibts immer wieder :)

P.P.S Die Fehler treten seit dem letzten Update auf (Code + Datenbankänderungen), Änderungen am IIS oder der Umgebung wurden nicht gemacht, abgesehen von Windows-Patches.
 
Zwei Mal ein include_once ohne Bedingungen in einem Script? Dann sollte mMn eins davon raus können.
Ich hatte vor ein paar Tagen aber erst auch das Problem, daß eine redeclare Fehlermeldung kam, wenn ein include_once in einer Schleife stand.

Das Beispiel zeigt aber ganz deutlich die falschen Zeilennummern. Es wird Zeile 4 gemeldet, da ist aber entweder eine Leerzeile, oder falls die nicht mitgezählt werden, das ?> . Somit ist für mich die 4 definitiv verkehrt.

Läuft das auf einem Windows Server? Da ist für mich doch schon die erste Fehlerquelle. :)
 
Einmal wirds von der index.php standardmäßig bei jedem request geladen (ist so ne generische Funktionsbibliothek), das zweite Vorkommen ist in einer Datei, die Ajax requests steuert, daher kann es eigentlich nicht in einem Scriptablauf zusammen incuded werden.
Und selbst wenn, müsste include_once das ja verhindern. :mad:

Und ja, es läuft unter Windows 2k3 mit IIS6 im isapi modus. Das kann ich leider nicht ändern :)

Ist halt jetzt die Frage, ob das Problem durch irgendwas im Code erzeugt wird, oder schlimmstenfalls durch ne Instabilität im Server Setup, wobei letzteres seit ca nem Jahr ohne Probleme läuft.

Hier einige Beispiele von php.net mit ähnlichen Problemen:
http://bugs.php.net/bug.php?id=18590
http://bugs.php.net/bug.php?id=30075
 
Zurück