L'invio di file verso remoto tramite le funzioni di PHP dedicate al protocollo FTP è un'operazione abbastanza semplice; in questo breve articolo mostreremo uno script in grado di connettersi e autenticarsi ad un server FTP e di inviare un file nella root del nostro spazio Web.
Innanzitutto dovremo indicare i dati necessari alla connessione, questi sono quelli classici: indirizzo FTP, nome dell'utente autorizzato e relativa password.
In secondo luogo definiremo due variabili che verranno valorizzate con il nome del file da uploadare e il nome che lo stesso file acquisirà una volta inviato in remoto.
Nel caso specifico il file da uploadare si trova sullo stesso percorso della pagina contenente lo script, mentre il precorso di destinazione è quello più semplice: la root dello spazio Web.
La connessione al server FTP avviene attraverso una funzione nativa apposita denominata ftp_connect(), questa richiede come parametri il nome del host a cui si desidera connettersi e la "porta di ascolta" che il server utilizza per le chiamate, generalmente si tratta della porta "21".
ftp_login() è invece la funzione che ci permette di autenticarci con il server FTP, essa accetta come parametri i dati di connessione definiti all'inizio del nostro listato.
Una volta connnessi e autenticati, la funzione ftp_put() si occuperà dell'invio del file a destinazione; da notare l'utilizzo del parametro FTP_ASCII che specifica il tipo di upload, usando il formato ASCII (American Standard Code for Information Interchange, cioè "Codice Standard Americano per lo Scambio di Informazioni") eviteremo infatti che il file possa subire delle alterazioni durante il trasferimento.
Se l'upload ha avuto successo, sarà possibile anche impostare i permessi sul file di destinazione, per questa evenienze PHP 5 ci mette a disposizione l'apposita funzione ftp_chmod(); resta però il problema per coloro che lavorano con macchine dotate di versioni più datate di PHP, quindi è stato necessario definire un'apposita funzione (chiamata sempre ftp_chmod()) che consengua lo stesso risultato.
Una volta impostati i permessi desiderati, sarà possibile chiudere la connessione al server FTP con l'apposita funzione ftp_close().
Di seguito riportiamo il codice completo della nostra applicazione con tanto di commenti esplicativi.
<?php // dati di connessione al server FTP $server = 'ftp.mrwebmaster.it'; $username = 'username'; $password = 'password'; // indichiamo all'applicazione il file locale da uploadare // e il suono nome nel percorso di destinazione $file = 'file.txt'; $percorso_ftp = 'nuovo.txt'; // connettiamoci al server FTP // generalmente in ascolto alla posta 21 $connessione = ftp_connect($server, 21) or die ('Impossibile connettersi al server.'); // autentichiamoci al server ftp_login($connessione, $username, $password) or die('Username o password errati.'); // nel caso ce ne sia la necessità abilitiamo // il passive mode, //diversamente potremo commentare la riga seguente ftp_pasv ($connessione, true); // uploadiamo il file $invia = ftp_put($connessione, $percorso_ftp, $file, FTP_ASCII); // notifica dell'esito dell'upload echo (!$invia) ? 'Upload fallito' : 'Upload completato'; echo '<br>'; // questa funzione sostituisce ftp_chmod // per chi utilizza versioni di PHP inferiori alla 5 if (!function_exists('ftp_chmod')) { function ftp_chmod($invio_ftp, $c_mode, $nome_file){ return ftp_site ( $invio_ftp, sechof('CHMOD %o %s', $c_mode, $nome_file) ); } } // rendiamo il file scrivibile con il chmod 0666 if (ftp_chmod($connessione, 0666, $percorso_ftp) !== false) { echo $percorso_ftp . ' Permessi aggiornati correttamente'; } else { echo 'Impossibile impostare i permessi su ' . $file; } // chiudiamo la connessione al server FTP ftp_close($connessione); ?>