Rozdział 20. Korzystanie ze zdalnych plików

Jeżeli PHP zostanie skonfigurowany z włączoną obsługą "URL fopen wrapper", będzie można używać adresów HTTP i FTP w większości funkcji, które jako parametr przyjmują nazwę pliku, włączając w to instrukcje require() i include(). Obsługa "URL fopen wrapper" jest włączona domyślnie, chyba, że dodasz opcję --disable-url-fopen-wrapper do ./configure (w wersjach do 4.0.3) lub ustawisz allow_url_fopen na off w pliku php.ini (w nowszych wersjach).

Notatka: Nie możesz używać zdalnych plików w include() i require() w systemie Windows.

Możesz wykorzystać tę własność aby otworzyć plik na zdalnym serwrze, przetworzyć jego zawartość i użyć wyników w zapytaniu do bazy danych, lub po prostu wyświetlić plik dostosowując jego wygląd do swojej strony.

Przykład 20-1. Pobieranie tytułu zdalnej strony

<?php
$file = fopen ("http://www.php.net/", "r");
if (!$file) {
    echo "<p>Nie można otworzyć zdalnego pliku.\n";
    exit;
}
while (!feof ($file)) {
    $line = fgets ($file, 1024);
    /* Zadziała tylko wtedy, gdy tytuł i jego znaczniki są w tej samej linii */
    if (eregi ("<title>(.*)</title>", $line, $out)) {
        $title = $out[1];
        break;
    }
}
fclose($file);
?>

Możesz również zapisywać pliki na serwerach FTP, jeśli połączysz się jako użytkownik z odpowiednimi prawami dostepu i jeśli plik wcześniej nie istniał. Aby połączyć się jako użytkownik inny niż 'anonymous', musisz przesłać nazwę użytkonika (i najprawdopodobniej hasło) w URLu, np. 'ftp://uzytkownik:haslo@ftp.example.com/sciezka/do/pliku'. Możesz użyć tej samej składni przy dostępie do plików przez HTTP, jeśli wymagana jest autoryzacja.

Przykład 20-2. Zapisywanie danych na zdalnym serwerze.

<?php
$file = fopen ("ftp://ftp.php.net/incoming/outputfile", "w");
if (!$file) {
    echo "<p>Nie można otworzyć zdalnego pliku do zapisu.\n";
    exit;
}
/* Tutaj zapisujemy dane. */
fputs ($file, "$HTTP_USER_AGENT\n");
fclose ($file);
?>

Notatka: Być może powyższy przykład nasunął ci pomysł, by użyć tej metody do zdalnego zapisywania logów, ale, jak wspomniano wyżej, możesz tworzyć jedynie nowe pliki. Aby zrealizować zdalne logowanie powinieneś przyjrzeć się funkcji syslog().