phpbar.de logo

Mailinglisten-Archive

[php] require_once() - fehlverhalten Linux / Windows - PHP v4.4.0

[php] require_once() - fehlverhalten Linux / Windows - PHP v4.4.0

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Don Jan 11 09:51:17 CET 2007


Hallo Tobias,

Am Donnerstag, 11. Januar 2007 09:43 schrieb Tobias Fichtner:
> MalZeit,
>
> mir obliegt die lösung des folgenden Problems:
>
> [SOURCE:./index.php]
> <?php
>
> $handle=opendir( dirname( __FILE__ ) );
>
> while( $file = @readdir( $handle ) ){
> if( $file != "." && $file != ".." ){
> require_once( dirname( __FILE__ ) . '/' .$file );
> }
> }
>
> @closedir( $handle );
>
> ?>
>
> Problem im genauen:
> -Unter Windows:
> schleife läuft, bindet ein was durchs if kommt und per "once" nicht
> schon drin ist und lässt mich in ruhe!
> -Unter Linux:
> schleife läuft, bindet ein was durchs if kommt und per "once" nicht
> schon drin ist, abgesehen von sich selbst. Bindet sich selbst
> mehrfach ein und verursacht ganz nebenbei einen unerklärlichen: "is
> not a valid directory resource" für readdir und closedir.
>
> Meine Frage:
> kennt das jemand und weiss er dazu eine lösung?
>
> Antworten die ich kenn:
> @ setzen und wegschaun! (ist aber keine lösung)

wenn ich das jetzt richtig verstanden habe, hast Du die Erklärung doch 
eigentlich schon selbst gefunden: Die Datei bindet sich selbst ein, und 
zwar genau einmal. Aber das reicht. Dadurch wird $handle in der 
while-Schleife beim Einbinden der index.php neu belegt und dann eben 
auch wieder geschlossen, so daß readdir und closedir anschließend in 
der while-Schleife und danach für den Zugriff keine gültige Resource 
mehr haben. ;-)

Die Lösung ist genauso einfach. Die index.php darf sich nicht selbst 
einbinden. Ergänze also einfach Deine if-Bedingung:

	if( $file != "." && $file != ".." && $file != "index.php" ){


Viele Grüße
Lutz

php::bar PHP Wiki   -   Listenarchive