W3docs

ftp_rmdir()

Функция ftp_rmdir() — встроенная функция PHP для удаления каталога на FTP-сервере. Подробное описание и примеры использования.

Знакомство с функцией PHP ftp_rmdir()

Функция ftp_rmdir() — это встроенная функция PHP, которая удаляет каталог на FTP-сервере. В этой статье мы подробно рассмотрим функцию и предоставим исчерпывающее руководство по её использованию в PHP-проектах.

Что такое ftp_rmdir()?

Функция ftp_rmdir() удаляет каталог на FTP-сервере. Она является аналогом ftp_mkdir(), которая создаёт каталог.

Ключевое ограничение: функция работает только с пустыми каталогами. Если каталог содержит файлы или подкаталоги, вызов завершится неудачей и вернёт false. Чтобы удалить непустой каталог, необходимо сначала удалить его содержимое (см. рекурсивный пример ниже).

Функция принимает два параметра:

  1. ftp — FTP-соединение, возвращённое функцией ftp_connect() (и аутентифицированное с помощью ftp_login()).
  2. directory — путь к удаляемому каталогу.

В случае успеха функция возвращает true, при ошибке — false.

Синтаксис ftp_rmdir()

Сигнатура функции ftp_rmdir():

ftp_rmdir(FTP\Connection $ftp, string $directory): bool

Оба параметра обязательны. Обратите внимание: в PHP 8.1 и выше соединение представлено объектом FTP\Connection; до PHP 8.1 это был resource. Параметр directory — имя (относительно текущего каталога) или абсолютный путь к удаляемому каталогу.

Использование ftp_rmdir()

Чтобы воспользоваться функцией ftp_rmdir(), необходимо сначала установить соединение с FTP-сервером с помощью функции ftp_connect(). Ниже приведён полный пример:

<?php

// Set up an FTP connection
$conn = ftp_connect('ftp.example.com');
if (!$conn) {
    die("Could not connect to FTP server.");
}

// Login with your FTP credentials
if (!ftp_login($conn, 'username', 'password')) {
    die("Login failed.");
}

// Remove the directory
if (ftp_rmdir($conn, '/public_html/testdir')) {
    echo "Directory removed successfully.\n";
} else {
    echo "Directory removal failed. Ensure the directory is empty.\n";
}

// Close the FTP connection
ftp_close($conn);

Пошагово: открываем соединение с помощью ftp_connect() и проверяем его; выполняем вход через ftp_login(); удаляем каталог функцией ftp_rmdir() и выводим результат; затем закрываем соединение функцией ftp_close().

Рекурсивное удаление непустого каталога

Поскольку ftp_rmdir() не работает с непустыми каталогами, удаление дерева папок требует предварительного удаления всех файлов и подкаталогов. Можно получить список содержимого с помощью ftp_nlist(), удалить файлы через ftp_delete() и рекурсивно обойти подкаталоги:

<?php

function ftpRemoveTree($conn, string $dir): bool
{
    // ftp_delete handles files; ftp_rmdir handles (now-empty) directories.
    if (@ftp_delete($conn, $dir)) {
        return true;
    }

    // Not a file — assume it's a directory and clear its contents.
    $items = ftp_nlist($conn, $dir);
    if ($items === false) {
        return false;
    }

    foreach ($items as $item) {
        // Skip the "." and ".." entries some servers return.
        $name = basename($item);
        if ($name === '.' || $name === '..') {
            continue;
        }
        ftpRemoveTree($conn, $item);
    }

    // Directory is empty now, so it can be removed.
    return ftp_rmdir($conn, $dir);
}

Обработка ошибок в ftp_rmdir()

Важно обрабатывать ошибки при использовании ftp_rmdir(). Возврат false означает, что удаление не удалось — чаще всего это происходит, если каталог непустой, не существует или у учётной записи нет необходимых прав. Всегда проверяйте возвращаемое значение, а не рассчитывайте на успех:

<?php

if (!ftp_rmdir($conn, '/public_html/testdir')) {
    echo "Failed to remove directory. Ensure it is empty and you have proper permissions.\n";
}

ftp_close($conn);

Связанные FTP-функции

  • ftp_mkdir() — создать каталог.
  • ftp_delete() — удалить отдельный файл.
  • ftp_nlist() — получить список содержимого каталога.
  • ftp_chdir() — сменить текущий рабочий каталог.
  • ftp_pwd() — получить путь к текущему каталогу.

Заключение

Функция ftp_rmdir() удаляет пустой каталог на FTP-сервере, возвращая true в случае успеха и false при ошибке. Чтобы удалить каталог с файлами, сначала очистите его содержимое — например, с помощью рекурсивного вспомогательного метода из примера выше. В сочетании с тщательной проверкой возвращаемых значений это надёжный инструмент для управления структурой удалённых каталогов из PHP.

Практика

Практика
Какова цель функции FTP_RMDIR в PHP?
Какова цель функции FTP_RMDIR в PHP?
Was this page helpful?