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?

Andi Voss andi at andis.mine.nu
Don Apr 26 11:21:58 CEST 2007


Hi Jens,

Jens Giessmann wrote:
> 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.

In / wie bei dir auch. Dein Skript hats gezeigt :)
Damit ist natürlich klar, warum kein Verzeichnis erstellt/gelöscht 
wird... Und ich wollte schon ein Filesystem logging einbauen, um zu 
schauen wo PHP versucht zu schreiben... :)

> 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.

Ich habe es jetzt so gemacht, dass ich im __construct()
$this->realpath = getcwd();

setze und das dann jeweils im __destruct() in
unlink( $this->realpath . '/' . $this->file );

einbaue. Damit funktioniert das jetzt auch mit mod_php.
Allerdings habe ich eben gerade gelesen, dass getcwd() in einigen Fällen 
nicht zuverlässig das Webroot ermittelt [1],[2] .
Hat da jemand noch ne Idee, wie ich IMMER sicher an das Webroot komme?

Und hier [3] habe ich gerade gelesen, steht auch genau der Hinweis, dass 
PHP sich in / befindet in __destruct bzw. register_shutdown_function.

Aber warum ist PHP als CGI noch im Webroot und mod_php nicht?
Kann das jemand erklären?

Gruss und Danke
Andi

[1] http://ch2.php.net/manual/de/function.getcwd.php#59459
[2] http://ch2.php.net/manual/de/function.getcwd.php#49423
[3] http://ch2.php.net/manual/de/function.getcwd.php#43451

php::bar PHP Wiki   -   Listenarchive