Довольно давно столкнулся с интересной задачей: необходимо было управлять ссылками на свои ресурсы, проставляя/добавляя/удаляя их по 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

Январь 25th, 2010 at 22:38
что то не скачивает и не закачивает через эту библиотеку.
коннект, логин, смена папки и показ папки есть, а вот get и put не хочет. пишет Bad proxy.
через FileZilla закачивает хорошо через пробуемый socks.
в чем может быть дело?
Февраль 4th, 2010 at 12:43
В соксах. Библиотека поддерживает только socks5 версию.
Других вариантов в голову не приходит.
Май 14th, 2010 at 09:49
Не удалось запустить. Пишет
Warning: stream_set_timeout(): supplied argument is not a valid stream resource in ____/ftp.class.php on line 23
Июнь 4th, 2010 at 00:30
Спасибо, попробую в использовании. Не хочется изобретать велосипед)