Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рекурсивный обход ftp сервера 
:(
    Опции темы
UserNet
Дата 13.3.2009, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 226
Регистрация: 13.12.2006
Где: Новосибирск

Репутация: нет
Всего: 3



Есть скрипт для обхода содержимого фтп-сервера
Код

 function scan_ftp($link, $dir) 
  { 
    GLOBAL $filename; 
    // Получаем все файлы корневого каталога 
    // Дескриптор соединения $link получен в config.php 
    $file_list = ftp_rawlist($link, $dir); 
    // Выводим содержимое каталога 
    echo "<pre>"; 
    print_r($dir);
    echo "<pre>";
   // print_r($file_list);
    echo "</pre>";
    foreach($file_list as $file) 
    { 
      // Разбиваем строку по пробельным символам 
      list($acc, 
           $bloks, 
           $group, 
           $user, 
           $size, 
           $month, 
           $day, 
           $year,
          $file1) = preg_split("/[\s]+/", $file,-1, PREG_SPLIT_OFFSET_CAPTURE); 

       $file=substr( $file,$file1[1],strlen($file));
     //    echo "<pre>"; 
        // $file=substr( $file,$file1[1],strlen($file));*/
 print_r($month[0]);
 echo " ";
 print_r($day[0]);
 echo " ";
 print_r($year[0]);
 echo " ";
 print_r($dir);
 print_r($file);
  //print_r(strlen($file));
  echo "</pre>"; 
       // Если файл начинается с точки - игнорируем его 
      if($file=="." || $file=="..") continue; 
      // Определяем является ли объект директорией 
      if(substr($acc[0], 0, 1) == 'd') 
      { 
        // Директория 
        /*echo "</pre>"; 
        print_r($dir);
        echo "</pre>"; */
        scan_ftp($link, $dir.$file."/"); 
      } 
      // Определяем является ли объект файлом 
      if(substr($acc, 0, 1) == '-') 
      { 
        // Файл 
        $filename[] = $file." - ".$dir.$file; 
      } 
    } 
  } 


 $ftp_user="anonymous";
 $ftp_pass="[email protected]";
 $str="10.10.16.51";
$ftp_id=ftp_connect($str,21,1); //or die("Couldn't connect");
@ftp_login($ftp_id,$ftp_user,$ftp_pass);
ftp_set_option($ftp_id, FTP_TIMEOUT_SEC, 1000); 
$dir = "/"; 
  // Запускаем сканер 
scan_ftp($ftp_id, $dir);

Товарищи пожалуйста протестируйте у себя. 
На своём фтп сервере, у меня работает, на некоторых других фтп серверах,  переодически возникает, ошибка в foreach, причём закономерности в этой ошибки, я найти не могу.

PM MAIL   Вверх
gta4kv
Дата 13.3.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: нет
Всего: 91



UserNet, какая ошибка?
PM MAIL   Вверх
UserNet
Дата 15.3.2009, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 226
Регистрация: 13.12.2006
Где: Новосибирск

Репутация: нет
Всего: 3



Ситуация вот какая, если я подключаюсь к dlink.ru, то всё замечательно.
А вот к ftp.cisco.com подключаюсь, 
Цитата

Warning: Invalid argument supplied for foreach() in Z:\home\localhost\www\test.php on line 192



PM MAIL   Вверх
nerezus
Дата 17.3.2009, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 2
Всего: 43



 smile 
Цитата

GLOBAL $filename; 

Избавься от таких конструкций в коде. Совсем.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
UserNet
Дата 19.3.2009, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 226
Регистрация: 13.12.2006
Где: Новосибирск

Репутация: нет
Всего: 3



Проблема простая, Таймаут на фтп сервере, я же оттуда ничего не скачиваю, а если фтп, большой, за отведённый таймаут, я не успею его обойти, как решить проблему?
PM MAIL   Вверх
IZ@TOP
Дата 26.3.2009, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: нет
Всего: 73



Посылать ему PING?


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
UserNet
Дата 27.3.2009, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 226
Регистрация: 13.12.2006
Где: Новосибирск

Репутация: нет
Всего: 3



Проблема в том что на некоторых фтп, серверах можно находится только 150 секунд, не скачивая файл, за 150 секунд, я не успеваю, обойти, данный фтп сервер, надо делать реконнект,
как его правильно делать я ещё не придумал.
PM MAIL   Вверх
cia
Дата 8.4.2009, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 15.1.2007

Репутация: нет
Всего: 4



вынеси подключение к серверу в отдельную функцию, осуществляющую подключение и логин и переход на нужный директорий, если это нужно. функция будет возвращать ид коннекта. каждый раз в функции scan_ftp (т.е. при сканировании каждого директрия) проверяй коннект и, если он упал, восстанавливай вызовом созданной функции, т.е. реальная ошибка в строке
$file_list = ftp_rawlist($link, $dir);

Добавлено через 1 минуту и 34 секунды
т.е. она возвращает false, если таймаут
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0678 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.