Сканер FTP или поиск по FTP-серверу

Часто требуется организовать поиск по FTP-серверу. Для того чтобы поиск осуществлялся быстро, FTP-сервер сканируют и помещают названия всех файлов и пути к ним в один файл или таблицу базы данных. При помощи такого списка осуществлять поиск гораздо проще, нежели сканировать каждый раз весь хост. С другой стороны вам может быть интересно будет просканировать свой собственный FTP-хост чтобы получить представление о его организации. Это позволит оптимизировать или реорганизовать его структуру.

Создадим небольшое Web-приложение, состоящее из двух файлов: config.php (конфигурационный файл, содержащий параметры соединения с FTP-сервером и осуществляющий установку соединения) и index.php, который представляет собой непосредственно FTP-сканер.

 

Конфигурационный файл config.php

<?php 

  // Адрес FTP-сервера 

  $ftp_server = "ftp.server.ru"; 

  // Порт соединения 

  $ftp_port = 21; 

  // Пользователь 

  $ftp_user = "softtime"; 

  // Пароль 

  $ftp_password = ""; 

  // Версия Web-приложение 

  $version = "1.0.0"; 

  // Устанавливаем время исполнения скрипта 120 с 

  @set_time_limit(120); 

  // Пытаемся установить соединение с FTP-сервером 

  $link = ftp_connect($ftp_server); 

  if(!$link) puterror("К сожалению, не удаётся установить соединение с FTP-сервером $ftp_server"); 

  // Осуществляем регистрацию на сервере 

  $login = ftp_login($link, $ftp_user, $ftp_password); 

  //$login = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

  if(!$login) puterror("К сожалению, не удаётся зарегистрироваться на сервере"); 

  // Небольшая вспомогательная функция, которая выводит сообщение об ошибке 

  // в окно браузера 

  function puterror($message) 

  { 

    echo "<center><p class=help>$message</p>"; 

    exit(); 

  } 

?>

Теперь, когда соединение установлено, можно осущестить рекурсивный спуск, по дереву директорий FTP-каталога

 

FTP-сканер index.php

<?php 

  // Устанавливаем соединение с FTP-сервером 

  require_once("config.php"); 

  // Директория на сервере 

  // $dir = "/html/forum/"; 

  $dir = "/"; 

  // Запускаем сканер 

  scan_ftp($link, $dir); 

  // Закрываем соединение с FTP-сервером 

  ftp_close($link); 

  // Результат находится в глобальном массиве $filename 

  echo "<pre>"; 

  print_r($filename); 

  echo "</pre>"; 

  //////////////////////////////////////////////////////// 

  // Рекурсивная функция спуска по дереву 

  // директорий 

  //////////////////////////////////////////////////////// 

  function scan_ftp($link, $dir) 

  { 

    GLOBAL $filename; 

    // Получаем все файлы корневого каталога 

    // Дескриптор соединения $link получен в config.php 

    $file_list = ftp_rawlist($link, $dir); 

    // Выводим содержимое каталога 

    foreach($file_list as $file) 

    { 

      // Разбиваем строку по пробельным символам 

      list($acc, 

           $bloks, 

           $group, 

           $user, 

           $size, 

           $month, 

           $day, 

           $year, 

           $file) = preg_split("/[s]+/", $file); 

      // Если файл начинается с точки - игнорируем его 

      if(substr($file, 0, 1) == '.') continue; 

      // Определяем является ли объект директорией 

      if(substr($acc, 0, 1) == 'd') 

      { 

        // Директория 

        scan_ftp($link, $dir.$file."/"); 

      } 

      // Определяем является ли объект файлом 

      if(substr($acc, 0, 1) == '-') 

      { 

        // Файл 

        $filename[] = $file." - ".$dir.$file; 

      } 

    } 

  } 

?>

Результат помещается в глобальный массив $filename - поместить содержимое которого в файл или таблицу MySQL не составит труда.




Рекомендуем почитать


Комментарии

Сергей

31.05.2016 - 00:42:15

Отличная скрипт, работает!

Добавить комментарий


Ваше имя:


Комментарий:


Введите: Картинка