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

Июнь 2011

Стандартной функции 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() проверяем наличие нужного файла в списке файлов.

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

484 просмотра

Оценки

1 оценка:

1100%
00%

Заметили ли вы, что я не ответил на вопрос, заданный в заголовке?

8 голосов:

563%
338%

КомментарииRSS

Написать новый

2 комментария:

  • Никита

    21 сентября 2011 в 12:17 Ссылка на комментарий

    Ох уж эти констроебуторские методы... реально мне пришлось потратить минуту чтобы хотябы визуально понять выражение.

    in_array($file, (array)ftp_nlist( $ftp, dirname($file) ) ) ничем не отличается и понятнее, имхо.

    Ответить

Новый комментарий

Комментарии проходят предварительную модерацию.

Спам, флуд, бессмысленные и оскорбительные сообщения будут удаляться.

* Обязательно для заполнения

* Обязательно для заполнения

Этот адрес не будет отображаться в комментарии.

Введите код, изображённый на картинке.

* Обязательно для заполнения

Ctrl+Enter