ftp_close()
Функция ftp_close() — встроенная функция PHP для закрытия FTP-соединения. Принимает идентификатор соединения, возвращённый функцией
Что делает ftp_close()
ftp_close() закрывает активное FTP-соединение, ранее открытое с помощью ftp_connect() (или ftp_ssl_connect()). Функция освобождает сетевой сокет и серверный сеанс, чтобы ни одна из сторон не удерживала соединение дольше, чем необходимо.
Вызывайте её после завершения передачи файлов — после операций ftp_get(), ftp_put() или ftp_nlist(). Функция возвращает true при успехе и false при ошибке.
PHP автоматически закрывает FTP-соединение при завершении скрипта, поэтому забытый вызов
ftp_close()не приведёт к утечке сокета навсегда. Тем не менее явный вызов важен в долго работающих скриптах (воркеры, обработчики очередей, циклы, открывающие множество соединений), где нужно немедленно освободить серверный сеанс, не дожидаясь завершения скрипта.
Синтаксис
ftp_close(FTP\Connection $ftp): bool| Параметр | Описание |
|---|---|
$ftp | The connection handle returned by ftp_connect() or ftp_ssl_connect(). |
Начиная с PHP 8.1 дескриптор является объектом
FTP\Connection. В PHP 8.0 и более ранних версиях это былresource. В обоих случаях использование одинаково — вы никогда не обращаетесь к нему напрямую, а просто передаёте в функцииftp_*.
Базовое использование
Полный цикл «подключение → вход → работа → закрытие» выглядит следующим образом:
<?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);Ключевая идея: каждый вызов ftp_connect() должен быть парным с ftp_close(), точно так же, как каждый открытый файл должен быть закрыт.
Проверка возвращаемого значения
ftp_close() возвращает boolean, поэтому можно убедиться, что соединение было корректно освобождено:
<?php
if (ftp_close($ftp)) {
echo "Connection closed successfully.\n";
} else {
echo "Failed to close the connection.\n";
}Безопасное закрытие с try/finally
Если операция между подключением и закрытием выбрасывает исключение или завершается досрочно, строка с ftp_close() может никогда не выполниться. Оборачивание работы в блок try/finally гарантирует закрытие соединения даже при возникновении ошибки:
<?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);
}Это рекомендуемый паттерн для production-кода: блок finally является единственным местом, ответственным за освобождение соединения.
Распространённые ошибки
- Использование дескриптора после закрытия. После выполнения
ftp_close()дескриптор становится недействительным. Любой последующий вызовftp_*с ним завершится ошибкой. - Передача недействительного дескриптора. Если
ftp_connect()завершилась неудачей, она возвращаетfalse, а не соединение. Вызовftp_close(false)вызоветTypeErrorв PHP 8. Проверяйте соединение перед его использованием. - Вызов без параметра.
ftp_close()требует дескриптор соединения; значения по умолчанию не существует.
Итог
ftp_close() завершает FTP-сеанс, открытый функцией ftp_connect(), и возвращает true при успехе. Несмотря на то что PHP закрывает соединение в конце скрипта, явный вызов ftp_close() — в идеале внутри блока finally — поддерживает порядок в долго работающих скриптах и освобождает серверный сеанс сразу после завершения работы. Для изучения остального рабочего процесса смотрите ftp_connect(), ftp_login() и ftp_put().