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), 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>Errore nell'apertura del file remoto.\n";
    exit;
  }
  while (!feof($file)) {
    $line = fgets($file, 1024);
    /* Funziona solo se i tag del titolo sono sulla stessa linea. */
    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>Errore nell'apertura del file remoto in scrittura.\n";
    exit;
  }
  /* Scrittura del file. */
  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().