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| Parametro | Descrizione |
|---|---|
$ftp | L'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 unaresource. Il suo utilizzo è identico in entrambe le versioni — non lo si ispeziona mai direttamente, lo si passa semplicemente alle funzioniftp_*.
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 chiamataftp_*su di esso fallirà. - Passare un handle non valido. Se
ftp_connect()fallisce restituiscefalse, non una connessione. Chiamareftp_close(false)genera unTypeErrorin PHP 8. Verificare la connessione prima di utilizzarla. - Chiamarla senza parametri.
ftp_close()richiede l'handle di connessione; non esiste un valore predefinito.
Riepilogo
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().