Bug im PHP5-Klassensystem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Bug im PHP5-Klassensystem

    Hallo,
    der Titel klingt viell. eigenartig, aber ich vermute ich habe einen Bug in PHP5 gefunden. Vielleicht liegt es an irgendeiner Einstellung von mir oder so, bin gerne bereit Infos aus der phpinfo() zu posten. Meine PHP-Version ist die 5.0.5 bei all-inkl.com.

    Datei "one.php":
    PHP-Code:
    <?php

    include("two.php");

    $two = new two;

    ?>
    Datei "two.php":
    PHP-Code:
    <?php

    class two
    {
        public function 
    __construct()
        {
            echo 
    "<br />__construct(): \n\n".getcwd()."<br />\n\n\n";
        }
        public function 
    __destruct()
        {
            echo 
    "<br />__destruct(): \n\n".getcwd()."<br />\n\n\n";
            
    $this->save();
        }
        private function 
    save()
        {
            echo 
    "<br />save(): \n\n".getcwd()."<br />\n\n\n";
        }
    };

    ?>
    Aufrufen von "www.meinedomain.de/one.php" führt zu folgender Ausgabe:
    __construct(): /www/htdocs/w005fd5c

    __destruct(): /

    save(): /
    Wie ihr seht, wird einfach ab dem Destruktor der Arbeitspfad geändert. Bin dadurch stark auf die Nase gefallen.
    Kann jemand das als Bug bestätigen bzw. mich aufklären an welchen Einstellungen das liegt?

    Bzw. kann das mal jemand kurz bei sich testen?

    Danke!
    Zuletzt geändert von kuebel-s; 29.11.2005, 18:33.

  • #2
    Vielleicht das hier?

    watch out:
    working directory, and thus:
    getcwd ()
    is "/" while being into a register'ed shutdown function!!!
    Wobei ich nicht genau weiß, was mit "shutdown" in diesem Kontext gemeint ist.
    In dem Fall wär es aber kein Bug

    Kommentar


    • #3
      Also ich habe nur diese zwei Dateien da, so wie sie dastehen. Keinerlei shutdown function registriert oder ähnliches. So wie one.php und two.php ich gepostet habe, so habe ich es getestet.

      Edit:
      Ups, du meintest wohl die __destruct() als shutdown function...
      Naja, aber was ist daran ein feature? Ich musste im Destruktor Dateien schreiben und kriege ständig Fehler weil open_basedir eintritt. Und ich kann nur über die Schnittstellen die Dateien beschreiben, diese Schnittstellen bieten jedoch keine Option ein Präfix zu setzen (z.B. $_SERVER['DOCUMENT_ROOT'])...
      Zuletzt geändert von kuebel-s; 29.11.2005, 18:49.

      Kommentar


      • #4
        Hmm... Ich bin noch nicht sehr fit in 5er-OOP, aber ist _destruct dann nicht automatisch die Shutdown-Funktion? Und save() entsprechend auch, weil es aus _destruct() aufgerufen wird?

        EDIT:

        Edit übersehen.
        Naja, sagt ja keiner, daß es ein Feature ist. Eher ein... Beature? Fug?

        Kommentar


        • #5
          Du warst schneller mit Antworten als ich meinen Beitrag editieren konnte :P:

          Ups, du meintest wohl die __destruct() als shutdown function...
          Naja, aber was ist daran ein feature? Ich musste im Destruktor Dateien schreiben und kriege ständig Fehler weil open_basedir eintritt. Und ich kann nur über die Schnittstellen die Dateien beschreiben, diese Schnittstellen bieten jedoch keine Option ein Präfix zu setzen (z.B. $_SERVER['DOCUMENT_ROOT'])...

          Kommentar


          • #6
            Lies mal die Kommentare zu http://us2.php.net/manual/de/language.oop5.decon.php

            contact at tcknetwork dot com schreibt:

            be careful while trying to access files with __destruct() because the base directory (getcwd()) will be the root of your server and not the path of your script, so add before all your path called in __destruct() :
            EITHER
            PHP-Code:
            dirname($_SERVER["SCRIPT_FILENAME"])."my/path/" 
            OR
            PHP-Code:
            dirname(__FILE__)."my/path/" 
            (be careful with includes, it will give the path of the file processed and not the main file)
            Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

            Kommentar

            Lädt...
            X