Home>Guide>Lavorare su FTP remoto con PHP

Lavorare su FTP remoto con PHP


Lavorare su FTP remoto con PHP

Sapevi che è possibile aprire una connessione FTP utilizzando il linguaggio PHP? Certo che è 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.
Ti interessa sapere come fare?

  • Leggi l'articolo, ti bastano solo 1 minuto, 16 secondi
    Sei di fretta? Scarica il PDF e consultalo quando vuoi!

I parametri necessari

Ovviamente, la connessione FTP ad un server remoto è possibile solamente se si dispone delle credenziali di accesso allo stesso.
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:

<?php

// 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:

<?php

// 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:



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:

<?php

// 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:


Bene, ora sei ufficialmente connesso al server FTP remoto! Ma cosa è possibile fare adesso?


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:

<?php

// 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.

Semplice no?

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:

<?php

// 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:

<?php

// 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
$old_filename = "old_test.txt";
$new_filename = "new_test.txt";

// 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 );

Come sempre, per approfondire l’utilizzo della funzione ftp_rename(), troverai utile:



Altre funzioni utili

Analogamente alle funzioni più utilizzate, già descritte in questa guida, ne esistono altre altrettanto utili per poter lavorare tramite connessione FTP con PHP, eccone alcune:

  • ftp_delete( $ftp_stream, $path ): elimina un file da server remoto;
  • ftp_chmod( $ftp_stream, $mode, $filename ): permette di modificare i permessi di lettura/scrittura di un file presente su server remoto;
  • ftp_mkdir( $ftp_stream, $directory ): consente di creare una nuova cartella su server remoto tramite connessione FTP;

Per una panoramica di tutte le funzioni che puoi utilizzare per gestire risorse tramite connessione FTP in PHP, ti consiglio di leggere:


Cosa aspetti? Non ti resta che iniziare a buttare giù qualche riga di codice!



Ti è piaciuto questo articolo? Regalami un click per ripagarmi dello sforzo



Code4Life ti è stato utile? Sostienici con una donazione!

Dona con PayPal

Hai trovato interessante l’articolo? Allora ti consiglio di leggere:

Come importare i prodotti in WooCommerce

Come importare i prodotti in WooCommerce


Scopri come importare massivamente un gran numero di prodotti in WooCommerce in un solo colpo!

Oppure cerca tra gli articoli correlati


E tu cosa ne pensi? Condividi la tua opinione e discutiamone insieme
La tua email non sarà resa pubblico o utilizzata per inviarti spam, te lo prometto

Iscrivimi alla newsletter per ricevere news ed aggiornamenti
Utilizziamo piattaforme di terze parti per l’invio di newsletter. (Informativa sulla privacy)
Tienimi aggiornato su questo articolo
Ricevi una email di notifica quando qualcuno scriverà un commento a questo articolo. (Informativa sulla privacy)
Ricorda i miei dati per la prossima volta che scriverò un commento
Il tuo nome e la tua email verranno salvati in un cookie in questo browser. (Informativa sulla privacy)