Sapevi che è possibile aprire una connessione FTP utilizzando il linguaggio PHP? E’
possibile ed è una pratica davvero molto utile per lavorare file o cartelle presenti su server remoti.
Grazie alle funzioni presenti di default nella libreria PHP, puoi gestire in pieno controllo files e cartelle presenti su un server remoto di cui hai un account FTP.
Sono necessari i parametri necessari
Per entrare in connessione FTP con root di un’altro sito ti servono le credenziali di accesso allo stesso. Quindi ti occorrono:
• HOST: l’indirizzo IP oppure il nome host a cui connettersi
Esempio: ftp://nomedelsito.com
• USER: il nome utente dell’account FTP con cui si desidera connettersi
• PASSWORD: la password di accesso dell’account con cui si desidera connettersi
Iniziamo quindi proprio con il dichiarare le variabili necessarie da
utilizzare per la connessione:
// Parametri di accesso al server remoto tramite FTP $ftp_host = "ftp://nomedelsito.com"; $ftp_username = "nome_utente"; $ftp_password = "password_di_accesso";
Il primo passo è compiuto, abbiamo preparato il terreno per effettuare la tua prima connessione FTP tramite PHP, ora hai la possibilità di connetterti al server FTP utilizzando due funzioni già incluse nella libreria PHP: ftp_connect() e ftp_login().
Connessione al server
La prima funzione, ftp_connect(), si occupa di aprire una comunicazione con un server remoto ed accetta tre parametri, di cui il primo è obbligatorio:
• $host: l’indirizzo del server verso cui aprire la connessione;
• $port: la porta di comunicazione del server attraverso cui aprire la connessione. Se non specificato, la funzione utilizzerà la porta di default per FTP, ovvero 21;
• $timeout: il tempo massimo di attesa senza operazioni entro cui la connessione viene mantenuta aperta. Se non specificato, il timeout verrà impostato a 90 secondi;
La funzione ftp_connect() restituisce uno stream FTP in caso di successo, oppure il valore bollano false in caso di errore di connessione.
La teoria è sempre noiosa, lo so, ma è necessario avere le basi prima di provare! Passiamo ora alla pratica; riprendendo quanto già visto nel primo paragrafo circa le variabili necessarie, avrai:
// Parametri di accesso al server remoto tramite FTP $ftp_host = "ftp://nomedelsito.com"; $ftp_username = "nome_utente"; $ftp_password = "password_di_accesso"; // Stabilisce la connessione al server remoto tramite FTP $ftp = ftp_connect( $ftp_host ); // Controlla se la connessione è andata a buon fine if ( ! $ftp ) { echo "Connessione FTP fallita."; exit; } // Chiude la connessione FTP ftp_close( $ftp_stream );
In questo modo, lo script tenta di aprire una connessione FTP verso il server host ed in caso di errore, termina la sua esecuzione visualizzando un avviso di connessione fallita.
Per approfondire il funzionamento della funzione ftp_connect(), dai un’occhiata qui:
La funzione ftp_connect()
Login al server
Se la connessione va a buon fine, vuol dire che il server host ci ha risposto ed è disponibile a
dialogare con lo script, ma per farlo è necessario “farsi riconoscere”. La seconda funzione
menzionata in precedenza, ftp_login(), si occupa appunto di effettuare l’accesso al server, tramite
la coppia username/password.
La funzione ftp_login(), accetta tre parametri, tutti obbligatori:
• $ftp_stream: la risorsa FTP che identifica la connessione al server FTP, ottenuta in
precedenza dalla funzione ftp_connect();
• $username: il nome utente dell’account con cui di desidera accedere;
• $password: la password di accesso relativa all’account con cui di desidera accedere;
La funzione ftp_login() restituisce i valori booleani true oppure false a seconda se l’accesso va a
buon fine o fallisce.
Aggiungiamo un altro mattoncino allo script precedente, ottenendo:
// Parametri di accesso al server remoto tramite FTP $ftp_host = "ftp://nomedelsito.com"; $ftp_username = "nome_utente"; $ftp_password = "password_di_accesso"; // Stabilisce la connessione al server remoto tramite FTP $ftp = ftp_connect( $ftp_host ); // Controlla se la connessione è andata a buon fine if ( ! $ftp ) { echo "Connessione FTP fallita."; exit; } // Effettua il login al server remoto tramite FTP $ftp_login = @ftp_login( $ftp_stream, $ftp_username, $ftp_password ); // Controlla se il tentativo di login è andato a buon fine if ( ! $ftp_login ) { echo "Login FTP fallito."; exit; } // Chiude la connessione FTP ftp_close( $ftp_stream );
Hai notato il simbolo “@” alla riga 18, prima della chiamata alla funzione ftp_login()? A cosa serve?
Il simbolo “@” prima della chiamata ad una funzione in PHP è utilizzato per “silenziare” gli eventuali
errori minori (notices/warnings) generati dalla funzione. In questo caso, visto che la funzione
ftp_login() restituisce un warning in caso di insuccesso nel login, con il simbolo “@” previeni la
visualizzazione del messaggio di warning, molto molto fastidiosa.
Per approfondire il funzionamento della funzione ftp_login(), puoi leggere:
Download di un file dal server remoto FTP
Una delle operazioni più utilizzate è sicuramente il download di un file tramite FTP. La funzione da utilizzare è ftp_get(), che accetta cinque parametri, di cui i primi tre obbligatori:
• $ftp_stream: la risorsa FTP che identifica la connessione al server FTP, ottenuta in
precedenza dalla funzione ftp_connect();
• $local_file: il percorso locale del file da prelevare;
• $remote_file: il percorso sul server remoto in cui è presente il file, completo del nome del file;
• $mode: la modalità di trasferimento del file. Può essere FTP_ASCII o FTP_BINARY;
• $resumepos: la posizione in cui iniziare il download del file;
La funzione ftp_get() restituisce i valori booleani true oppure false a seconda se il download va a
buon fine o fallisce.
Nel caso tu voglia effettuare il download di un file da server remoto FTP, lo script diventa:
// Parametri di accesso al server remoto tramite FTP $ftp_host = "ftp://nomedelsito.com"; $ftp_username = "nome_utente"; $ftp_password = "password_di_accesso"; // Stabilisce la connessione al server remoto tramite FTP $ftp = ftp_connect( $ftp_host ); // Controlla se la connessione ¨ andata a buon fine if ( ! $ftp ) { echo "Connessione FTP fallita."; exit; } // Effettua il login al server remoto tramite FTP $ftp_login = @ftp_login( $ftp_stream, $ftp_username, $ftp_password ); // Controlla se il tentativo di login è andato a buon fine if ( ! $ftp_login ) { echo "Login FTP fallito."; exit; } // Imposta le variabili relative al file da gestire $remote_file = "remote_test.txt"; $local_file = "downloads/local_test.txt"; // Tenta di prelevare il file da server remoto FTP $ftp_get_response = ftp_get( $ftp_stream, $local_file, $remote_file ); // Controlla se il tentativo di download è andato a buon fine if ( $ftp_get_response ) { echo "Download completato con successo"; } else { echo "Si è verificato un errore nel download del file"; } // Chiude la connessione FTP ftp_close( $ftp_stream );
In questo esempio, abbiamo effettuato il download del file remote_test.txt presente nella root del
server remoto nella cartella downloads/ del server locale, rinominandolo in local_test.txt.
Per approfondire il funzionamento della funzione ftp_get(), puoi leggere:
Upload di un file sul server remoto FTP
Per trasmettere un file da un server ad un altro tramite FTP, la funzione da impiegare è ftp_put(),
che, analogamente ad ftp_get(), utilizza cinque parametri, di cui i primi tre obbligatori:
• $ftp_stream: la risorsa FTP che identifica la connessione al server FTP, ottenuta in
precedenza dalla funzione ftp_connect();
• $remote_file: il percorso sul server remoto in cui posizionare il file, completo del nome del
file;
• $local_file: il percorso locale del file da uploadare;
• $mode: la modalità di trasferimento del file. Può essere FTP_ASCII o FTP_BINARY;
• $startpos: la posizione in cui iniziare l’upload del file;
La funzione ftp_put() restituisce i valori booleani true oppure false a seconda se l’upload va a buon
fine o fallisce.
Nel caso tu voglia effettuare l’upload di un file su server remoto FTP, lo script diventa:
// Parametri di accesso al server remoto tramite FTP $ftp_host = "ftp://nomedelsito.com"; $ftp_username = "nome_utente"; $ftp_password = "password_di_accesso"; // Stabilisce la connessione al server remoto tramite FTP $ftp = ftp_connect( $ftp_host ); // Controlla se la connessione è andata a buon fine if ( ! $ftp ) { echo "Connessione FTP fallita."; exit; } // Effettua il login al server remoto tramite FTP $ftp_login = @ftp_login( $ftp_stream, $ftp_username, $ftp_password ); // Controlla se il tentativo di login è andato a buon fine if ( ! $ftp_login ) { echo "Login FTP fallito."; exit; } // Imposta le variabili relative al file da gestire $remote_file = "uploads/remote_test.txt"; $local_file = "local_test.txt"; // Tenta di caricare il file su server remoto FTP $ftp_put_response = ftp_put( $ftp_stream, $remote_file, $local_file ); // Controlla se il tentativo di upload è andato a buon fine if ( $ftp_put_response ) { echo "Upload completato con successo"; } else { echo "Si è verificato un errore nell'upload del file"; } // Chiude la connessione FTP ftp_close( $ftp_stream );
In questo esempio, abbiamo effettuato l’upload del file local_test.txt presente nella stessa cartella
dello script nella cartella del server remoto uploads/, rinominandolo in remote_test.txt.
Per approfondire il funzionamento della funzione ftp_put(), puoi leggere:
Rinominare un file dal server remoto FTP
Un’altra funzione utile per lavorare con FTP e PHP è sicuramente ftp_rename() che permette di
modificare il nome di un file presente su un server remoto. Accetta tre parametri, tutti obbligatori:
• $ftp_stream: la risorsa FTP che identifica la connessione al server FTP, ottenuta in
precedenza dalla funzione ftp_connect();
• $oldname: il nome del file da rinominare, completo di percorso;
• $newname: il nuovo nome che si desidera dare al file;
La funzione ftp_rename() restituisce i valori booleani true oppure false a seconda se la modifica del
nome va a buon fine o fallisce.
Uno script di esempio per rinominare un file remoto tramite FTP potrebbe essere:
$ftp_host = "ftp://nomedelsito.com"; $ftp_username = "nome_utente"; $ftp_password = "password_di_accesso"; // Stabilisce la connessione al server remoto tramite FTP $ftp = ftp_connect( $ftp_host ); // Controlla se la connessione è andata a buon fine if ( ! $ftp ) { echo "Connessione FTP fallita."; exit; } // Effettua il login al server remoto tramite FTP $ftp_login = @ftp_login( $ftp_stream, $ftp_username, $ftp_password ); // Controlla se il tentativo di login è andato a buon fine if ( ! $ftp_login ) { echo "Login FTP fallito."; exit; } // Imposta le variabili relative al file da gestire $old_filename = "old_test.txt"; $new_filename = "new_test.txt"; Pagina 10 di 12 https://code4life.it/guide/lavorare-su-ftp-remoto-con-php/ // Tenta di rinominare il file su server remoto FTP $ftp_rename_response = ftp_rename( $ftp_stream, $old_filename, $new_filename ); // Controlla se il tentativo di rinomina è andato a buon fine if ( $ftp_rename_response ) { echo "File rinominato con successo"; } else { echo "Si è verificato un errore nel rinominare il file"; } // Chiude la connessione FTP ftp_close( $ftp_stream );