Introduciamo ora
qualche funzione che ci può venire in aiuto quando dobbiamo
manipolare files presenti sul nostro spazio web oppure
vogliamo recuperare files da remoto.
Il PHP, rispetto
ad altri linguaggi, permette infatti con una singola chiamata
non solo di recuperare (e quindi poter leggere/scrivere) un
file locale, ma anche di recuperare un file che sia su un
altro spazio web oppure su un server FTP in maniera
trasparente, vale a dire senza dover utilizzare altre
chiamate.
* fopen()
Anzitutto, prima di poter leggere o scrivere un file è
necessario aprirlo. Questa funzione, che accetta due parametri
di input (il nome del file e il tipo di operazione -
lettura/scrittura/append e altre combinazioni) ritorna il
descrittore del file, descrittore che utilizzeremo per fare le
altre successive operazioni.
Questa funzione,
come già anticipato, permette di aprire anche un file remoto
messo su uno spazio web (e quindi recuperabile tramite il
protocollo HTTP) o su server FTP; tutto questo permanendo
identica la sintassi: la funzione si comporterà diversamente a
seconda del nome di file passatole (se inizierà con http://
tenterà di recuperare il file dal webserver remoto; se
inizierà per ftp:// tenterà di prenderlo dal server FTP
remoto; altrimenti lo considererà come un file locale).
Le modalità di apertura di un file sono le seguenti:
'r' - apre il file per la sola lettura e sistema la "testina"
di lettura all'inizio del file
'r+' - apre il file per lettura/scrittura, posizionando la
testina all'inizio del file
'w' - apre il file per la scrittura, troncandone il contenuto
se esiste; se non esiste tenta di crearlo; mette la testina
all'inizio
'w+' - idem come 'w', ma lo apre per la lettura/scrittura
'a' - apre il file per la sola scrittura, mettendo però la
testina a fine file
'a+' - come sopra, ma lo apre per la lettura/scrittura
Es.
$fp = fopen("/home/marco/file.txt", "r");
$fp = fopen("http://www.sito.com/", "r");
$fp = fopen("ftp://user:password@sito.com/", "w");
($fp è quello che viene chiamato "file handle" o, in italiano,
"descrittore di file")
* fgets()
Questa chiamata permette di leggere da un file aperto un certo
numero di caratteri specificati. Tale funzione ha la
particolarità di terminare prima di aver letto i caratteri
specificati se incontra un newline (o un "fine file")
Utile per la lettura di linee singole da un file
* fputs()
Opposto della funzione fgets(), questa chiamata permette di
scrivere in un file una data stringa. La posizione nella quale
tale stringa verrà scritta dipende solamente dalla posizione
corrente della testina di scrittura.
* fseek()
Questa funzione permette di spostare la testina di
lettura/scrittura del file corrente in una certa posizione.
Accetta in input due parametri: il descrittore di file e la
posizione.
Notare che non funziona su files remoti (http:// o ftp://) ma
solo su files locali
* fclose()
Chiude il descrittore di file passatole
Il seguente esempio esegue una copia di un file in un altro
(esempio puramente didattico: in PHP esiste la funzione copy()
che esegue la copia di due files):
Es.
<?PHP
$fp1 = fopen('leggi.txt', 'r');
$fp2 = fopen('scrivi.txt', 'w');
while ($buf = fgets($fp1, 4096)) {
fputs($fp2, $buf);
}
fclose($fp1);
fclose($fp2);
?>