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 (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.php.net/", "r");
if (!$file) {
    echo "<p>Unable to open remote file.\n";
    exit;
}
while (!feof ($file)) {
    $line = fgets ($file, 1024);
    /* This only works if the title and its tags are on one line */
    if (eregi ("<title>(.*)</title>", $line, $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.test.com/dir/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.php.net/incoming/outputfile", "w");
if (!$file) {
    echo "<p>Unable to open remote file for writing.\n";
    exit;
}
/* Write the data here. */
fputs ($file, "$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().