__destruct und file_exists, filesize...

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

  • __destruct und file_exists, filesize...

    Hallo,
    ich habe ein kleines Problem mit der neuen methode "__destruct" von php5.
    in dieser methode funktionieren die funktionen wie file_exists, filesize usw... nicht korrekt, warum ?
    Oder ist hier etwas falsch an meinem beispiel script ?
    PHP-Code:
    <?php
    class test {
      private 
    $Datei;
      function 
    __construct($file) {
        
    $this->Datei $file;
        
    $this->check_file(__METHOD__);
      }
      private function 
    check_file($method) {
        echo 
    'Method: "'.$method.'"<br />';
        if(
    file_exists($this->Datei)) {
          echo 
    filesize($this->Datei).' b<br />';
        }
        else {
          echo 
    'file: "'.$this->Datei.'" is not exists!<br />';
        }
        
    clearstatcache();
      }
      function 
    __destruct() {
        
    $this->check_file(__METHOD__);
      }
    }
    $Obj = new test('./xxx.php');
    /* Output:
    Method: "test::__construct"
    1477 b
    Method: "test::__destruct"
    file: "./xxx.php" is not exists!
    */
    ?>
    Gruß
    Runner

  • #2
    Hm Tatsächlich! Also ich kann im Code keinen Fehler finden, und er zeigt bei mir dasselbe Verhalten.

    Funktionieren tut es allerdings, wenn man $Obj explizit mit unset() killt. Das Problem tritt also auf, wenn das Objekt implizit (wegen Skriptende) zerstört wird.

    Und es mit einer absoluten Pfadangabe (statt ./) geht es immer. Schon seltsam. Hat jemand eine Linux-Kiste mit 5.0 drauf, um es dort zu testen? Windows-PHP hat ja traditionell Schwierigkeiten mit relativen Pfaden.

    Kommentar


    • #3
      mhh... stimmt.

      Also auf Linux ist es genau dasselbe Problem.
      Andere Funktionen machen in __destruct auch Probleme, aber es gibt auch Funktionen die ganz normal funktionieren, wie substr, get_class, microtime usw.
      Was aber zb. auch gar nicht mehr funktioniert ist zb. "bcsub", dann tut sich gar nichts mehr


      Scheint so als wenn die Methode sehr gefräßig/vergesslich währe.

      Beispiel:
      PHP-Code:
          function __destruct() {
              echo 
      '$this->Datei='.$this->Datei.'<br />';
              
      $this->Datei realpath($this->Datei);
              echo 
      '$this->Datei='.$this->Datei.'<br />';
              
      // $this->Datei ist nach realpath leer...
              
      echo 'bcsub(123, 234, 6)'.bcsub(1232346);
              
      // ^^^ bei bcsub ist dann im __destruct ganz vorbei...
              
      $this->check_file(__METHOD__);
          } 

      Kommentar


      • #4
        php 5.0.1 CLI
        PHP-Code:
        Methodtest::__construct
        848 b
        Method
        test::__destruct
        848 b 
        php 5.0.1 mod
        PHP-Code:
        Methodtest::__construct
        609 b
        Method
        test::__destruct
        file
        : ./destruct.php is not exists
        nach ein wenig sucherei habe ich einen php4 bug von 2002 gefunden
        der genau auf dieses verhalten zutrifft.
        daraus resultiert das das problem nur apache2 betrifft. scheint
        sich ja lange zu halten. 8-o

        http://bugs.php.net/bug.php?id=18920

        Kommentar

        Lädt...
        X