Kapitel 20. Zugriff auf entfernte Dateien

Wenn die Unterstützung für den "URL fopen wrapper" bei der Konfiguration von PHP vorhanden ist (welche standardmäßig eingestellt ist, es sei denn, die Option --disable-url-fopen-wrapper wurde bei der Installation verwedent (Versionen bis 4.0.3) oderr der Parameter allow_url_fopen in der php.ini ausgestellt wurde (neuere Versionen), können HTTP und FTP URLs bei den meisten Funktionen verwendet werden, die einen Dateinamen als Parameter benötigen, inklusive require() und include() Anweisungen.

Anmerkung: remote files funktionieren nicht mit include() und require() Anweisungen unter Windows.

Zum Beispiel kann eine Datei auf einem anderen Webserver geöffnet werden, parse the output for the data you want, and then use that data in a database query, or simply to output it in a style matching the rest of your website.

Beispiel 20-1. Den Titel einer entfernten Seite auslesen


<?php
$file = fopen ("http://www.php.net/", "r");
if (!$file) {
    echo "<p>Datei konnte nicht ge&uuml;ffnet werden.\n";
    exit;
}
while (!feof ($file)) {
    $line = fgets ($file, 1024);
    /* Funktioniert nur, wenn Titel und title-Tags in einer Zeile stehen */
    if (eregi ("<title>(.*)</title>", $line, $out)) {
        $title = $out[1];
        break;
    }
}
fclose($file);
?>

    

Auch eine Datei auf einem FTP-Server kann geschrieben werden, solange man sich über einen Benutzer mit entsprechenden Zugriffsrechten verbindet und die Datei noch nicht existiert. Um sich mit einem anderen Benutzer als 'anonymous' zu verbinden muß ein username (und möglichst ein Passwort) innerhalb der URL angegeben werden, wie z.B. 'ftp://user:password@ftp.example.com/pfad/zur/datei'. (Die selbe Syntax kann verwendet werden, um auf Daten via HTTP zuzugreifen, wenn diese eine Basic Authentication benötigen.)

Beispiel 20-2. Daten auf einen entfernten Server speichern


<?php
$file = fopen ("ftp://ftp.php.net/incoming/outputfile", "w");
if (!$file) {
    echo "<p>Datei konnte zum schreiben nicht ge&ouml;ffnet werden.\n";
    exit;
}
/* Schreibe die Daten hier hin. */
fputs ($file, "$HTTP_USER_AGENT\n");
fclose ($file);
?>
  
    

Anmerkung: You might get the idea from the example above to use this technique to write to a remote log, but as mentioned above, you can only write to a new file using the URL fopen() wrappers. To do distributed logging like that, you should take a look at syslog().