FTP поиск, функция ftp_nlist

Lazarius

Новичок
FTP поиск, функция ftp_nlist

Здраствуйте уважаемые кодеры. Есть вопрос по реализации FTP поиска (точнее поиска по ftp серверам).

Вобщем то нужно получить список всех файлов во всех директориях сервера, ну и, желательно, с путями. Использовать видимо надо функции ftp_rawlist и ftp_nlist
Но что то ни как не могу сообразить как это всё скомпоновать.

Есть у кого какие соображения? Заранее благодарен за помощь.
 

SiMM

Новичок
В мануале есть примеры использования этих функций. Будут конкретные вопросы, не освещённые в мануале - задавай.
 

white phoenix

Новичок
конкретный пример кода не приведу т.к. это твоя задача, но объясню принцип. советую индексировать содержание, т.к. каждый раз по всем серверам идти со свечкой давольно медленно. мы лучше один раз пройдем, возьмем на карандаш содержание, устало глянем на time() и запишем результат. а потом будем повторять раз в час наш поход. т.е. открываешь соеденение с сервером, читаешь очередной элемент каталога, если это каталог, то запускаешь ту же хрень относительно этого каталога, а если файл то пишешь в базу полный путь до него, а также аттрибуты. рекурсия получается. когда закончишь у тебя в базе будут все названия файлов, и ты без труда сможешь делать поиск. помнишь мы смотрели на time() ? дык вот, сравниваем time() > $lastsearch + 60*60, если истина, то запускаем индексацию снова. где 60*60 там время в секундах, задержка между индексациями, 60*60 это час. в далеком 2001 году я писал нечто подобное для одного мусье, но исходник не сохранился. смотри парафином хард не испорти :)
 

agent-mega

Guest
Доброго времени суток, господа.
Я решил не создавать новую тему, а написать в этой же, так как у меня вопрос по той же функции.
Дело вот в чём: требуется скачать все _файлы_ из какой-то директории на FTP сервере. Не вопрос:
PHP:
<?
$FTP_USER_NAME=root;
$FTP_USER_PASS=dljkfhd;
$FTP_SERVER="ftp.server.ru";
$FTP_PATH="/Dir";
$CONN_ID=ftp_connect($FTP_SERVER);
ftp_login($CONN_ID, $FTP_USER_NAME, $FTP_USER_PASS);
ftp_chdir($CONN_ID, $FTP_PATH);
$FILE_LIST=ftp_nlist($CONN_ID, ".");
for ($I=0; $I<=count($FILE_LIST); $I++) {
ftp_get($CONN_ID, "/path/to/blah/".$FILE_LIST[$I], $FILE_LIST[$I], FTP_BINARY);
}
ftp_close($CONN_ID);
?>
Думаю, комментарии излишни - получаем с помощью ftp_nlist массив, содержащий список файлов в директории, и натравливаем на каждый его элемент ftp_get. Но проблема заключается в том, что в этот самый массив попадают не только файлы, но и поддиректории в этой директории. И они тоже скачиваются! Правда, по дороге они превращаются в одноимённые файлы :) Т.е., была папка там "papka", мы на неё ftp_get, получили локальный файл "papka"... Конечно, такое положение меня не устраивает, тем более, что несмотря на успех операции под конец вылезает какая-то ошибка... Вообщем, хотелось бы узнать, как сделать так, чтобы в массив, отдаваемый ftp_nlist, попадали только ФАЙЛЫ?
 

SiMM

Новичок
> $FTP_USER_NAME=root;
Для начала - [m]language.types.string[/m]

> как сделать так, чтобы в массив, отдаваемый ftp_nlist, попадали только ФАЙЛЫ?
[m]ftp_rawlist[/m]
 

agent-mega

Guest
>Для начала - language.types.string
Если вы о кавычках, то у меня без них всё прекрасно работает. PHP 5.

>ftp_rawlist
Что ftp_rawlist? Это та же самая ftp_nlist, только для получения списка файлов она использует команду ftp "LIST", а при параметре recursive - "LIST -R". Больше она никаких параметров, так же, как и ftp_nlist, не имеет.
Пожалуйста, подскажите реальное решение.
 

SiMM

Новичок
> то у меня без них всё прекрасно работает
Это заблуждение.

> Пожалуйста, подскажите реальное решение.
Если бы вы читали материал по ссылке, вы бы его сами нашли.

> чтобы в массив, отдаваемый ftp_nlist, попадали только ФАЙЛЫ?
Ничто не мешает вам отфильтровать ненужное.
 

agent-mega

Guest
>Это заблуждение.
Возможно, но тем не менее это так. Пока дело не касается строк, состоящих не только из букв, конечно.
>Если бы вы читали материал по ссылке, вы бы его сами нашли.
Господин SiMM! Я конечно понимаю, что вам хочется наставить бестолковых новичков на "путь истинный", но я читал о ftp_rawlist ещё до обращения на этот форум. Ещё раз утверждаю, что она ничем не лучше ftp_nlist в моём случае. Если я не прав, докажите обратное.
>Ничто не мешает вам отфильтровать ненужное
Вот как раз это я и хочу узнать - как это сделать? Если бы я знал, я бы не спрашивал, так ведь?
 

SiMM

Новичок
> Возможно, но тем не менее это так.
То что вы прячете ошибки от самого себя ещё не значит, что их нет.
PHP:
error_reporting(E_ALL);
ini_set('display_errors',1);
> она ничем не лучше ftp_nlist в моём случае
Вообще-то я не слепой. И если вы упорствуете - я ещё раз повторю - может вы наконец ЗАГЛЯНЕТЕ в мануал? Почему я вас должен уговаривать сделать это? Там есть МАССА примеров. Разобраться, как они работают, и сделать то, что вам надо - вполне посильная для самостояетльного решения задача.
 

agent-mega

Guest
>Вообще-то я не слепой.
Об этом речь не шла.
>И если вы упорствуете - я ещё раз повторю - может вы наконец ЗАГЛЯНЕТЕ в мануал?
Я не упорствую - я вам ещё раз говорю - я внимательно просмотрел все маны по функциям "ftp_". И примеры тоже.
>Там есть МАССА примеров.
В мануале по ftp_rawlist всего один пример. Равно как и по ftp_nlist. Причём эти примеры абсолютно ничего полезного для меня не содержат.
Я вам ещё раз говорю, что получить массив, _не_содержащий_директории_, средствами лишь функций "ftp_" невозможно.
А обратное вы мне так и не доказали.

Если же вы, посылая меня читать маны, имеете ввиду ВООБЩЕ ВСЕ МАНЫ по php, тогда извините. Я больше не буду вас беспокоить.
Я думал задать (и задал) конкретный, грамотно сформулированный вопрос, ответа на который в манах по интересующим меня функциям нет, и получить если не конкретный ответ, а хотя бы намёк, в каком направлении копать, но получил лишь какие-то разглагольствования и препирания.
 

SiMM

Новичок
> В мануале по ftp_rawlist всего один пример.
Да неужели?

> Если же вы, посылая меня читать маны, имеете ввиду ВООБЩЕ ВСЕ МАНЫ по php
Кажется я вам дал конкретную ссылку. В мануале помимо официального примера есть туева хуча пользовательских. Хотя если иметь представление о том, что же значит drwxr-x--- в результате - то они вам даже не понадобятся.
 
Сверху