Zugriff auf entfernte Dateien
Wenn allow_url_fopen
in der php.ini aktiviert ist,
können HTTP- und FTP-URLs bei den
meisten Funktionen verwendet werden, die einen Dateinamen als Parameter
benötigen. Darüber hinaus können URLs in include-,
include_once-, require- und
require_once-Anweisungen verwendet werden (ab PHP
5.2.0 muss dafür allow_url_include
aktiviert sein).
Weitere Informationen zu den Protokollen, die von PHP unterstützt werden,
finden Sie im Abschnitt Unterstützte Protokolle and Wrappers.
Hinweis:
Bis einschließlich PHP 4.0.3 muss PHP mit der Option
--enable-url-fopen-wrapper
konfiguriert worden sein,
damit die URL-Wrapper verwendet werden können.
Hinweis:
Vor PHP 4.3 war mit folgenden Funktionen der Windows-Versionen von PHP
kein Zugriff auf entfernte Dateien möglich: include,
include_once, require,
require_once und die imagecreatefromXXX-Funktionen
der GD- und Image-Funktionen-Erweiterung.
Beispielsweise kann damit eine Datei auf einem anderen Webserver geöffnet
und nach benötigten Daten analysiert werden. Diese Daten können zur Abfrage
einer Datenbank benutzt werden oder passend zum Rest der eigenen Website
ausgegeben werden.
Beispiel #1 Den Titel einer entfernten Seite auslesen
<?php
$datei = fopen ("http://www.example.com/", "r");
if (!$datei) {
echo "<p>Datei konnte nicht geöffnet werden.\n";
exit;
}
while (!feof ($datei)) {
$zeile = fgets ($datei, 1024);
/* Funktioniert nur, wenn Titel und title-Tags in einer Zeile stehen */
if (preg_match ("@\<title\>(.*)\</title\>@i", $zeile, $treffer)) {
$title = $treffer[1];
break;
}
}
fclose($datei);
?>
Auch eine Datei auf einem FTP-Server kann geschrieben werden, vorausgesetzt
man ist als Benutzer mit entsprechenden Zugriffsrechten angemeldet. Auf
diesem Weg können nur neue Dateien angelegt werden. Falls Sie versuchen
eine schon existierende Datei zu überschreiben, wird der
fopen()-Aufruf fehlschlagen.
Um sich statt als 'anonymous' als anderer Benutzer anzumelden, muss ein
Benutzername (und möglicherweise ein Passwort) innerhalb der URL angegeben
werden, wie z.B.
'ftp://benutzer:passwort@ftp.example.com/pfad/zur/datei'.
Die selbe Syntax kann verwendet werden, um auf Dateien via
HTTP zuzugreifen, wenn diese eine
Basic-Authentifizierung benötigen.
Beispiel #2 Daten auf einen entfernten Server speichern
<?php
$datei = fopen ("ftp://ftp.example.com/incoming/outputfile", "w");
if (!$datei) {
echo "<p>Datei konnte nicht zum schreiben geöffnet werden.\n";
exit;
}
/* Schreibe die Daten hier hin. */
fputs ($datei, $_SERVER['HTTP_USER_AGENT'] . "\n");
fclose ($datei);
?>
Hinweis:
Obiges Beispiel könnte dazu verleiten, dieses Verfahren zu benutzen, um
in eine entfernte Log-Datei zu schreiben. Das würde aber leider nicht
funktionieren, weil der fopen()-Aufruf fehlschlagen
würde, wenn die entfernte Datei bereits existiert. Für eine
dezentralisierte Protokollierung sollten Sie sich die Funktion
syslog() anschauen.