Как проверить существование файла на 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 оценка:
Заметили ли вы, что я не ответил на вопрос, заданный в заголовке?
8 голосов:
Валерий Шостак
Комментарии
Написать новый
2 комментария:
№
Никита
21 сентября 2011 в 12:17
Ответить
№
Валерий Шостак [shostak.ru]
21 сентября 2011 в 12:36
Ответить
Новый комментарий