Часто требуется организовать поиск по FTP-серверу. Для того чтобы поиск осуществлялся быстро, FTP-сервер сканируют и помещают названия всех файлов и пути к ним в один файл или таблицу базы данных. При помощи такого списка осуществлять поиск гораздо проще, нежели сканировать каждый раз весь хост. С другой стороны вам может быть интересно будет просканировать свой собственный FTP-хост чтобы получить представление о его организации. Это позволит оптимизировать или реорганизовать его структуру.
Создадим небольшое Web-приложение, состоящее из двух файлов: config.php (конфигурационный файл, содержащий параметры соединения с FTP-сервером и осуществляющий установку соединения) и index.php, который представляет собой непосредственно FTP-сканер.
Конфигурационный файл config.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
<?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 5 на примерах
PHP 5. Практика создания web-сайтов
Самоучитель PHP 5