Довольно давно столкнулся с интересной задачей: необходимо было управлять ссылками на свои ресурсы, проставляя/добавляя/удаляя их по ftp. По некоторым причинам ( :) ), доступ к этим ftp должен был осуществляться анонимно, с сокрытием реального IP адреса. Система управления должна была работать на сервере иметь www-интерфейс. Короче, продвинутый многопоточный фрэймер, работающий через соксы.

Было это пару лет назад, программу я успешно написал и сдал. И остался для будущих проектов от нее класс работы с ftp, написанный на php. В нем нет ни одной функции пхп, начинающейся с ftp_: весь протокол ftp реализован чисто с помощью сокетов. Соответственно главный плюс — возможность работать по ftp через соксы.

Вот так выглядит использование класса:


<?php
require_once 'ftp.class.php';

// Создание объекта, через который будем управлять по ftp
$fc1 = new ftpcom();
// Можно при создании сразу указать, с каким ftp будем работать
$fc2 = new ftpcom('ftp://login:pass@domain.com');
// Можно сразу указать socks-5 прокси, например 127.0.0.1:3128
$fc3 = new ftpcom('ftp://login:pass@domain.com', '127.0.0.1:3128');

// Впрочем, можно параметры присвоить и позже:
$fc1->Host = 'domain.com';
$fc1->Port = '21'; // По умолчанию порт и так 21
$fc1->User = 'login';
$fc1->Pass = 'pass';
// Сколько секунд ждать ответа от сервера, по умолчанию 30
$fc1->ConnectTimeOut = 10;

// Коннект и логин осуществляется вот так:
// Connect без параметров подключает к domain.com, как задано
if(!$fc1->connect()) exit($fc1->Error);
$fc1->login(); // Ну и логинимся с логином и паролем, заданным выше

// Подконнектится к domain3.com, к порту 21, ждать максимум 200 секунд
if(!$fc2->connect('domain3.com', 21, 200)) exit($fc1->Error);
// При логине тоже можно задавать напрямую логин и пароль
$fc2->login('Login2', 'mysecretpass');
// Ну удобней всего конечно так:
if(!$fc3->connect() or !$fc3->login()) exit($fc3->Error);

// Остальные операции соответствуют синтаксису встроенных в пхп функций работы с ftp. Например:
$fc1->rawlist(); // Возвращает список файлов в текущей директории
$fc1->chdir('http_docs'); // поменяет текущцю директорию
// Скачает file.php с текущей директории и сохранит как file.php
$fc1->get('file.php');
// Скачает файл index.php и сохранит в temp.php.
// Режим скачивания - текстовый
$fc1->get('temp.txt', 'index.php', 'FTP_ASCII');
echo $fc1->pwd(); // Возвращает текущую директорию
// Локальный файл temp.php зальет на ftp с именем index.php
$fc1->put('temp.php', 'index.php');
// В переменной Error хранится результат последней операции
echo $fc->Error;
?>

Код класса можно скачать отсюда: ftp.class.zip



  • Dux комментирует:

    что то не скачивает и не закачивает через эту библиотеку.
    коннект, логин, смена папки и показ папки есть, а вот get и put не хочет. пишет Bad proxy.
    через FileZilla закачивает хорошо через пробуемый socks.

    в чем может быть дело?

  • SolutionFix комментирует:

    В соксах. Библиотека поддерживает только socks5 версию.
    Других вариантов в голову не приходит.

  • Xstroy комментирует:

    Не удалось запустить. Пишет
    Warning: stream_set_timeout(): supplied argument is not a valid stream resource in ____/ftp.class.php on line 23

  • Chode комментирует:

    Спасибо, попробую в использовании. Не хочется изобретать велосипед)

  • Vladimir Usenco комментирует:

    Хороший класс. Можно немного доработать и выложить на PHPclasses — думаю, многим будет полезно.

  • NTллигент комментирует:

    Класс очень криво работает…. Из-за того, что ожидает в ответе (везде при коннекте, при авторизации и тд) только одну строчку и когда идет подряд пару строк, например:
    220-Microsoft FTP Service
    220 IIS500CF
    то соответственно выдает ошибку.
    Класс тестировался на не одной сотне разного «лома» и выборка большая. И обычные пхп функции ftp_ такого рода акки едят на ура.

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