Cannot redeclare -> Funktionen

Morph

Erfahrenes Mitglied
Hab' 2 funktionen in einer func.inc.php gespeichert, rufe die an zweiter stelle gespeicherte (login_check()) am anfang der site auf (natürlich nach dem includen der func.inc.php) und die erste (page_header()) rufe ich einige Zeilen später auf, da ich sie erst dort brauche.
Jetzt mein Problem: Dort wo normal der header per page_header() eingebunden wird kommt die Formschöne Fehlermeldung
Code:
Fatal error: Cannot redeclare page_header() in ... on Line 3
Line 3 ist genau die Zeile wo die erste Function, die page_header() *deklariert* wird - woran liegt das ? Warum mag er keine 2 Funktionen in einer Datei ?

Grüße, Morph
 
Hast du die Funktion page_header()irgendwo anders noch deklariert? Entweder in einer anderen Datei oder in dem Ausführenden Skript selbst?
Vielleicht hast du auch statt nem Funtktionsaufruf da function page_header() stehen. Das wäre falsch!

So Long
TheVirus
 
Hm anscheinend nicht gut erklärt von mir ;)
func.inc.php enthält
- function page_header()
- function login_check()

func.inc.php wird in die main.php eingebunden
nach dem includen der func... wird login_check() aufgerufen
in der main.php wird menue.inc.php eingebunden
in der menue.inc.php, die eingebunden wurde, wir page_header() aufgerufen

Das funktionierte alles ja prima, bis ich die function login_check() auch in die func.inc.php geschrieben habe

Grüße, Morph
 
Hast du in der menue.inc.php irgendwelche Funktions namen, die auch in deiner func.inc.php sind?

Wenn du sachen includest oder requirest musst du drauf achten, dass die Namen aller Funktionen eindeutig sind.
 
Alles eindeutig deklariert, nichts doppelt - außerdem ging es ja vorher ;)
Wenn ich wüsste wo der Fehler liegt,dann wäre es ja ok, aber nach 1 1/2 Stunden des Code durchforstens ist man schon leicht deprimiert *g*

Grüße, Morph
 
auszug aus main.php
PHP:
...
// includen der daten
include ('includes/config.inc.php');
include ('func.inc.php');

// aufrufen der Funktion check_login aus der func.in.php
check_login();
...
func.inc.php
PHP:
function page_header()
{
	global $head, $site, $go;
	echo "< haufen html code, lass ich mal weg >";
}

function check_login()
{
	global $dbhost, $dbuser, $dbpass, $login_button, $user, $pw;
        // haufen sql abfragen, tut nichts zur sache
}
config.inc.php
PHP:
<?php

// mysql
$dbhost = 'xxx';
$dbuser = 'xxx';
$dbpass = 'xxx';
$dbname = 'xxx';

// Konfiguration des Headers
$head['bgcolor1'] = "#FFFFFF";
$head['bgcolor2'] = "#CDDCE7";
$head['bgcolor3'] = "#FFFFFF";

$head['image_path'] = "images/";
?>
*puh*
auszug aus menue.inc.php
PHP:
...
page_header();

echo "
    <TR>
    <TD vAlign=top height=300><FONT class=ueberschrift>User LogIn</FONT><BR><FONT class=normal>
";
...
So, denke mal das war das wichtigste ...

Grüße, Morph
 
Hoi!

Bei Includes sollte man sehr aufpassen. Es passiert sehr leicht, dass eine Include bereits eingebunden wurde und über ein anderes Script, dass in die selbe Datei eingebunden wird erneut eingebunden wird.

Um das zu verhindern kannst du Namensräume simulieren bzw, die Präprozessor befehle von C nachblden. Das machst du so:

Du umschießt die gesamte functions.inc.php mit folgendem Code:

Code:
if(!$FUNCTIONS_INC_PHP)
{
  $FUNCTIONS_INC_PHP = true;

  ... hier dein eigentlich Code in der functions.inc.php ...

}

Das machst du nun auf ähnliche Weise mit allen deinen Includes. Wenn du nun eine Include einbindest prüft sie zuerst, ob eine spezielle Variable (am besten Identifiziert diese auch die Include selbst) gesetzt ist. Ist dies nicht der Fall wird die eigentlich Include ausgeführt und die Variable gesetzt. Ist dies der Fall, wird daraus gefolgert, dass die Include bereits eingebunden wurde und sie wird einfach überlesen.
Ob das wirklich funktioniert (ich errinere an lokale Gültigkeit von Variablen und Funktionen) kann ich nicht garantieren, aber ein Crashtest eben bei mir hat fuinktioniert :)

Gruesse

..ooOOipOOoo..
 
Zurück