Utilizzo di file remoti
Se allow_url_fopen
è abilitato in
php.ini, si possono usare le URL HTTP e FTP
con la maggior parte delle funzioni che
richiedono nomi di file come parametri. Ioltre, le URL possono essere
usate con i comandi include,
include_once, requiree
require_once (da PHP 5.2.0,
allow_url_include deve essere abilitata per questo scopo).
Vedere Supported Protocols and Wrappers per maggiori dettagli sui protocolli supportati dal
PHP.
Nota:
In PHP 4.0.3 e precedenti, al fine di poter utilizzare gli URL wrapper, occorreva
specificare l'opzione di configurazione
--enable-url-fopen-wrapper.
Nota:
Al momento, le versioni Windows di PHP precedenti la 4.3, non supportano
l'accesso remoto ai file con le seguenti funzioni:
include, include_once,
require e require_once
e le funzioni imagecreatefromXXX del modulo
GD and Image Funzioni.
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.
Example #1 Leggere 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). Si possono solamente
creare nuovi file usando questo metodo, se si prova a
sovrascrivere un file che già esiste, fopen() non avrà
successo.
Per connettersi con un utenti diversi da 'anonymous' si ha bisogno di specificare lo username
(e la relativa password) assieme all'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 Basic).
Example #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. */
fwrite ($file, $_SERVER['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, con
questo sitema non è possibile scrivere con fopen()
su file già esistenti. Per fare una procedura di log distribuito è
più indicata la funzione syslog().