In questa breve guida scopriremo una caratteristica interessante di PHP, ossia la sua gestione del protocollo FTP. L'idea di base del nostro progetto è quella di creare dinamicamente in locale i file HTML e le immagini e quindi di uploadarli sul server remoto tramite PHP in modo da mantenere sincronizzate la copia locale e quella remota del sito Web.
FTP in PHP
PHP supporta il protocollo FTP tramite la sua estensione ufficiale che non è altro che un insieme di funzioni e costanti aventi il prefisso ftp_
.
Per capirne il funzionamento dobbiamo tenere presente che una sessione FTP tra un client (in questo caso PHP) e il server (il servizio FTP remoto gestito da un applicativo come ProFTPD, vsftpd eccetera) è uno scambio di comandi e risposte da parte del server.
Dopo aver effettuato il login sull'host specificato fornendo username e password, si comincia ad inviare una serie di comandi al server che in PHP vengono appunto implementati tramite le funzioni che abbiamo appena citato.
Il server esegue il comando e fornisce una risposta sull'esito dell'operazione. PHP gestisce la risposta del server restituendo ad esempio un valore booleano o sollevando un errore (Warning), cosa che ci permette anche di gestire le eccezioni.
Se leggete attentamente questa lista di comandi FTP disponibili dalla shell e li confrontate con le funzioni di PHP, noterete che in PHP è stato solo aggiunto il prefisso ftp_
ma logica e il funzionamento restano inalterati.
I percorsi
La parte su cui spesso si fa confusione e che genera più in errori in assoluto sono i percorsi (path) sul server.
Esistono due tipi di percorsi sui server: relativi e assoluti. Quelli assoluti iniziano con uno slash (/
), quelli relativi lo omettono.
Immaginiamo che un account utente sia /home/utente
e che la directory principale del sito sia /home/utente/public_html
. Se la directory FTP coincide con quella utente, quando lanciamo una sessione FTP e ci autentichiamo, la nostra directory corrente sarà /home/utente
.
Quindi un comando come:
mkdir public_html/images
usa un percorso relativo e funzionerà creando la directory specificata sotto public_html
. Ma se avessimo scritto:
mkdir /public_html/images
il comando sarebbe stato interpretato come un tentativo di accedere ad una directory che non si trova nella directory utente ma addirittura alla base stessa dell'intero filesystem del server, generando ovviamente un errore.
I client FTP
Un ottimo modo per cominciare a prendere familiarità con i comandi FTP è quello di usare un applicativo client FTP che vi permetta di visualizzare tutti i comandi che vengono eseguiti durante una sessione FTP con le relative risposte da parte del server.
FileZilla è un'ottima soluzione per iniziare. Oltre a mostrarvi i dietro le quinte di una sessione FTP, è uno dei pochi client FTP a permettervi di aggiungere delle eccezioni SSL quando lavorate con SFTP, cosa non permessa da molti altri client.
Conclusione
Nei prossimi capitoli avremo modo di esplorare una feature non molto approfondita da parte degli sviluppatori che consente a PHP di gestire le sessioni FTP con server remoti. Tuttavia se si pensa a quanto sia importante sincronizzare i file tra macchine diverse, si capirà la vera importanza di questa caratteristica.