phpbar.de logo

Mailinglisten-Archive

[php] __destruct nicht bei mod_php5, aber bei php5 als cgi?

[php] __destruct nicht bei mod_php5, aber bei php5 als cgi?

Jens Giessmann jg at handcode.de
Mit Apr 25 16:02:33 CEST 2007


Hi,

On Wed, Apr 25, 2007 at 10:42:58AM +0200, Andi Voss wrote:
> 
> Das hatte ich auch gelesen und testweise mal mit mkdir ein Verzeichnis 
> erstellt in __destruct, mit dem Ergebnis, dass mit mod_php kein 
> Verzeichis erstellt wird und mit PHP als CGI im Webroot das 
> entsprechende Verzeichnis erscheint.
> 
> function __destruct()
> {
>      // das sollte ja jetzt im Webroot erstellt werden, egal
>      // ob PHP als CGI oder PHP als mod_php
>      // Ergebnis: Es wird nur bei PHP als CGI ein Verzeichnis
>      // im Webroot erstellt
>      mkdir( "Testverzeichnis" );
> }

Hats du mal getestet WO dein Script "ist" wenn der Destruktor
mit mod_php aufgerufen wird?

Bei mir (kleiner Test auf 2 Maschinen) ist das / und da darf ein
Apache-User hoffentlich auch kein Verzeichnis anlegen.

Das bedeutet auch, dass man wohl fuer file-Operationen im Destruktor
immer einen absoluten Pfad zum Ziel verwenden sollte, den kann man
sich ja vorher als Eigenschaft definieren.

Probier mal folgendes kleine Test-Script, das klappt bei mir
problemlos, loeschen und anlegen.

--------------------------------schnipp-----------------------------
<?php 
 
error_reporting(E_ALL); 
 
class MyDirDestruct { 
 
  function __construct() { 
    $this->name = dirname(__FILE__) . '/' . "MyDir"; 
  } 
 
  function __destruct() { 
    echo "Im Destruktor\n"; 
 
    if (is_dir($this->name)) { 
      echo "Versuche das Verzeichnis zu loeschen:\n"; 
       
      if (rmdir($this->name) === FALSE) {  
        echo "Fehler, konnte " . $this->name . " nicht loeschen!\n";  
        echo "Befinde mich aktuell in '" . `pwd` . "'\n";  
      }  
      else {  
        print "Klappt, " . $this->name . " wurde geloescht!\n";  
      }  
 
 
    } 
    else { 
      echo "Versuche das Verzeichnis anzulegen:\n"; 
      if (mkdir($this->name) === FALSE) { 
        echo "Fehler, konnte " . $this->name . " nicht anlegen!\n"; 
        echo "Befinde mich aktuell in '" . `pwd` . "'\n"; 
      } 
      else { 
        print "Klappt, " . $this->name . " wurde angelegt!\n"; 
      } 
    } 
     
  } 
} 
 
$obj = new MyDirDestruct(); 
 
?> 
--------------------------------schnapp-----------------------------


Gruss Jens

php::bar PHP Wiki   -   Listenarchive