W3docs

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
ПараметрОписание
$ftpThe 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().

Практика

Практика
Каков правильный способ использования функции ftp_close() в PHP?
Каков правильный способ использования функции ftp_close() в PHP?
Was this page helpful?