• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP-Compiler spinnt herum

Hallo-Welt

Aktives Mitglied
Schönen guten Morgen,

Ich bin eben dabei ein PHP-Script zu schreiben. Als ich es jetzt getestet habe, bekam ich fogenden Ausnahmefehler:
Code:
Fatal error: Cannot redeclare func_ret() (previously declared in /users/test/www/sub/tztrhzgdf.php:76) in /users/test/www/sub/tztrhzgdf.php on line 76
Das macht allerdings gar keinen Sinn, denn in Zeile 76 steht NUR:
PHP:
function func_ret($zeichenkette, $finde){

Was ist der Sinn? In Zeile 76 soll die Funktion func_ret() doppelt definiert worden sei, sie steht dort aber nur ein einziges mal. Umbenennen hab ich auch schon versucht, hat aber nichts genützt. Wie kann ich diesen Fehler beheben, bzw. was bedeutet er. Ist das ein PHP-Bug?
 
Schönen guten Morgen,

Ich bin eben dabei ein PHP-Script zu schreiben. Als ich es jetzt getestet habe, bekam ich fogenden Ausnahmefehler:
Code:
Fatal error: Cannot redeclare func_ret() (previously declared in /users/test/www/sub/tztrhzgdf.php:76) in /users/test/www/sub/tztrhzgdf.php on line 76
Das macht allerdings gar keinen Sinn, denn in Zeile 76 steht NUR:
PHP:
function func_ret($zeichenkette, $finde){

Was ist der Sinn? In Zeile 76 soll die Funktion func_ret() doppelt definiert worden sei, sie steht dort aber nur ein einziges mal. Umbenennen hab ich auch schon versucht, hat aber nichts genützt. Wie kann ich diesen Fehler beheben, bzw. was bedeutet er. Ist das ein PHP-Bug?

In Zeile 76 wird sie zum zweiten mal definiert.
Umbenennen würde sicher nützen, außer du erwischt wieder eine bereits deklarierte Funktion.
Löschen/Auskommentieren wäre jedenfalls das richtige.
 
In Zeile 76 wird sie zum zweiten mal definiert.
Umbenennen würde sicher nützen, außer du erwischt wieder eine bereits deklarierte Funktion.
Löschen/Auskommentieren wäre jedenfalls das richtige.
Eben nicht. Ich habe den Input der Zeile 76 gepostet, die wurde dort nur ein einziges mal definiert, es sei denn, ich bin blind.

kannst ja mal die if darum legen

PHP:
if(!function_exists('func_ret')){
    function ...
}
Okay, ich wersuchs mal...
 
Bindest du sonst noch externe Scripts ein und ist die Funktion da nochmal deklariert

Die If bedingung wird ja nun nur ausgeführt wenn die funktion noch nicht existiert. Hast du sonst schonmal versucht deine funktion auszukommentieren und die funktion einfach aufzurufen, weil wenn sie existiert muss sie ja schon eine funktion haben
 
@B3nnoX: Tatsächlich, es funktioniert. Aber ich weiß immer noch nicht, was das Problem war. Ist es ein Bug, oder hab ich was falsch gemacht?

Edit:
Bindest du sonst noch externe Scripts ein und ist die Funktion da nochmal deklariert

Die If bedingung wird ja nun nur ausgeführt wenn die funktion noch nicht existiert. Hast du sonst schonmal versucht deine funktion auszukommentieren und die funktion einfach aufzurufen, weil wenn sie existiert muss sie ja schon eine funktion haben
-Es wird nichts in dei Datei eingebunden.
-Hab ich noch nicht, aber was ich nicht verstehe, ist, dass die Funktion augenscheinlich nur einmal definiert worden ist, es sei denn mein Editor zeigt mir nur die Hälfte an...
 
Eben nicht. Ich habe den Input der Zeile 76 gepostet, die wurde dort nur ein einziges mal definiert, es sei denn, ich bin blind.

Du musst genau lesen. In Zeile 76 wird sie bereits zum zweiten mal definiert!
Irgendwo vor dieser Zeile stand also schon function func_ret {….

Entweder im selben Dokument oder in externen Files.
 
Du musst genau lesen. In Zeile 76 wird sie bereits zum zweiten mal definiert!
Irgendwo vor dieser Zeile stand also schon function func_ret {….

Entweder im selben Dokument oder in externen Files.
Momentchen mal. Mein Englisch ist ja alles andere als perfekt, aber "previously" heißt doch eindeutig DAVOR! Also previously declared in line 76, heisst dann, vorher in Zeile 76 definiert, also hier zum Ersten mal.
 
Zuletzt bearbeitet:
Momentchen mal. Mein Englisch ist ja alles andere als perfekt, aber "previously" heißt doch eindeutig DAVOR! Also previously declared in line 76, heisst dann, vorher in Zeile 76 definiert, also hier zum Ersten mal.

Ja, da hast du recht, habe die Fehlermeldung selbst nicht genau gelesen :(
Für gewöhnlich zeigen PHP Fehlermeldungen nur wo der Fehler ausgelöst wird - nicht wo der richtige Code deklariert wurde.

Jetzt verstehe ich auch erst dein Problem - die Fehlermeldung beschuldigt die eigene Zeile falsch zu sein.

Lass mich raten - du bindest in einer Schleife mehrfach tztrhzgdf.php ein?
Da liegt auch der Fehler. Jedes mal wird die Funktion func_ret neu deklariert.
 
Okay, mir Idiot ist jetzt mal der Fehler aufgefallen. Ich habe das ganze in eine Schleife gepackt (also die Definition der Funktion). Entsprechend führt dies beim zweiten Durchlauf der Schleife zu einer Konfliktsituation.

Zur Behebung des Problems: Reichen würde es ja, die Funktion einfach ganz am Anfang des Dokuments, vor der Schleife zu plazieren. Das Problem (wobei ich noch nicht sicher weiss, ob es ein Problem ist): Dann stände die Fuktion VOR der Definition der jeweiligen Attributen. Werden die Attribute erst eingelesen, wenn die Funktion ausgeführt wird, oder bereits bei dessen Definierung (was in dem Falle ja zu einem Fehler führen würde)?

Veranschaulichung:

-------Funktion
-----------||
--Beginn der Schleife
-----------||
Definition der Attribute
-----------||
Benutzen der Funktion
-----------||
-Ende der Schleife

====================

Edit: @scbawik: Genau das war das Problem :)
 
Zuletzt bearbeitet:
Okay, mir Idiot ist jetzt mal der Fehler aufgefallen. Ich habe das ganze in eine Schleife gepackt (also die Definition der Funktion). Entsprechend führt dies beim zweiten Durchlauf der Schleife zu einer Konfliktsituation.

Zur Behebung des Problems: Reichen würde es ja, die Funktion einfach ganz am Anfang des Dokuments, vor der Schleife zu plazieren. Das Problem (wobei ich noch nicht sicher weiss, ob es ein Problem ist): Dann stände die Fuktion VOR der Definition der jeweiligen Attributen. Werden die Attribute erst eingelesen, wenn die Funktion ausgeführt wird, oder bereits bei dessen Definierung (was in dem Falle ja zu einem Fehler führen würde)?

Veranschaulischung:

Funktion
||
Beginn der Schleife
||
Definition der Attribute
||
Benutzen der Fuktion
||
Ende der Schleife

Edit: @scbawik: Genau das war das Problem :)

Ich weiß nicht was du mit "Attributen" meinst, aber ich denke das sollte kein Problem sein. Der Code in der Funktion wird erst ausgeführt, wenn die Funktion aufgerufen wird.
 
Zurück
Oben