Home / Programmazione / PHP / Connessione FTP con PHP
Mattepuffo

Connessione FTP con PHP

Connessione FTP con PHP

Oggi vi propongo una piccola classe per la connessione e il download dei file da un server FTP.

La classe prevede diverse funzioni:

  • changeDir -> cambio directory
  • listFiles -> lista i files di una directory
  • checkExt -> controlla l'estensione
  • download -> scarica i file in locale

Il costruttore della classe sarà una cosa del genere:

    private $server;
    private $username;
    private $password;
    private $connessione;

    public function __construct($server, $username, $password) {
        $this->server = $server;
        $this->username = $username;
        $this->password = $password;
        $this->connessione = ftp_connect($server);
        $login = ftp_login($this->connessione, $username, $password);
        if (!$this->connessione || !$login) {
            echo 'IMPOSSIBILE EFFETTUARE IL LOGIN';

        } else {
            if (!ftp_pasv($this->connessione, TRUE)) {
                echo 'IMPOSSIBILE ATTIVARE PASS MOD';
            }
        }
    }

 

Inizializiamo ciò che ci serve per la connessione, usando le funzioni ftp_connect e ftp_login.

Se il login va a buon fine proviamo ad attivare la modalità passiva con ftp_pasv; senza di questa non sono riuscito a scaricare i file.

La funzione changeDir:

    public function changeDir($dir) {
        if (!ftp_chdir($this->connessione, $dir)) {
            echo '

IMPOSSIBILE ACCEDERE ALLA DIRECTORY

';
        }
    }

 

Usiamo la funzione ftp_chdir, e restituiamo un errore nel caso un cui non sia possibile cambiare directory.

La funzione listFiles:

    public function listFiles() {
        $list = ftp_nlist($this->connessione, '.');
        return $list;
    }

Usiamo la funzione ftp_nlist, che restituisce un array.

ftp_nlist restituisce solo in nomi dei files; se si vuole più info bisogna usare ftp_rawlist.

La funzione checkExt, che ci può servire se vogliamo scaricare file con una determinata estensione:

   public function checkExt($f) {
        $ext = pathinfo($f, PATHINFO_EXTENSION);
        return $ext;
    }

La funzione download:

    public function download($local, $remote) {
        if (!ftp_get($this->connessione, $local, $remote, FTP_BINARY)) {
            echo 'IMPOSSIBILE SCARICARE IL FILE: ' . $remote . '';

        }
    }

 

Usiamo la funzione ftp_get, passandogli la connessione attiva, dove salvare il file in locale, il file remoto da scaricare, e la modalità

Infine il distruttore:

    public function __destruct() {
        ftp_close($this->connessione);
    }

Che si occupa di chiudere la connessione.

A questo punto vediamo un esempio pratico:

$ftp = new Ftp('192.168.1.230', 'user', 'p');
$ftp->changeDir('/file_to_download');
foreach ($ftp->listFiles() as $f) {
    if ($ftp->checkExt($f) == 'txt') {
        $ftp->download('local_dir/' . $f, $f);
    }
}

Direi abbastanza semplice.

Qui ho usato tutto:

  • mi connetto con le credenziali
  • mi sposto in una determinata directory
  • listo i file
  • controllo che abbiamo estensione TXT
  • li scarico in locale

Un uso flessibile direi, in quanto non siamo costretti ad usare tutte le funzioni.

Se ad esempio non avete bisogno di spostarvi, basta che omettiate la riga che fa il comando di cambio directory.

Ciao!!