Sven Rautenberg: Variablen bei include_once()

Beitrag lesen

Moin!

das ist keine absolute Pfadangabe. Es ist eine relative Pfadangabe, die mit dem Verzeichnis www.example.com beginnt, ausgehend vom Verzeichnis des übergeordneten Scripts.

Ups, das war nur ein Schlampigkeisfehler beim Posten!
Selbstverständlich ist

<?php

$variable = 'foo';
  include_once('http://www.example.com/test3/file.php');
?>


>   
> gemeint! Darum sagte ich ja auch absolute Pfadangabe!  
  
Das ist aber kein Dateisystempfad, sondern eine URL. Und dieser Unterschied ist entscheidend.  
  

> > Natürlich, weil die include-Datei nicht gefunden wird.  
>   
> Ich \_sagte\_ doch, sie wird gefunden! Nur die Variable übernimmt sie nicht.  
> Also es bleibt bei der Frage: Kann mir wer erklären, wieso das so ist?  
  
Bei deinem ersten Versuch liest PHP über das Dateisystem den Inhalt der Datei ein und führt den Code aus.  
  
Beim zweiten Versuch liest PHP eine externe Ressource ein. Dies führt zu einem HTTP-Request auf deinen eigenen Server, der in einem neuen Kontext lediglich das Script in test3 ausführt. Variablen werden hierbei NICHT übergeben.  
  
Das Ergebnis eines schlichten "var\_dump($undefinierte\_variable)" ist der Text "NULL". (Und eigentlich sollte in Entwicklungsumgebungen auch noch ein Notice-Text dabei sein...)  
  
Das Includieren von schlichtem HTML-Text gibt diesen lediglich aus. Dein Skript in Test2 bindet also keinen PHP-Code ein, sondern sozusagen HTML-Code.  
  
Es ist immer extrem wichtig, dass man PHP-Codeeinbindungen NIE über HTTP-Zugriffe vornimmt. Eines der wichtigen Features gut konfigurierter Webserver ist, dass man als Nutzer von außen nicht jedes beliebige PHP-Skript aufrufen kann. Insofern ist es nur natürlich, dass PHP innerhalb des Webservers mit Zugriffen via Dateisystem mehr darf, als man von außen via URL erreichen kann.  
  
Vor allem kann man eben nicht "einfach" PHP-Code via URL so einbinden, dass dieser im Kontext des einbindenden Skripts ausgeführt wird. Hierzu müsste man den PHP-Interpreter beim Aufruf des anderen Skripts deaktivieren, um an den Quellcode zu gelangen. Damit programmiert man sich aber gleich die extremste Sicherheitslücke, denn niemand sollte via HTTP-Zugriff an die Quellcodes der PHP-Skripte kommen.  
  
Relative Pfadangaben sind ok. Jedes PHP-Skript kennt auch die magische Konstante \_\_FILE\_\_ und ab PHP 5.3 auch \_\_DIR\_\_, in denen der Dateinamen des aktuellen Skripts bzw. der Verzeichnisname enthalten sind. Diese Angabe zusammen mit einer relativen Pfadangabe sind zuverlässige Pfadangaben im Dateisystem.  
  
 - Sven Rautenberg