Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   FTP Indexer Class by Sharky (https://forum.antichat.xyz/showthread.php?t=141024)

Sharky 12.09.2009 22:57

FTP Indexer Class by Sharky
 
FTP Indexer Class by Sharky

Описание:
Не так давно со мной случилось ужасное событие - я остался без интернета. И при поиске чего либо приходилось обходиться пользовательскими фтп в локалке. Руками это было делать неудобно, так и родилась идея индексировать файлы на фтп и потом удобно всё это искать. Собственно для этого и написан, данный мини-класс. Также можно использовать как основу для поиска файлов, допустим, в фтп ифреймере.

Функции (и примеры использования):

1. Подключение и авторизация

PHP код:

#Сиснтаксис
$ftpic = new FtpIC([сервер], [порт], [таймаут], [логин], [пароль], [Отображение ошибок]);

#Пример 
$ftpic = new FtpIC("example.com"2110"Anonymous""12345"true); 

Значения по умолчанию:

[порт] - 21
[таймаут] - 10 (в секундах)
[логин] - Anonymous
[отображение ошибок] - true

Ответы:

В случае удачного подключения и авторизации возвращает TRUE.

При неудачном подключении возвращает FALSE и, если влючено отображение ошибок выводит "Истекло время подключения."

При неудачной авторизации возвращает FALSE и, если влючено отображение ошибок выводит "Неверный логин или пароль.".

2. Закрытие соединения

PHP код:

#Пример

$ftpic->disconnect(); 

Ответы:

При удачном разрыве соединения возвращает TRUE.

Если не удалось закрыть подключение, то возвращает FALSE и, если включено отображение ошибок выводит "Не удалось закрыть подключение.".

3. Древовидная структура файлов и папок.

PHP код:

#Синтаксис
$ftpic->tree([корневая папка], [глубина построения]);
#Пример
$ftpic->tree("/www/"2); //слэш вконце обязателен для корректной работы 

Значения по умолчанию:

[корневая папка] - /
[глубина построения] - 0

Ответы:

В случае успех возвращается массив со структурой файлов и папок фтп. Содержимое также делится на два подмассива [dir] и [file]

PHP код:

#Пример ответа
[stats] => Array
                (
                    [
file] => Array
                        (
                            [
0] => webalizer.example.com.txt
                            
[1] => webalizer.site.com.txt
                            
[2] => edyvobshe.net.txt
                        
)
 
                ) 

Если не удалось получить список файлов с фтп возвращается FALSE и, если включено отображение ошибок выводит "Не удалось получить содержимое папки.".

4. Поиск файлов

PHP код:

#Синтаксис
$ftpic->find([объект поиска], [корневая папка]);
#Пример
$ftpic->find("index""/"); //поиск всех в фалов в имени которых встречается index 

Значения по умолчанию:
[корневая папка] - /

Ответы:
В случае удачи возвращается массив с полным путем до файла от заданного корня.
PHP код:

#Пример
$ftpic->find("webalizer""/");
#вернёт
 
Array
(
    [
0] => /examlpe.com/webalizer/webalizer.current
    
[1] => /examlpe.com/webalizer/webalizer.hist
    
[2] => /stats/webalizer.examlpe.com.txt


Source:

PHP код:

<?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 );
        
set_time_limit );
        
$this->sock ftp_connect $ftp_server$port$timeout );
        if (! 
$this->sock) {
            if (
$display_errors == true)
                
$this->display_error );
            return 
false;
        } elseif (! 
ftp_login $this->sock$ftp_user$ftp_pass )) {
            if (
$display_errors == true)
                
$this->display_error );
            return 
false;
        } else {
            
ftp_pasv $this->socktrue );
            return 
true;
        }
    }
    
    function 
disconnect() {
        
        if (
is_resource $this->sock ) == true) {
            
ftp_close $this->sock );
            return 
true;
        } else {
            if (
$display_errors == true)
                
$this->display_error );
            return 
false;
        }
    }
    
    function 
tree($dir '/'$gl 0) {
        
$contents ftp_rawlist $this->sock$dir );
        if (! 
$contents) {
            if (
$display_errors == true)
                
$this->display_error );
            return 
false;
        } else {
            foreach ( 
$contents as $i ) {
                
$explode preg_split "/[\s]+/"$i);
                if (
substr $explode [0], 0) == "d") {
                    if (
$gl == 0) {
                        
$result ['dir'] [$explode [8]] = $explode [8];
                    } else {
                        
$result ['dir'] [$explode [8]] = $this->tree $dir "/" $explode [8], $gl );
                    }
                } else {
                    
$result ['file'] [] = $explode [8];
                }
            }
            return 
$result;
        }
    }
    
    function 
find($obj$dir '/') {
        
$lll $this->tree $dir);
        
$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
Rapidshare.com

+casper+ 12.09.2009 23:02

Молодец, хорошая весчь. Надо будет испытать=)

ReduKToR 13.09.2009 07:00

Вот это однозначно пригодится!


Время: 22:49