tobiasBuschi: "Cannot redeclare" trotz "require_once"!

Hallo allerseits

ich habe eine Datei:

index.php:
************************************
<?php

$now['dd']='';

require_once ($now['dd'].'000/inc/library.inc.php');

$tmp = new rp_indexPage();

?>
*************************************

in der library datei werden wiederum dateien mit "require_once" includet

Wenn ich das auf dem externen Server anschauen will kommt die Fehlermeldung: Cannot redeclare rpa_alarm()....usw.

Es ist unmöglich, dass die funktion "rpa_alarm()" in meinem Tool zweimal deklariert wird!!
Lokal funktionert es und bei einem anderen domain funktioniert das Tool auch (auf dem selben externen Server!)

In der vorherigen Version meines Tools wurder die die Dateien von einem anderen Ort includet.
Kann es sein dass sich PHP die Funktionen zum schnelleren Ausführen gespeichert hat und jetzt beim updaten nochmals die selben Funktionen initialisieren will?

Ich kann es mir nicht anders erklären!

Wenn ja, wie kann man PHP dazubringen, den die Funktionen aus seinem Speicher zu löschen?

PHP Version 4.3.10

mfg Tobias Buschor

  1. Hello,

    ...

    das ist bei PHP noch absolut namensbasiert.

    Wenn Du in Modul X eine Klasse X.C1 deklarierst, und diese in Modul A auch nochmal unter dem Namen A.C1 deklarierst, und beide Module in Dein Script zp33.php include_st/requiere_st, dann treten eben diese Probleme im Namensraum auf. Für Funktionen innerhalb der Module gilt natürlich das Gleiche.

    Das ließe sich nur vermieden, wenn include/require endlich eine zusätzlichen Referenz-Parameter bekommen würden, auf den man dann den jeweiligen Refenenzpunkt legen könnte.

    include($filename,$REF);

    würde dann alle Refeneznen auf $REF legen.

    Funktionen wären dann z.B. über $REF.funktionsname() erreichbar oder bei OOP würde eben automatisch ein Obkjekt unter $REF angelegt.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Hello,

      ... alternativ könnte man auch das Unit-Konzept von Turbo-Pascal als Beispiel nehmen. Das würde mir sogar besser gefallen.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
    2. Danke für die Antwort!

      Wenn Du in Modul X eine Klasse X.C1 deklarierst, und diese in Modul A auch nochmal unter dem Namen A.C1 deklarierst, und beide Module in Dein Script zp33.php include_st/requiere_st, dann treten eben diese Probleme im Namensraum auf. Für Funktionen innerhalb der Module gilt natürlich das Gleiche.

      Aber das mache ich gar nicht.

      Ich vermute (kann es mir nicht anders erklären) das PHP noch Funktionen gespeichert hat die nun (nach dem Update) an einem anderen Ort gespeichert sind. die ganze Fehlermeldung lautet:

      Cannot redeclare rpa_alarm() (previously declared in
      /home/httpd/vhosts/www.x-largeprod.ch/web/000/inc/library/header/alarm.inc.php:4)in /home/httpd/vhosts/www.x-largeprod.ch/web/000/inc/library/header/alarm.inc.php on line 2

      1. Hello,

        Ich vermute (kann es mir nicht anders erklären) das PHP noch Funktionen gespeichert hat die nun (nach dem Update) an einem anderen Ort gespeichert sind. die ganze Fehlermeldung lautet:

        Cannot redeclare rpa_alarm() (previously declared in
        /home/httpd/vhosts/www.x-largeprod.ch/web/000/inc/library/header/alarm.inc.php:4)in /home/httpd/vhosts/www.x-largeprod.ch/web/000/inc/library/header/alarm.inc.php on line 2

        Da muss irgendwie ein Schachtelungs-Denkfehler vorliegen bei Dir.
        Es könnte sich sonst allerdings auch um einen "auto_prepend" oder einen  "auto_append" File handeln, der da für Kummer sorgt.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Hallo

          jetzt geht es auf einmal wieder!
          Ich habe nichts geänder, Es muss wohl doch an PHP selber gelegen haben, weiss aber leider nicht wieso.