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

Автор: content Воскресенье, Апрель 8th, 2012 Нет комментариев

Рубрика: Язык PHP

Часто требуется организовать поиск по 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>$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 не составит труда. Более подробно приёмы работы с FTP-сервером обсуждаются в наших книгах.

Автор: IT-студия SoftTime (softtime.ru)

Источник: http://www.php.su/articles/?cat=examples&page=056

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты