fopen()-Konfiguration: wann welcher Wrapper?

Irgendwelche Probleme mit XAMPP für Windows? Dann ist hier genau der richtige Ort um nachzufragen.

fopen()-Konfiguration: wann welcher Wrapper?

Postby Gentle_Giant » 25. July 2008 07:11

Hallo Forum,

ich möchte eine PHP-Datei mit fopen() öffnen und ausgeben, damit der darin befindliche Code interpretiert wird. (Ich weiß, dass das mit 'include' viel einfacher geht, aber es muss hier fopen() sein. Es geht um Integration in fremd-entwickelte Software, auf die ich keinen Einfluss habe).

fopentest.inc.php
Code: Select all
<? echo "Hallo fopen"; ?>

fopentest.php
Code: Select all
<?
   $uri = "http://localhost/fopentest.inc.php";

   echo "uri: ".$uri."<br>";
   $fh = fopen($uri, "r");
   if ($fh) {
     $text = fread($fh, 1024);
     $len = strlen($text);
     echo "text hat ".$len." Zeichen<br>";
     echo "&lt;text&gt;".$text."&lt;text&gt;<br>";
     $c = fclose($fh);
   }
?>


Wenn ich fopentest.php im Browser aufrufe, erhalte ich erwartungsgemäß
Code: Select all
uri: http://localhost/fopentest.inc.php
text hat 13 Zeichen
<text>Hallo fopen </text>

Wenn ich dieselbe Include-Datei relativ adressiere, ...
Code: Select all
$uri = "./fopentest.inc.php";
, bekomme ich verblüffenderweise folgenden Output:
Code: Select all
uri: ./fopentest.inc.php
text hat 29 Zeichen
<text> </text>

Und noch verblüffender ist, wenn ich mir den generierten HTML-Code anschaue:
Code: Select all
uri: ./fopentest.inc.php<br>text hat 29 Zeichen<br>&lt;text&gt;<? echo "Hallo fopen"; ?>

&lt;/text&gt;<br>
Da steht der includete PHP-Code nämlich drin, aber er wird nicht interpretiert :shock:

Ich hätte zwei Fragen au Euch:

1. wie kann ich ihn dazu bringen, dass er die relativ codierte Adresse genauso behandelt, wie die absolute.

2. Wie kann es sein, dass der PHP-Code im zweiten Beispiel nicht interpretiert wird?

Danke für Eure Unterstützung.
Bye for now
Gentle_Giant - stiil crazy after all these years ...
Gentle_Giant
 
Posts: 7
Joined: 11. June 2008 09:25

Postby Nobbie » 25. July 2008 10:22

Was ist daran verblüffend? Ist doch völlig logisch, offensichtlich ist bei fopen der URL-Wrapper aktiviert.

1. wie kann ich ihn dazu bringen, dass er die relativ codierte Adresse genauso behandelt, wie die absolute.


Das ist die falsche Frage, denn was Du als "absolute Adresse" bezeichnest ist keinesfalls ein absoluter Pfadnamen, sondern eine URL (ein Protokoll, nämlich http, gefolgt vom Doppelpunkt und dem Doppelslash, dem Servernamen, hier localhost und dann dem Namen des Dokuments). Die "relative Adresse" ist aber keine Adresse, sondern ein Pfadnamen zu einer Datei im lokalen Dateisystem.

2. Wie kann es sein, dass der PHP-Code im zweiten Beispiel nicht interpretiert wird?


Weil fopen grundsätzlich nicht interpretiert - auch im ersten Fall nicht. Das tut im ersten Fall lediglich der aktivierte URL-Wrapper, der sich quasi wie ein Filter dazwischenhängt und für den fopen() schon einmal den HTTP-Request ausführt, um das Ergebnis dann durchzureichen.
Nobbie
 
Posts: 13183
Joined: 09. March 2008 13:04

Postby Gentle_Giant » 25. July 2008 10:39

Danke für Deine ausführliche Antwort. Das erklärt mir einiges.

Eines verstehe ich aber immer noch nicht ganz: wenn ich PHP-Code aus einer Datei mit fopen() und fread() lese und anschließend mit echo ausgebe, findet das doch alles noch vor der Interpretation des HTML-Codes durch den Browser statt, und dann müsste selbiger den PHP-Code, der sich ja tatsächlich im Source befindet, doch zumindestens un-interpretiert ausgeben, oder?
Bye for now
Gentle_Giant - stiil crazy after all these years ...
Gentle_Giant
 
Posts: 7
Joined: 11. June 2008 09:25

Postby Nobbie » 25. July 2008 14:06

Gentle_Giant wrote:Eines verstehe ich aber immer noch nicht ganz: wenn ich PHP-Code aus einer Datei mit fopen() und fread() lese und anschließend mit echo ausgebe, findet das doch alles noch vor der Interpretation des HTML-Codes durch den Browser statt, und dann müsste selbiger den PHP-Code, der sich ja tatsächlich im Source befindet, doch zumindestens un-interpretiert ausgeben, oder?


Aber genau das passiert doch auch - es wird der uninterpretierte PHP Source ausgegeben. Schau doch Dein Beispiel an, genau so ist es dort.

P.S.: Du formulierst es auch seltsam, der Browser bekommt den Code nicht VOR dem HTML Code angeliefert, sondern genau so mittendrin wie der echo den PHP Code einbindet. Selbstverständlich werden aber PHP Tags in der Bildschirmanzeige nicht gezeigt, denn sie sind Kommentar aus Sicht des Browsers. Erst wenn man den Quell-HTML-Code anschaut, sieht man die PHP Tags und den Code.
Nobbie
 
Posts: 13183
Joined: 09. March 2008 13:04


Return to XAMPP für Windows

Who is online

Users browsing this forum: No registered users and 70 guests