Sharky
12.09.2009, 22:57
FTP Indexer Class by Sharky
Описание:
Не так давно со мной случилось ужасное событие - я остался без интернета. И при поиске чего либо приходилось обходиться пользовательскими фтп в локалке. Руками это было делать неудобно, так и родилась идея индексировать файлы на фтп и потом удобно всё это искать. Собственно для этого и написан, данный мини-класс. Также можно использовать как основу для поиска файлов, допустим, в фтп ифреймере.
Функции (и примеры использования):
1. Подключение и авторизация
#Сиснтаксис
$ftpic = new FtpIC([сервер], [порт], [таймаут], [логин], [пароль], [Отображение ошибок]);
#Пример
$ftpic = new FtpIC("example.com", 21, 10, "Anonymous", "12345", true);
Значения по умолчанию:
[порт] - 21
[таймаут] - 10 (в секундах)
[логин] - Anonymous
[отображение ошибок] - true
Ответы:
В случае удачного подключения и авторизации возвращает TRUE.
При неудачном подключении возвращает FALSE и, если влючено отображение ошибок выводит "Истекло время подключения."
При неудачной авторизации возвращает FALSE и, если влючено отображение ошибок выводит "Неверный логин или пароль.".
2. Закрытие соединения
#Пример
$ftpic->disconnect();
Ответы:
При удачном разрыве соединения возвращает TRUE.
Если не удалось закрыть подключение, то возвращает FALSE и, если включено отображение ошибок выводит "Не удалось закрыть подключение.".
3. Древовидная структура файлов и папок.
#Синтаксис
$ftpic->tree([корневая папка], [глубина построения]);
#Пример
$ftpic->tree("/www/", 2); //слэш вконце обязателен для корректной работы
Значения по умолчанию:
[корневая папка] - /
[глубина построения] - 0
Ответы:
В случае успех возвращается массив со структурой файлов и папок фтп. Содержимое также делится на два подмассива [dir] и [file]
#Пример ответа
[stats] => Array
(
[file] => Array
(
[0] => webalizer.example.com.txt
[1] => webalizer.site.com.txt
[2] => edyvobshe.net.txt
)
)
Если не удалось получить список файлов с фтп возвращается FALSE и, если включено отображение ошибок выводит "Не удалось получить содержимое папки.".
4. Поиск файлов
#Синтаксис
$ftpic->find([объект поиска], [корневая папка]);
#Пример
$ftpic->find("index", "/"); //поиск всех в фалов в имени которых встречается index
Значения по умолчанию:
[корневая папка] - /
Ответы:
В случае удачи возвращается массив с полным путем до файла от заданного корня.
#Пример
$ftpic->find("webalizer", "/");
#вернёт
Array
(
[0] => /examlpe.com/webalizer/webalizer.current
[1] => /examlpe.com/webalizer/webalizer.hist
[2] => /stats/webalizer.examlpe.com.txt
)
Source:
<?php
#FTP Indexer Class by Sharky
class FtpIC {
function FtpIC($ftp_server, $port = 21, $timeout = 10, $ftp_user = 'Anonymous', $ftp_pass = '12345', $display_errors = true) {
error_reporting ( 0 );
set_time_limit ( 0 );
$this->sock = ftp_connect ( $ftp_server, $port, $timeout );
if (! $this->sock) {
if ($display_errors == true)
$this->display_error ( 0 );
return false;
} elseif (! ftp_login ( $this->sock, $ftp_user, $ftp_pass )) {
if ($display_errors == true)
$this->display_error ( 1 );
return false;
} else {
ftp_pasv ( $this->sock, true );
return true;
}
}
function disconnect() {
if (is_resource ( $this->sock ) == true) {
ftp_close ( $this->sock );
return true;
} else {
if ($display_errors == true)
$this->display_error ( 2 );
return false;
}
}
function tree($dir = '/', $gl = 0) {
$contents = ftp_rawlist ( $this->sock, $dir );
if (! $contents) {
if ($display_errors == true)
$this->display_error ( 3 );
return false;
} else {
foreach ( $contents as $i ) {
$explode = preg_split ( "/[\s]+/", $i, 9 );
if (substr ( $explode [0], 0, 1 ) == "d") {
if ($gl == 0) {
$result ['dir'] [$explode [8]] = $explode [8];
} else {
$result ['dir'] [$explode [8]] = $this->tree ( $dir . "/" . $explode [8], $gl - 1 );
}
} else {
$result ['file'] [] = $explode [8];
}
}
return $result;
}
}
function find($obj, $dir = '/') {
$lll = $this->tree ( $dir, 0 );
$keys = array_keys ( $lll ['dir'] );
foreach ( $keys as $p ) {
$res = $this->find ( $obj, $dir . $p . "/" );
if (sizeof ( $res ) > 0) {
foreach ( $res as $it ) {
$result [] = $it;
}
}
}
foreach ( $lll ['file'] as $i ) {
if (strstr ( $i, $obj )) {
$result [] = $dir . $i;
}
}
return $result;
}
function display_error($error_num) {
$error [0] = 'Истекло время подключения.';
$error [1] = 'Неверный логин или пароль.';
$error [2] = 'Не удалось закрыть подключение.';
$error [3] = 'Не удалось получить содержимое папки.';
echo '<html>
<head>
<meta http-equiv="Content-Type" content="text/htm; charset=windows-1251">
<style type="text/css">
body {
background-color: #fff;
margin: 40px;
font-family: Lucida Grande, Verdana, Sans-serif;
font-size: 12px;
color: #4F5155;
}
h1 {
color: #444;
background-color: transparent;
border-bottom: 1px solid #D0D0D0;
font-size: 16px;
font-weight: bold;
margin: 24px 0 2px 0;
padding: 5px 0 6px 0;
}
code {
font-family: Monaco, Verdana, Sans-serif;
font-size: 12px;
background-color: #f9f9f9;
border: 1px solid #D0D0D0;
color: #002166;
display: block;
margin: 14px 0 14px 0;
padding: 12px 10px 12px 10px;
}
</style>
</head>
<body>
<h1>Ошибка</h1>
<code>' . $error [$error_num] . '</code>
</body>
</html>
';
}
}
#with love by Sharky
#С пожертвованиями на корм программисту можно обращаться сюда http://forum.antichat.ru/member.php?u=24005
?>
Или скачать архивом:
WebFile.ru (http://webfile.ru/3915681)
Rapidshare.com (http://rapidshare.com/files/279173236/class.ftpic.rar.html)
Описание:
Не так давно со мной случилось ужасное событие - я остался без интернета. И при поиске чего либо приходилось обходиться пользовательскими фтп в локалке. Руками это было делать неудобно, так и родилась идея индексировать файлы на фтп и потом удобно всё это искать. Собственно для этого и написан, данный мини-класс. Также можно использовать как основу для поиска файлов, допустим, в фтп ифреймере.
Функции (и примеры использования):
1. Подключение и авторизация
#Сиснтаксис
$ftpic = new FtpIC([сервер], [порт], [таймаут], [логин], [пароль], [Отображение ошибок]);
#Пример
$ftpic = new FtpIC("example.com", 21, 10, "Anonymous", "12345", true);
Значения по умолчанию:
[порт] - 21
[таймаут] - 10 (в секундах)
[логин] - Anonymous
[отображение ошибок] - true
Ответы:
В случае удачного подключения и авторизации возвращает TRUE.
При неудачном подключении возвращает FALSE и, если влючено отображение ошибок выводит "Истекло время подключения."
При неудачной авторизации возвращает FALSE и, если влючено отображение ошибок выводит "Неверный логин или пароль.".
2. Закрытие соединения
#Пример
$ftpic->disconnect();
Ответы:
При удачном разрыве соединения возвращает TRUE.
Если не удалось закрыть подключение, то возвращает FALSE и, если включено отображение ошибок выводит "Не удалось закрыть подключение.".
3. Древовидная структура файлов и папок.
#Синтаксис
$ftpic->tree([корневая папка], [глубина построения]);
#Пример
$ftpic->tree("/www/", 2); //слэш вконце обязателен для корректной работы
Значения по умолчанию:
[корневая папка] - /
[глубина построения] - 0
Ответы:
В случае успех возвращается массив со структурой файлов и папок фтп. Содержимое также делится на два подмассива [dir] и [file]
#Пример ответа
[stats] => Array
(
[file] => Array
(
[0] => webalizer.example.com.txt
[1] => webalizer.site.com.txt
[2] => edyvobshe.net.txt
)
)
Если не удалось получить список файлов с фтп возвращается FALSE и, если включено отображение ошибок выводит "Не удалось получить содержимое папки.".
4. Поиск файлов
#Синтаксис
$ftpic->find([объект поиска], [корневая папка]);
#Пример
$ftpic->find("index", "/"); //поиск всех в фалов в имени которых встречается index
Значения по умолчанию:
[корневая папка] - /
Ответы:
В случае удачи возвращается массив с полным путем до файла от заданного корня.
#Пример
$ftpic->find("webalizer", "/");
#вернёт
Array
(
[0] => /examlpe.com/webalizer/webalizer.current
[1] => /examlpe.com/webalizer/webalizer.hist
[2] => /stats/webalizer.examlpe.com.txt
)
Source:
<?php
#FTP Indexer Class by Sharky
class FtpIC {
function FtpIC($ftp_server, $port = 21, $timeout = 10, $ftp_user = 'Anonymous', $ftp_pass = '12345', $display_errors = true) {
error_reporting ( 0 );
set_time_limit ( 0 );
$this->sock = ftp_connect ( $ftp_server, $port, $timeout );
if (! $this->sock) {
if ($display_errors == true)
$this->display_error ( 0 );
return false;
} elseif (! ftp_login ( $this->sock, $ftp_user, $ftp_pass )) {
if ($display_errors == true)
$this->display_error ( 1 );
return false;
} else {
ftp_pasv ( $this->sock, true );
return true;
}
}
function disconnect() {
if (is_resource ( $this->sock ) == true) {
ftp_close ( $this->sock );
return true;
} else {
if ($display_errors == true)
$this->display_error ( 2 );
return false;
}
}
function tree($dir = '/', $gl = 0) {
$contents = ftp_rawlist ( $this->sock, $dir );
if (! $contents) {
if ($display_errors == true)
$this->display_error ( 3 );
return false;
} else {
foreach ( $contents as $i ) {
$explode = preg_split ( "/[\s]+/", $i, 9 );
if (substr ( $explode [0], 0, 1 ) == "d") {
if ($gl == 0) {
$result ['dir'] [$explode [8]] = $explode [8];
} else {
$result ['dir'] [$explode [8]] = $this->tree ( $dir . "/" . $explode [8], $gl - 1 );
}
} else {
$result ['file'] [] = $explode [8];
}
}
return $result;
}
}
function find($obj, $dir = '/') {
$lll = $this->tree ( $dir, 0 );
$keys = array_keys ( $lll ['dir'] );
foreach ( $keys as $p ) {
$res = $this->find ( $obj, $dir . $p . "/" );
if (sizeof ( $res ) > 0) {
foreach ( $res as $it ) {
$result [] = $it;
}
}
}
foreach ( $lll ['file'] as $i ) {
if (strstr ( $i, $obj )) {
$result [] = $dir . $i;
}
}
return $result;
}
function display_error($error_num) {
$error [0] = 'Истекло время подключения.';
$error [1] = 'Неверный логин или пароль.';
$error [2] = 'Не удалось закрыть подключение.';
$error [3] = 'Не удалось получить содержимое папки.';
echo '<html>
<head>
<meta http-equiv="Content-Type" content="text/htm; charset=windows-1251">
<style type="text/css">
body {
background-color: #fff;
margin: 40px;
font-family: Lucida Grande, Verdana, Sans-serif;
font-size: 12px;
color: #4F5155;
}
h1 {
color: #444;
background-color: transparent;
border-bottom: 1px solid #D0D0D0;
font-size: 16px;
font-weight: bold;
margin: 24px 0 2px 0;
padding: 5px 0 6px 0;
}
code {
font-family: Monaco, Verdana, Sans-serif;
font-size: 12px;
background-color: #f9f9f9;
border: 1px solid #D0D0D0;
color: #002166;
display: block;
margin: 14px 0 14px 0;
padding: 12px 10px 12px 10px;
}
</style>
</head>
<body>
<h1>Ошибка</h1>
<code>' . $error [$error_num] . '</code>
</body>
</html>
';
}
}
#with love by Sharky
#С пожертвованиями на корм программисту можно обращаться сюда http://forum.antichat.ru/member.php?u=24005
?>
Или скачать архивом:
WebFile.ru (http://webfile.ru/3915681)
Rapidshare.com (http://rapidshare.com/files/279173236/class.ftpic.rar.html)