search
subnavi
Werbung

Dateifunktionen und Programmausführung

Frage: Wie kann ich eine Datei auslesen?

Antwort von Kristian Köhntopp:

Man kann eine Datei manuell öffnen und Zeile für Zeile lesen:

$fp = @fopen("datei", "r") or die ("Kann Datei nicht lesen.");
while ($line = fgets($fp, 1024)) {
  machwas($line);
}
fclose($fp); 

Dies verwendet die Funktionen fopen() und fgets() . Wenn die gelesenen Zeilen sofort ausgegeben werden sollen, dann kann man dies kürzer mit fpassthru() oder gar readfile() schreiben:

$fp = @fopen("datei", "r") or die ("Kann Datei nicht lesen.");
fpassthru($fp);
// fclose($fp); entfällt.

// Noch einfacher ist es mit readfile():
readfile("datei"); 

Will man stattdessen die Daten in der Datei in einem Array zur Verfügung haben, kann man file() verwenden. Will man die Daten in der Datei in einem einzigen String zur Verfügung haben, muss man dies mit implode() kombinieren:

// Einlesen in Array
$avar = file("datei");

// Einlesen in String
$str = implode("", file("datei"));

// Mit unterdrückten Meldungen
$str = implode("", @file("datei")); 

Ab PHP 4.3.0 kann man zum Einlesen in einen String auch die Funktion file_get_contents() verwenden. Große Dateien sollte man allerdings häppchenweise mit fopen() und fread() abarbeiten.

In jedem Fall kann man den Funktionen wie üblich einen Klammeraffen voranstellen, um die Fehlermeldungen zu unterdrücken . Die häufigste Fehlermeldung bei fopen() & Co. ist " fehler-file-handle ".

Im safe_mode unterliegt das Lesen und Schreiben von Dateien weiteren Einschränkungen.

Frage: Wie kann ich ein externes Programm von PHP aus starten?

Antwort von Kristian Köhntopp:

PHP kennt nicht weniger als fünf Mechanismen, um externe Kommandos (z. B. Unix-Shellbefehle) von PHP aus zu starten. Alle diese Mechanismen können zu einem Sicherheitsrisiko werden, wenn man Benutzereingaben Bestandteil der ausgeführten Kommandos oder Dateinamen werden lässt.

Durch Anwendung der Funktion EscapeShellCmd() kann man das Risiko etwas vermindern (etwa: system(escapeshellcmd($cmd)) ). Dennoch empfiehlt es sich, die Parameter, die in die Gestaltung von $cmd eingehen, sorgfältig zu prüfen.

Externe Kommandos werden bei Verwendung von CGI PHP unter der Identität des CGI-Wrappers ausgeführt, bei Verwendung einer Modulversion von PHP mit der Identität des Webservers (siehe auch Webserver verstehen und tunen von Kristian Köhntopp).

Will man ein externes Kommando einfach nur ausführen, kann man das betreffende Kommando einfach in Backticks setzen:

`touch yyy`; 

Dies wird im selben Verzeichnis wie das PHP-Script die Datei yyy erzeugen, falls der Webserver dort Schreibrecht hat.

Alternativ kann man ein Kommando durch die Funktion exec() starten lassen. Auch hier ist die Ausgabe nicht sichtbar, kann aber in einem Array abgelegt werden:

exec("cat /etc/group", $lines, $result);
  echo "result = $result<br>";

  echo "Lines<br>\n";
  foreach ($lines as $k => $v) {
    echo "k=$k v=$v<br>\n";
  } 

Die Ausgabe des Befehls wird im Feld $lines zur Verfügung gestellt, der Exitcode des Befehls in $result .

Die Funktion system() gibt die Ausgabe des Unix-Kommandos dagegen an den Webserver weiter. Ebenso passthru() :

system("ls -l", $result);
  echo "Result: $result<br>\n";

  passthru("ls -l", $result);
  echo "Result: $result<br>\n"; 

Schließlich kann man externe Kommandos noch mit Hilfe der Funktion popen() starten:

$fp = popen("ls -l", "r");
  while($line = fgets($fp, 1024)) {
    printf("%s<br>\n", $line);
  } 

Im safe_mode unterliegt die Programmausführung weiteren Einschränkungen.

Antwort von Johannes Frömter:

PHP wartet bei der Ausführung externer Programme auf deren Beendigung, d. h. das PHP-Script ist solange blockiert, bis das aufgerufene Programm fertig ist. Um dies zu vermeiden, muss man den Output des Programms umleiten, z. B. nach /dev/null:

exec("programm >/dev/null 2>&1"); 
Antwort von Frank Wiegand:

Sollte die Ausführung des externen Programmes fehlschlagen, dann muss man diese Punkte überprüfen:

    • Enthalten das Kommando oder die Argumente shellspezifische Sonderzeichen? Diese Zeichen haben in Shells u. U. eine besondere Bedeutung und müssen entsprechend escaped werden: & , ; , ` , ' , " , | , * , ? , ~ , < , > , ^ , ( , ) , [ , ] , { , } , $ und \ . Hilfreich sind hierbei die Funktionen escapeshellcmd() und escapeshellarg() .

    • Stimmt der Pfad, falls der Programmname nicht absolut gesetzt ist? Da PHP oft unter einer anderen Benutzer-ID als der eigenen läuft, muss man damit rechnen, dass die Umgebungsvariable $PATH (in PHP: $_ENV['PATH'] ) anders gesetzt ist. Die absolute Angabe des Pfades löst dieses Problem.

    • Hat der Benutzer, unter dem PHP läuft, Ausführungsrechte für das Programm? Herausfinden läßt sich das, indem man in einer Shell die Rechte mit ls -l /pfad/zum/kommando überprüft (das x-Bit muss entsprechend gesetzt sein). Alternativ kann man auch die Funktion is_executable() (funktioniert nicht unter Windows!) benutzen.

Hilfreich bei der Fehlersuche ist die Umleitung der Standard-Fehlerausgabe auf die Standardausgabe:

print `/pfad/zum/kommando arg1 arg2 2>&1`; 

Frage: Wie realisiere ich einen Dateidownload mit PHP?

Antwort von Kristian Köhntopp:

Grundsätzlich kann man einen Dateidownload auf zwei verschiedene Arten realisieren: Entweder man schreibt ein PHP-Script, das einen Redirect (siehe http-redirect ) auf die zu ladende Datei generiert, oder man startet den Download durch das PHP-Script. Die Methode mit dem Redirect hat den Nachteil, dass Anwender die Ziel-URL des Redirect mitbekommen und später dann direkt und ungeschützt auf diese Datei zugreifen können.

Will man das verhindern, muss man den Download innerhalb von PHP abhandeln. Die zu ladenden Dateien liegen dann außerhalb der Document Root des Webservers (haben also keine URL) und sind nur durch PHP zugreifbar. In PHP sendet man den passenden MIME-Typ als Header und schickt dann die gewünschte Datei hinterher. Natürlich kann man vorher noch einen Downloadzähler aktualisieren oder überprüfen, ob der Anwender überhaupt für den Download autorisiert ist.

// $download sei der Bezeichner für die zu ladende Datei
// etwa: 
$download = $_GET['download'];

// Dieses Verzeichnis liegt außerhalb des Document Root und
// ist nicht per URL erreichbar.
$basedir = "/home/www/download";

// Übersetzung von Download-Bezeichner in Dateinamen.
$filelist = array(
  "file1" => "area1/datei1.zip",
  "file2" => "area1/datei2.zip",
  "file3" => "area2/datei1.zip"
);

// Einbruchsversuch abfangen.
if (!isset($filelist[$download]))
  die("Datei $download nicht vorhanden.");

// Vertrauenswürdigen Dateinamen basteln.
$filename = sprintf("%s/%s", $basedir, $filelist[$download]);

// Passenden Datentyp erzeugen.
header("Content-Type: application/octet-stream");

// Passenden Dateinamen im Download-Requester vorgeben,
// z. B. den Original-Dateinamen
$save_as_name = basename($filelist[$download]);
header("Content-Disposition: attachment; filename=\"$save_as_name\"");

// Datei ausgeben.
readfile($filename); 

Dieses Script kann mit dem Parameter $download aufgerufen werden. Dieser Parameter wird dann in den Namen einer zu ladenden Datei übersetzt. Aus Sicherheitsgründen ist es nicht möglich, dem Script direkt Dateinamen zu übergeben - wir möchten vermeiden, dass jemand als Parameter download=../../../../../../../etc/passwd oder ähnliche Namen erfolgreich übergeben kann. Die Prüfung ist eine Variante des ersten Prüfschemas aus security-variablen .

Antwort von Guido Haeger:

Die Reaktion des UserAgent auf die oben genannten Header ist in den RFCs für HTTP und MIME nicht eindeutig definiert. Zusätzlich haben einige Browser Bugs bezüglich der korrekten Interpretation von Content-Disposition-Headern. Es wird dann häufig versucht, den UserAgent mit nicht standardisierten Header-Kreationen zum Anzeigen des "Speichern Unter"-Dialoges zu zwingen. Das mag bei einigen UserAgents rein zufällig zum gewünschten Verhalten führen, ist aber nicht empfehlenswert. Sofern nicht standardisierte Content-Type-Header verwendet werden, so sind diese mit einem x- einzuleiten ( Content-Type: x-type/x-subtype ).

Der Internet Explorer 5.5 ignoriert in vielen Fällen das Filename-Attribut des Content-Disposition-Headers und schlägt vor, die Datei nicht unter dem dort vorgegebenen Dateinamen, sondern unter dem Namen des PHP-Scriptes zu speichern. Für dieses Problem gibt es verschiedene Workarounds. Bei Verwendung des Apache als HTTP-Server kann man z.B. ModRewrite verwenden. In die .htaccess oder http.conf:

RewriteEngine on
RewriteRule download/([^/]{1,30})\.([a-z0-9]{2,4}) /download.php?filename=$1&extension=$2 

Bei einem Request für /download/prospekt.pdf wird auf dem Server dann das Script /download.php?filename=prospekt&lextension=pdf aufgerufen. Wenn der Internet Explorer 5.5 das Filename-Attribut des Content-Disposition-Headers ignoriert, so wird er den String hinter dem letzten Slash des URL als Dateinamen für die zu speichernde Datei anbieten. In diesem Beispiel also prospekt.pdf .

Frage: Wie kann ich in einer Datei eine Zeile einfügen oder löschen?

Antwort von Kristian Köhntopp:

Für dieses Problem gibt es keine elegante oder effiziente Lösung. Die Ursache liegt darin, wie Unix und Windows die unterliegenden Dateien handhaben, nämlich als unstrukturierte Byteströme. Für diese Byteströme gibt es keine Indices und auch keine Methoden, mit denen man effizient beliebige Teile der Datei löschen oder in die Datei einfügen könnte.

Tatsächlich ist der Wunsch nach einfachen Einfüge- und Löschoperationen der Auslöser für die Schaffung von Datenbankfunktionen wie die DBM-Funktionen oder von ganzen Datenbanken wie MySQL gewesen. Wenn man auf diese Sorte Problem trifft, sollte man also intensiv über den Einsatz von DBM-Dateien oder Datenbanken nachdenken.

Um in einer Datei eine Zeile einzufügen oder zu löschen, muss man die Datei öffnen und zeilenweise durchlesen und in eine zweite Datei schreiben. Erreicht man die gewünschte Position, muss man dort eine Zeile einfügen oder löschen. Nach Abschluß der Operation ist die Originaldatei zu löschen und die neue Datei umzubenennen. Dabei ist zu beachten, dass in einer Webumgebung ohne weiteres mehrere Benutzer zugleich eine solche Operation für dieselbe Datei anfordern können. Man muss also auch durch Locking dafür Sorge tragen, dass sich diese Benutzer nicht in die Quere kommen.

// Shared lock auf die Quelldatei
$old = fopen($oldfile, "r");
flock($old, 1) or die("Kann die Quelldatei $oldfile nicht locken.");

// Exclusive lock auf die Zieldatei
$new = fopen($oldfile.".new", "w");
flock($new, 2) or die("Kann die Zieldatei $newfile nicht locken.");

$lineno = 0;

while($line = fgets($old, 1024)) {
  if ($lineno++ == $zielzeile)
    continue;  // Zeile auslassen

  fputs($new, $line);
}

fclose($old); // Gibt das Lock automatisch auf

// Alte Datei wegwerfen.
unlink($oldfile);

// Neue Datei umbenennen.
// (In Windows müssen das rename() und das fclose($new)
//  vertauscht werden, da es nicht möglich ist, in Windows
//  eine offene Datei umzubenennen.
rename($oldfile.".new", $oldfile);

// Neue Datei schließen und dabei Lock aufgeben.
fclose($new); 

Frage: Wie kann ich eine Datei zeilenweise rückwärts auslesen?

Antwort von Johannes Frömter:

Dateien sind nicht in "Zeilen" organisiert, die Zeilenende-Zeichen ( \n und/oder \r ) sind ganz gewöhnliche Bytes im Datenstrom. Für das Lesen vom Dateianfang bis zum nächsten Zeilenende-Zeichen gibt es entsprechende Funktionen ( fgets() ), in umgekehrter Richtung ist dies jedoch wegen der physikalischen Organisation des Dateisystems nicht sinnvoll möglich.

Man muss die Datei also zuerst vorwärts zeilenweise in ein Array einlesen - das erledigt die Funktion file() - und kann dann auf dieses Array beliebig, z. B. auch von hinten nach vorne, zugreifen.

Beim Schreiben müssen die "Zeilen" nicht umständlich vorne in die Datei eingefügt, sondern können einfach hinten an die Datei angehängt werden; hierzu wird die Datei im Append-(Anhängen)-Modus geöffnet:

<?php
  // In Datei schreiben (anhängen)
  $fp = fopen($filename, 'a+');
  flock($fp, 2) or die('Kann die Datei nicht locken');
  fwrite($fp, "$zeile\n");
  fclose($fp);
?>

<?php
  // Datei "zeilenweise" in ein Array einlesen
  $array = file($filename);

  // $array von vorne nach hinten durchlaufen
  foreach($array as $zeile) {
      echo trim($zeile) . "<br>\n";
  }

  // $array von hinten nach vorne durchlaufen
  $i = sizeof($array);
  while ($i--) {
      echo trim($array[$i]) . "<br>\n";
  }
?> 

file() liest die Zeilen einschließlich der Zeilenende-Zeichen ein; da die letzte Zeile in der Datei nicht unbedingt ein Zeilenende-Zeichen hat, sollte trim() bzw. rtrim() angewendet werden, um einheitliche Zeilen zu bekommen.

Frage: Wie kann ich einen Datei-Upload per FTP durchführen?

Antwort von Johannes Frömter:

PHP hat eingebaute FTP-Funktionen , mittels derer man Dateien von oder zu einem FTP-Server übertragen kann. Es ist damit aber nicht möglich, Daten von einem Browser zu empfangen! Dies ist also keine Alternative zum HTTP-Upload per HTML-Formular (siehe hierzu " formular-upload-php4 ").

PHP kann nur einen FTP- Client darstellen, der sich zu einem FTP- Server verbindet, d. h. der Verbindungsaufbau und die -steuerung müssen immer vom PHP-Script aus erfolgen, und die Daten für den Upload müssen sich bereits auf dem Webserver befinden. Vollständige Beispiele für eine FTP-Verbindung mit PHP finden sich im Manual und weiter unten auf dieser Seite.

Antwort von Kristian Köhntopp:

Die FTP-Funktionen sind verfügbar, wenn PHP mit der Option --enable-ftp (bei PHP 3: --with-ftp ) übersetzt worden ist. In der Ausgabe von phpinfo() erscheint dann in der Modulliste der FTP-Support.

Die Funktionen sind im Manual im Kapitel FTP-Funktionen im Einzelnen beschrieben.

Vollständiges Beispiel:

<h1>FTP Test</h1>
<?php
  $link = ftp_connect("localhost");
  if (!ftp_login($link, "ftp", "user@host.de"))
    die("Kann mich nicht einloggen.");

  if (!ftp_chdir($link, "/pub"))
    die("Kann nicht in das Zielverzeichnis /pub wechseln.");

  $name = ftp_nlist($link, ".");
  if (isset($name) and is_array($name)) {
    foreach ($name as $k => $v) {
      printf("%s - %s<br>\n", $k, $v);
    }
  }

  $size = ftp_size($link, "beispiel");
  if ($size < 0)
    die("Kann die Größe der Datei beispiel nicht bestimmen.");

  $mtime = ftp_mdtm($link, "beispiel");
  if ($mtime < 0)
    die("Kann die mtime der Datei beispiel nicht bestimmen.");

  printf("beispiel - %d Byte, %s<br>\n",
    $size,
    strftime("%c", $mtime));

  $result = ftp_get($link, "/tmp/bbb", "beispiel", FTP_BINARY);
  if (!$result)
    die("Download von Datei beispiel fehlgeschlagen.");

  if (!ftp_chdir($link, "/incoming"))
    die("Kann nicht in das Zielverzeiczhnis /incoming wechseln.");

  $result = ftp_put($link, "upload.txt", "/etc/termcap", FTP_BINARY);
  if (!$result)
    die("Upload von Datei termcap fehlgeschlagen.");

  ftp_quit($link);

  printf("Ende.<br>\n");
?> 

Frage: Unix: Welche Zugriffsrechte brauche ich, um eine Datei anzulegen?

Antwort von Kristian Köhntopp:

Um in Unix eine Datei anlegen zu können, benötigt ein Programm x-Rechte an jedem Verzeichnis entlang des Pfadnamens sowie w-Recht an dem Verzeichnis, in dem die Datei angelegt werden soll.

w-Recht an einem Verzeichnis berechtigt nicht nur dazu, eine Datei neu anzulegen, sondern es berechtigt außerdem dazu, die Namen existierender Dateien aus dem Verzeichnis zu entfernen. Dies wird in Unix oft vereinfachend als "das Löschen einer Datei" bezeichnet. Beim Entfernen von Namen aus einem Verzeichnis werden die Rechte an der Datei und ihr Eigentümer nicht geprüft.

Dies ändert sich, setzt man an dem Verzeichnis, in dem sich die Datei befindet, zusätzlich das t-Recht. In diesem Fall können nur der Superuser (genauer: jeder Prozeß der CAP_FOWNER Capability hat), der Eigentümer des Verzeichnisses oder der Eigentümer der Datei noch den Namen aus dem Verzeichnis entfernen.

Um eine existierende Datei zu überschreiben, ist dagegen x-Recht an jedem Verzeichnis entlang des Pfadnamens notwendig, sowie w-Recht an der zu verändernden Datei (oder man hat CAP_FOWNER Capability).

In Apache mit suexec ist es so, dass CGI-Programme mit derjenigen User-ID und Group-ID ausgeführt werden, die für den virtuellen Webserver mit Hilfe der Direktiven User und Group definiert worden sind. CGI-PHP legt also Dateien mit diesen User- und Group-Rechten an und das Zielverzeichnis muss entsprechende Rechte besitzen, damit ein fopen() mit dem Anlegen einer Datei erfolgreich sein kann.

In Apache mit mod_php ist es so, dass der PHP-Interpreter als Bestandteil des Webservers läuft und mit den Rechten des Webservers Dateien anlegt oder löscht. In diesem Fall ist ausschlaggebend, was die globale (serverweite) User - und Group -Direktive für den Webserver festlegt. Das Zielverzeichnis muss für diesen Unix-Benutzer passende Rechte anbieten.

In PHP kann es sein, dass zusätzliche Beschränkungen gelten, die in Kraft treten, falls safe_mode aktiviert ist. Dies kann in CGI-PHP in der php.ini geschehen, in mod_php zusätzlich in <Directory>-Blöcken in der zentralen httpd.conf , jedoch nicht in .htaccess -Dateien.

Es ist empfehlenswert, für jeden virtuellen Webserver eine gesonderte CGI-Identität anzulegen und jedem virtuellen Webserver ein Verzeichnis einzuräumen, das keine URL hat (nicht unterhalb der Document Root liegt) und das nur durch diese CGI-Identität beschreibbar ist. Auf diese Weise kann jeder virtuelle Webserver anwendungsspezifische Daten auf eine Weise speichern, die nicht durch das http-Protokoll erreichbar ist und die nicht durch andere CGI-Programme anderer virtueller Webserver gelesen oder geschrieben werden koennen.

Wird mod_php verwendet, ist ein solcher Schutz nur mit safe_mode erreichbar. Dies birgt jedoch andere Nachteile.

Frage: Wie kann ich mit PHP auf die serielle Schnittstelle zugreifen?

Antwort von Matthias P. Wuerfl:

Da PHP serverseitig interpretiert und ausgeführt wird, ist es nicht möglich, mit PHP auf die serielle Schnittstelle eines Clients zuzugreifen. Allerdings besteht die Möglichkeit, auf die seriellen Schnittstellen des Computers zuzugreifen, auf dem das Script ausgeführt wird. Hierzu müssen jedoch die entsprechenden Rechte gesetzt sein, so dass der PHP-Interpreter oder der Webserver auch darauf zugreifen dürfen.

Windows und Unixe stellen die serielle Schnittstelle im Filesystem zur Verfügung und man kann mit den normalen Dateisystemfunktionen darauf zugreifen. Um Daten an die serielle Schnittstelle zu senden, genügt schon ein sehr kleines Script:

$string = "Hallo Schnittstelle!\n";
$pointer = fopen("/dev/ttyS0","w");
fwrite ($pointer, $string);
fclose($pointer); 

In diesem Beispiel wird die serielle Schnittstelle /dev/ttyS0 zum Schreiben geöffnet, ein String wird hineingeschrieben und die Schnittstelle wird wieder geschlossen. Analog dazu könnte man die Schnittstelle auch zum Lesen öffnen und mit fgets() auf Input warten. Hierbei ist allerdings zu beachten, dass das Script nicht weiterarbeitet, bis nicht eine Zeile eingelesen ist. Können von der seriellen Schnittstelle keine Daten gelesen werden, so stoppt das Script beim fgets() und wartet bis zum Timeout.

Die serielle Schnittstelle kann nicht zum gleichzeitigen Lesen und Schreiben geöffnet werden; jedoch kann ein Script lesend darauf zugreifen, während ein anderes schreibt. Da die seriellen Schnittstellen einen bunten Strauß an Konfigurationsmöglichkeiten kennen, ist die Konfiguration der Schnittstelle auf Betriebssystemebene mitunter etwas kniffelig. Bevor man mit PHP darauf zugreift, sollte man seine Konfiguration mit den Mitteln des Betriebssystems testen, um bei der Erstellung eines PHP-Scriptes eine falsche Schnittstellenkonfiguration als Grund für das Nichtfunktionieren auszuschließen.

Frage: Warum funktioniert unlink() unter Windows nicht?

Antwort von Martin Jansen:

In einigen älteren Versionen von PHP 4 ist die Funktion unlink() unter Windows nicht implementiert, was sich in der Fehlermeldung

Warning: unlink() is not supported in this PHP build in ...
on line ... 

ausdrückt. Abhilfe schafft hier ein Update auf eine aktuelle Version von PHP 4.

Frage: Wie wende ich include() mit verschachtelten Verzeichnissen an?

Antwort von Johannes Frömter:

Mit include("/subdir/foo.php") bindet man ein Script in einem untergeordneten Verzeichnis ein. In foo.php will man nun die ebenfalls in /subdir stehende Datei bar.php einbinden. Ein einfaches include("bar.php") funktioniert nicht, da PHP die Pfadangabe nicht relativ zum Script mit der include() -Anweisung, sondern relativ zum Ursprungsscript benötigt.

Mit Hilfe der Konstanten __FILE__ kann man sich den richtigen Pfad zusammenschrauben:

include(dirname(__FILE__)."/bar.php"); 

Frage: Wie übergebe ich Variablen an eingebundene Dateien?

Antwort von Johannes Frömter:

Gar nicht. Mittels include() oder require() in ein PHP-Programm importierte Scriptteile "erben" automatisch die Variablen, die an dieser Stelle des Scriptes vorhanden sind (siehe auch: Geltungsbereich von Variablen im Manual). Einleuchtend wird dies, wenn man sich vergegenwärtigt, dass durch include() der einzubindende Scriptteil quasi an die Stelle des Befehls kopiert wird.

// $var soll an script.php übergeben werden

// Funktioniert nicht
include('script.php?var=test');

// So geht das
$_GET['var'] = 'test'; // oder bei altem script.php $var = 'test';
include('script.php');

// So geht's bei externen Dateien
include('http://example.com/script.php?var=test'); 

Versucht man bei lokalen Dateien eine Variablenübergabe wie bei HTTP (erstes Beispiel), meldet PHP, dass es die Datei script.php?var=test nicht finden kann - was auch völlig korrekt ist, da es eine Datei mit diesem Namen nicht gibt ...

Antwort von Kerry W. Lothrop:

Beim Übergeben der Parameter durch vorheriges Setzen (also beim Aufruf über das Dateisystem) ist die Methode stark davon abhängig, wie in der eingebundenen Datei auf die externe Variablen zugegriffen wird. Die Variablen sollten dann immer so gesetzt werden, wie sie auch im eingebundenen Skript angesprochen werden, also z.B. $HTTP_GET_VARS['var'] oder $_POST['var'] .

Beim Einbinden externer Dateien, die die Parameter über die Arrays $_POST oder $HTTP_POST_VARS ansprechen, muss ein POST-Request formuliert werden (siehe code-post ).