Hare.ru @ Коллективный разум / Hare.ru @ Дикое место

Архив hare.ru 
Мысли, конвертированные в текст

Собственные руки TM


Все статьи раздела

Как достучаться до FTP-сервера?

Никита Зайцев (WildHare) (где-то в 2001)

Первое, что приходит на ум — взять в руки Яndex и поискать там “1C&FTP”. Таким образом мы находим компоненту AddFTP. Но увы, она нам не подходит — не умеет закачивать файлы, работает только с анонимными FTP-серверами, не умеет работать через прокси-сервер. Других внешних компонент для работы с FTP в открытом доступе нет.

Далее, иногда бывает полезно поискать решение на жестком диске собственного компьютера, таким образом находим ftp.exe. Умеет все, кроме одного: не умеет работать через прокси-сервер.

Что остается делать? Можно взять “Технологию создания внешних компонент” и написать компоненту для полноценной работы с FTP. Но это потребует времени и квалификации, а они есть далеко не у всех.

Я решил проблему следующим образом. Зашел на сайт компании ActiveWare и скачал ActivePerl for Win32. Установил этот пакет (нужно брать дистрибутив в формате MSI) на ту машину, с которой требовался доступ к FTP (инсталляция проста, как мычание). Perl — очень простой и в то же время очень мощный язык, и написанные на нем программы отнюдь не всегда производят впечатление случайного набора символов (хотя и такое тоже бывает). Вот как выглядит самый простой скрипт для работы с FTP:


# подключаем нужный модуль
use NET::Ftp;

# коннектимся через прокси-сервер
$ftp = Net::FTP->new("194.85.33.254",Firewall => "192.168.0.1");

# авторизуемся на FTP-сервере
$ftp->login('MyCoolLogin','MyCoolPassword') || die $!;

# заходим в нужную директорию
$ftp->cwd('public_html');
$ftp->cwd('files');

# скачиваем файл с сервера 
$ftp->get('dms.als','c:\dms.als.old');

# закачиваем файл на сервер
$ftp->put('c:\dms.als','dms.als');

# скачиваем оглавление каталога
@list=$ftp->dir();
foreach (@list) {
    $dir.="$_\n";
}
open TXT,'>c:\ftp_dir.txt';
print TXT $dir;
close TXT;

# отключаемся от сервера
$ftp->quit();

Разумеется, чтобы использовать приведенный код осмысленно, понадобится посвятить некоторое время чтению документации.. но дело того стоит. Perl, помимо легкости в освоении и использовании, славится просто фантастическим количеством готовых модулей почти что для всех случаев жизни. А поскольку Perl — язык объектный, подключение и использование этих модулей особого труда не представляет.

Дальше уже — дело техники. Текст скрипта (со всеми адресами, логинами и именами файлов) можно сгенерировать прямо в модуле 1Сv7:

// генерируем текст скрипта
Текст=СоздатьОбъект("Текст");
Текст.ДобавитьСтроку("use NET::Ftp;
"|....
");

// записываем на диск
Текст.Записать(КаталогИБ()+"connect.pl");

// запускаем на выполнение
КомандаСистемы(КаталогИБ()+"connect.pl");

// удаляем, чтоб не засорять место
ФС.УдалитьФайл(КаталогИБ()+"connect.pl");

Ассоциация файлов *.pl с интерпретатором perl.exe автоматически создается при инсталляции ActivePerl, но нелишним будет ее проверить — просто на всякий случай.

У описанного решения есть один неприятный побочный эффект — запуск скрипта приводит к появлению окна DOS-сессии и “подвисанию” 1С:Предприятия на время выполнения скрипта. Но тут уж ничего не поделать.

Партнеры:


Также может быть интересно:

Канал Россия 1 на http://spbtvonline.ru/
   
 Сайт поддерживается за счет партнеров:
:::... Сайт содержит архив двух версий hare.ru Карта сайта