Mailinglisten-Archive |
Hallo Thomas,
Thomas Schneider wrote:
> Parameterübergabe im Pfad funktioniert laut den PHP-Gurus wie folgt:
>
> http://www.server.com/foo.php3/bar
> startet das Skript foo.php3 mit Parameter "bar", übergeben im $PATH_INFO - fein!
>
> Aber: Diese Parameterübergabe im Pfad funktioniert offensichtlich nur
> auf Linux/Unix-Systemen, ich habe das auch schon vergeblich unter Windows
> probiert. Dies ist wohl ein Bug von Apache, PHP meldet immer:
>
> | Fatal error: Unable to open xxx in - on line 0
> | No input file specified.
Du hast offenbar recht. Ich habe es getestet und es scheint tatsaechlich
einen merkwuerdigen Fehler zu geben.
Erstmal phpinfo ausgefuehrt.
Windows 95:
SCRIPT_NAME /php-bin/php.exe
PATH_INFO /phpinfo.php
Unix:
SCRIPT_NAME /cgi-bin/php
PATH_INFO /phpinfo.php
Soweit ok.
Aber folgendes Script geht voll daneben:
$script = $PATH_INFO;
$host = $HTTP_HOST;
$dirname = dirname ( $script );
$file = $dirname . "/" . "test.html";
$fp = fopen ( $file , "r" );
$content = fread ( $fp, filesize ( $file ) );
fclose ( $fp );
echo $content;
echo $file;
Ergebnis:
Warning: fopen("/probieren/path_info/test.txt","r") - No such file or
directory in C:\www\vhosts\domain\probieren\path_info\path_info.php on
line 20
Warning: Unable to find file identifier 0 in
C:\www\vhosts\domain\probieren\path_info\path_info.php on line 21
ok, geaendert auf:
$file = "http://" . $host . $dirname . "/" . "test.txt";
Ergebnis:
http://www.domain.com/probieren/path_info/test.txt
Es kommt ueberhaupt kein Output der Test.txt !!!!! Aber auch keine
Fehlermeldung wie oben.
Da stimmt wirklich was nicht. Das waere dann ein Bug in der
Windows-Version (von Apache?) ?
Komischerweise, wenn ich eine relative Adressierung zum aktuellen
Standort der aufrufenden Datei mache:
$file = "../test.txt";
Datei liegt jetzt ein Dir tiefer, es funktioniert:
TEST TEST TEST TEST
../test.txt
Also muss auch:
$file = "../../probieren/path_info/test.txt";
d.h. - Datei liegt im gleichen Directory - gehen. Stimmt:
TEST TEST TEST TEST
../../probieren/path_info/test.txt
Also auch:
$script = $PATH_INFO;
$dirname = dirname ( $script );
$file = "../.." . $dirname . "/" . "test.txt";
... funktioniert:
TEST TEST TEST TEST
../../probieren/path_info/test.txt
D.h. man muss den Pfad mit entsprechend vielen "../" rueckwaerts zur
Root zaehlen und dann ueber PATH_INFO wieder hoch. So geht es offenbar.
Nur relative und keine absoluten Angaben. Das muesste dann aber auch
unter Unix funktionieren, womit zumindest ein kleinster gemeinsamer
Nenner existieren wuerde.
> Wer weiß eine Lösung für Win95?
Das da oben ist keine, allenfalls ein Notbehelf.
oder habe ich was falsch gedacht-gemacht?
Mit freundlichen Grüßen,
Oliver Kummerow
email: naklar_(at)_altavista.net
php::bar PHP Wiki - Listenarchive