Redeclare bei }-Klammer der Funktion
johny7
- php
0 jobo2 Dieter Raber0 Auge
Moin allerseits,
ich habe ein Forum von http://www.frank-karau.de/
Ich weiß, ich könnte mich an ihn wenden. Aber vielleicht habt ihr ja auch eine Lösung...
Im Verzeichnis include/ gibt es eine init.php. Hier ein Auszug:
function count_bot($bot)
{
GLOBAL $_GET;
$_COUNT_BOTS = IniLoad('./data/count_bots.ini');
$_COUNT_BOTS[$bot.'_count']++;
$_COUNT_BOTS[$bot.'_lastonline'] = time();
$_COUNT_BOTS[$bot.'_board'] = $_GET['board'];
$_COUNT_BOTS[$bot.'_thema'] == $_GET['thema'];
IniSave('./data/count_bots.ini', $_COUNT_BOTS);
}
Aus dem Kontext der Foren-Scripte sehe ich, dass diese Datei für sehr viele Funktionen verwendet wird. Wenn ich nun einen Avatar hochladen will, kommt folgende Fehlermeldung:
Fatal error: Cannot redeclare count_bot() (previously declared in /users/musikbfecg/www/forum/include/init.php:158) in /users/musikbfecg/www/forum/include/init.php on line 167
Line 158 ist die erste Zeile des obigen Auszugs, Line 167 die letzte. Wieso meint er jetzt plötzlich, er müsse hier etwas re-deklarieren (so verstehe ich ihn zumindest)? Hier ist doch bloß die geschweifte Klammer.
Sonst taucht das Problem bisher nirgends auf. Und dieses Script wird, wie gesagt, fast immer eingebunden. Der Code wird auch immer ausgeführt, er steht in keiner Schleife oder anderen Klammern. Es handelt sich ja offensichtlich um statistische Werte, wie ich auch aus den Kommentaren weiter oberhalb des Ausschnittes sehe.
Vielleicht kennt jemand von euch das Verhalten schon...
Grüße, JN
Hallo,
Fatal error: Cannot redeclare count_bot() (previously declared in /users/musikbfecg/www/forum/include/init.php:158) in /users/musikbfecg/www/forum/include/init.php on line 167
Unlösbarer Fehler: Kann nicht die Funktion count_bot() noch einmal deklarieren (vormals deklariert in bla.php).
Du kannst eine Funktion nicht zweimal deklarieren.
Gruß
jobo
Hallo JN,
zunaechst einmal, wenn einer sowas schreibt
GLOBAL $_GET;
ist das ein deutlicher Hinweis darauf, dass seine PHP-Kenntnisse eher begrenzt sind. Ich wuerde mir dann zweimal ueberlegen, ob ich diese Software nutzen moechte.
Das Problem, das du beschreibst, deutet darauf hin, dass die Datei, die diese Funktion enthaelt ungeschickt geladen wird. Im guenstigsten Fall laesst sich das dadurch loesen, dass du die Einbindungen via include() oder require() durch require_once() ersetzt.
Du solltest auch mal testen was passiert, wenn du am Anfang des Scripts error_reporting(E_ALL); schreibst. Kann gut sein, dass du dann vor lauter Notices nichts mehr von der Seite zu sehen kriegst.
Gruss
Dieter
Hallo
Das Problem, das du beschreibst, deutet darauf hin, dass die Datei, die diese Funktion enthaelt ungeschickt geladen wird. Im guenstigsten Fall laesst sich das dadurch loesen, dass du die Einbindungen via include() oder require() durch require_once() ersetzt.
include_once
sollte an der Stelle (außerhalb von Tests) reichen, weil mit require_once
das Skript im Fehlerfall vollständig beendet wird. Scheinbar wird die nämliche Datei, wie du offensichtlich auch vermutest, an mehreren Stellen eingebunden, womit die Funktion auch mehrfach deklariert wird. Das führt dann zum beobachteten Fehler.
Tschö, Auge