Как проверить существование файла на FTP с помощью PHP-функции file_exists()

Стандартной функции ftp_file_exists() в PHP не существует, а она, вдруг, неожиданно понадобилась. :) При попытке найти изящное решение этого вопроса наткнулся только пару вариантов. В первом предлагалось использовать стандартные функции file_exists() или fopen() с параметром вида ftp://login:password@ftphost/filename, во втором — прибегнуть к помощи CURL или socket. Оба варианта громоздкие, создают новое соединение с FTP и осуществляют авторизацию, что излишне, т.к. на момент проверки мы уже сделали это с помощью ftp_connect() и ftp_login(). Кто-то предлагал использовать ftp_size(), но эта функция проверяет только файлы, а на папках всегда возвращает −1. Не открою Америки, если скажу, что проверить наличие файла или директории на FTP можно сделать довольно изящно с помощью стандартного набора ftp_-функций.

И делается это так (спасибо Никите заподсказку):

array_search($file, ($files = ftp_nlist($ftp, dirname($file)))? $files: array()) !== false

in_array($file, (array)ftp_nlist($ftp, dirname($file)))

Функцией ftp_nlist() получаем список  файлов в папке, где лежит проверяемый файл $file. Папку определяем функцией dirname(). В качестве идентификатора соединения с FTP используем $ftp. Как я уже говорил выше, соединение с FTP у нас уже установлено. Далее, чтобы функция in_array() не «ругалась», приводим полученный список файлов к массиву на случай, если файлов в этом списке не окажется. И, наконец, с помощью функции in_array() проверяем наличие нужного файла в списке файлов.

ПЫЩ: А теперь, внимание! Тест на внимательность! Заметили ли вы, что я так и не ответил на вопрос, заданный в заголовке этого поста? Ответы оставляем в голосовании.

Комментарии

1

Здравствуйте!

У вас есть вопрос или вам нужна помощь?

Спасибо, ваш вопрос принят.

Ответ на него появится на сайте в ближайшее время.