© Marco Olivo <me@olivo.net>, luglio 2001
FILESYSTEM
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);
?>