ftp_delete()
Функция ftp_delete() — встроенная функция PHP для удаления файла на удалённом FTP-сервере. Принимает два параметра.
Функция PHP ftp_delete()
ftp_delete() удаляет один файл с удалённого FTP-сервера. Это FTP-аналог функции unlink() для локальной файловой системы: вы передаёте ей открытое FTP-соединение и путь к файлу, который нужно удалить, а она сообщает, было ли удаление успешным.
На этой странице рассматриваются сигнатура функции, возвращаемое значение, полный рабочий пример, обработка ошибок и типичные ловушки (удаление каталогов, относительные и абсолютные пути, права доступа).
Синтаксис
ftp_delete(FTP\Connection $ftp, string $filename): bool| Параметр | Тип | Описание |
|---|---|---|
$ftp | FTP\Connection | Идентификатор соединения, возвращённый функцией ftp_connect() (или ftp_ssl_connect()). |
$filename | string | Путь к файлу, который нужно удалить на удалённом сервере. |
Примечание: До PHP 8.1 первым аргументом был
resource, возвращаемыйftp_connect(). Начиная с PHP 8.1 это объектFTP\Connection, однако код не изменяется — вы по-прежнему просто передаёте значение, возвращаемоеftp_connect().
Возвращаемое значение
ftp_delete() возвращает:
true— файл успешно удалён.false— удаление не выполнено (файл не существует, недостаточно прав, путь указывает на каталог, либо соединение недействительно).
Поскольку и пустой путь, и любая ошибка приводят к возврату false, всегда явно проверяйте результат, не полагаясь на успех по умолчанию.
Полный пример
Сначала откройте соединение с помощью ftp_connect(), аутентифицируйтесь через ftp_login(), удалите файл, затем закройте сессию с помощью ftp_close():
<?php
// Open an FTP connection (default port 21, 90-second timeout)
$ftp = ftp_connect('ftp.example.com');
if ($ftp === false) {
exit("Could not connect to the FTP server.\n");
}
// Authenticate
if (!ftp_login($ftp, 'username', 'password')) {
ftp_close($ftp);
exit("FTP login failed.\n");
}
// Switch to passive mode — required behind most firewalls/NAT
ftp_pasv($ftp, true);
// Attempt the delete
if (ftp_delete($ftp, '/uploads/old-report.txt')) {
echo "File deleted successfully.\n";
} else {
echo "Failed to delete the file.\n";
}
// Always close the connection
ftp_close($ftp);Обработка ошибок
ftp_delete() выдаёт предупреждение PHP и возвращает false, если не может удалить файл. Надёжная проверка — это булево возвращаемое значение. Используйте ===, чтобы результат не спутать с ложным значением соединения:
<?php
if (ftp_delete($ftp, '/uploads/old-report.txt') === true) {
echo "Deleted.\n";
} else {
echo "Delete failed — check the path, permissions, and that it is a file, not a folder.\n";
}Если вы хотите подавить встроенное предупреждение и вывести собственное сообщение, добавьте перед вызовом @:
<?php
if (@ftp_delete($ftp, $remotePath) === false) {
error_log("ftp_delete failed for: $remotePath");
}Типичные ловушки
- Каталоги — не файлы.
ftp_delete()удаляет только файлы. Для удаления каталога используйтеftp_rmdir()— причём каталог должен быть пустым, поэтому сначала удалите его содержимое (список файлов можно получить с помощьюftp_nlist()). - Относительные пути зависят от текущего каталога. Простое имя вроде
report.txtразрешается относительно текущего рабочего каталога сервера. Предпочтительнее использовать абсолютные пути (/uploads/report.txt) или явно задавать каталог с помощьюftp_chdir(). - Переименование вместо удаления. Если нужно лишь переместить или архивировать файл, используйте
ftp_rename(), а не удаление с последующей повторной загрузкой. - Права доступа. Удаление завершается неявно (возвращает
false), если у FTP-пользователя нет прав на запись/удаление в целевом каталоге.
Итог
ftp_delete() удаляет один файл на удалённом FTP-сервере и возвращает boolean, указывающий на успех операции. Сначала откройте и аутентифицируйте соединение, переключитесь в пассивный режим для совместимости, явно проверьте возвращаемое значение и используйте ftp_rmdir() когда нужно удалить каталог. Полный набор FTP-операций смотрите в справочнике PHP FTP.