Основы PHP
  Что такое PHP?
  Возможности PHP
  Преимущества PHP
  История развития
  Что нового в PHP5?
  «Движок» PHP
  Переход на PHP 5.3
New Переход на PHP 5.6
  Введение в PHP
  Изучение PHP
  Основы CGI
  Синтаксис PHP
  Типы данных PHP
  Переменные в PHP
  Константы PHP
  Выражения PHP
  Операторы PHP
  Конструкции PHP
  Ссылки в PHP
  PHP и ООП
  Безопасность
  Функции PHP
  Функции по категориям
  Функции по алфавиту
  Стандартные функции
  Пользовательские
  PHP и HTTP
  Работа с формами
  PHP и Upload
  PHP и Cookies
  PHP и базы данных
  PHP и MySQL
  Документация MySQL
  Учебники
  Учебники по PHP
  Учебники по MySQL
  Другие учебники
  Уроки PHP
  Введение
  Самые основы
  Управление
  Функции
  Документация
  Математика
  Файлы
  Основы SQL
  Дата и время
  CURL
  Изображения
  Стили
  Безопасность
  Установка
  Проектирование БД
  Регулярные выражения
  Подготовка к работе
  Быстрый старт
  Установка PHP
  Установка MySQL
  Конфигурация PHP
  Download / Скачать
  Скачать Apache
  Скачать PHP
  Скачать PECL
  Скачать PEAR
  Скачать MySQL
  Редакторы PHP
  Полезные утилиты
  Документация
  PHP скрипты
  Скачать скрипты
  Инструменты
  PHP в примерах
  Новости портала
 Главная   »  Сборник статей
 
 

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

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

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

 
 » Обсудить эту статью на форуме

 
 Сборник статей 
 Содержание раздела 
Есть еще вопросы или что-то непонятно - добро пожаловать на наш  форум портала PHP.SU 
 

 
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS