johny7: Redeclare bei }-Klammer der Funktion

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

--
ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)
http://www.johny7.de
  1. 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

  2. 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

    1. 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

      --
      Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
      Terry Pratchett, "Wachen! Wachen!"
      Veranstaltungsdatenbank Vdb 0.3