phpbar.de logo

Mailinglisten-Archive

[php] =?iso-8859-1?Q?Parameter=FCbergabe?= im Pfad unter Windows - revisited

[php] =?iso-8859-1?Q?Parameter=FCbergabe?= im Pfad unter Windows - revisited

Oliver Kummerow naklar_(at)_altavista.net
Sat, 31 Jul 1999 09:03:19 +0200


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