W3docs

ftp_close()

La funzione ftp_close() è una funzione built-in di PHP usata per chiudere una connessione FTP. Accetta un identificatore di connessione restituito da

Cosa fa ftp_close()

ftp_close() chiude una connessione FTP attiva aperta in precedenza con ftp_connect() (o ftp_ssl_connect()). Libera il socket di rete e la sessione lato server, in modo che nessuno dei due lati mantenga la connessione aperta più del necessario.

La si chiama una volta terminato il trasferimento dei file — dopo le operazioni ftp_get(), ftp_put() o ftp_nlist(). La funzione restituisce true in caso di successo e false in caso di errore.

PHP chiude automaticamente la connessione FTP al termine dello script, quindi un ftp_close() dimenticato non causerà una perdita permanente del socket. Chiamarla esplicitamente rimane importante negli script a lunga esecuzione (worker, consumer di code, cicli che aprono molte connessioni), dove si desidera rilasciare immediatamente la sessione sul server anziché attendere la terminazione dello script.

Sintassi

ftp_close(FTP\Connection $ftp): bool
ParametroDescrizione
$ftpL'handle di connessione restituito da ftp_connect() o ftp_ssl_connect().

A partire da PHP 8.1 l'handle è un oggetto FTP\Connection. In PHP 8.0 e versioni precedenti era una resource. Il suo utilizzo è identico in entrambe le versioni — non lo si ispeziona mai direttamente, lo si passa semplicemente alle funzioni ftp_*.

Utilizzo di base

Un ciclo completo di connessione → login → operazioni → chiusura è il seguente:

<?php

// Open a connection to the FTP server
$ftp = ftp_connect('ftp.example.com');

// Authenticate
ftp_login($ftp, 'username', 'password');

// Download a file
ftp_get($ftp, 'local-copy.txt', 'remote-file.txt', FTP_BINARY);

// Always close the connection when you are done
ftp_close($ftp);

Il concetto chiave: ogni ftp_connect() dovrebbe essere abbinato a un ftp_close(), proprio come ogni file aperto dovrebbe essere chiuso.

Controllo del valore restituito

ftp_close() restituisce un boolean, quindi è possibile verificare che la connessione sia stata rilasciata correttamente:

<?php

if (ftp_close($ftp)) {
    echo "Connection closed successfully.\n";
} else {
    echo "Failed to close the connection.\n";
}

Chiusura sicura con try/finally

Se un'operazione eseguita tra la connessione e la chiusura genera un'eccezione o termina anticipatamente, la riga ftp_close() potrebbe non essere mai eseguita. Racchiudere il codice in un blocco try/finally garantisce che la connessione venga chiusa anche in caso di errore:

<?php

$ftp = ftp_connect('ftp.example.com');

try {
    ftp_login($ftp, 'username', 'password');
    ftp_get($ftp, 'local.txt', 'remote.txt', FTP_BINARY);
    // ... more operations that might fail ...
} finally {
    // Runs whether the try block succeeded or threw
    ftp_close($ftp);
}

Questo è il pattern consigliato per il codice in produzione: il blocco finally è il punto unico responsabile del rilascio della connessione.

Errori comuni

  • Utilizzare l'handle dopo averlo chiuso. Una volta eseguita ftp_close(), l'handle non è più valido. Qualsiasi successiva chiamata ftp_* su di esso fallirà.
  • Passare un handle non valido. Se ftp_connect() fallisce restituisce false, non una connessione. Chiamare ftp_close(false) genera un TypeError in PHP 8. Verificare la connessione prima di utilizzarla.
  • Chiamarla senza parametri. ftp_close() richiede l'handle di connessione; non esiste un valore predefinito.

ftp_close() termina una sessione FTP aperta da ftp_connect() e restituisce true in caso di successo. Sebbene PHP chiuda la connessione al termine dello script, chiamare ftp_close() esplicitamente — preferibilmente all'interno di un blocco finally — mantiene gli script a lunga esecuzione ordinati e rilascia la sessione sul server non appena il lavoro è completato. Per esplorare il resto del flusso di lavoro, consultare ftp_connect(), ftp_login() e ftp_put().

Esercitazione

Pratica
Qual è il modo corretto di utilizzare la funzione ftp_close() in PHP?
Qual è il modo corretto di utilizzare la funzione ftp_close() in PHP?
Was this page helpful?