Capitolo 20. Utilizzo di file remoti

Quando viene abilitato il supporto per l "URL fopen wrapper" durante la configurazione di PHP (avviene automaticamente a meno che si specifichi espressamente il flag --disable-url-fopen-wrapper (per le versioni sino alla 4.0.3) oppure impostare allow_url_fopen a off in php.ini (per le nuove versioni)), si possono usare URL FTP e HTTP con la maggior parte delle funzioni che richiedono nomi di file come parametri, incluse le funzioni require() e include().

Nota: Non si possono usare i file remoti con include() e require() sotto Windows.

Per esempio, si può usare per aprire un file da un web server remoto, elaborare i dati presi da remoto, e usarli per effetuare delle query, o semplicemente visualizzarli con lo stile del proprio sito web.

Esempio 20-1. Legere il titolo di una pagina web remota

<?php
$file = fopen ("http://www.example.com/", "r");
if (!$file) {
    echo "<p>Impossibile aprire il file remoto.\n";
    exit;
}
while (!feof ($file)) {
    $linea = fgets ($file, 1024);
    /* Funziona solo se title e i relativi tag sono sulla medesima riga */
    if (eregi ("<title>(.*)</title>", $linea, $out)) {
        $title = $out[1];
        break;
    }
}
fclose($file);
?>

Si può anche scrivere in un file remoto via FTP se l'utente con cui ci si connette ha le autorizzazioni necessarie, e il file non è già presente. Per connettersi con un utenti specifico si ha bisogno di specificare lo username (e la relativa password) dentro l'URL in questo modo: 'ftp://user:password@ftp.example.com/directory/del/file'. (Si può usare lo stesso tipo di sintassi per accedere a file via HTTP quando richiedono autenticazione).

Esempio 20-2. Salvataggio di dati su server remoto

<?php
$file = fopen ("ftp://ftp.example.com/incoming/outputfile", "w");
if (!$file) {
    echo "<p>Impossibile aprire il file remoto in scrittura.\n";
    exit;
}
/* Scrive i dati qui. */
fputs ($file, $HTTP_SERVER_VARS['HTTP_USER_AGENT'] . "\n");
fclose ($file);
?>

Nota: Dall'esempio precedente ci si può fare un'idea di come usare questa tecnica per effettuare dei log in remoto, ma come già accennato non è possibile scrivere su file già esistenti con questo sitema. Per fare una procedura di log distribuito è più indicata la funzione syslog().