Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > ftp put file |
Автор: dimon2239 20.10.2015, 09:38 | ||
Добрый день. Подскажите пожалуйста, почему не срабатывает put, идет ошибка "Unrecognized or unsupported command".
|
Автор: arto 20.10.2015, 16:09 |
Добавте в new Debug => 9 |
Автор: a0730 20.10.2015, 18:47 | ||
Попробуй добавить строку:
Перед $ftp->put($file) or die "Can't put $file into $dir\n $!", $ftp->message; Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/ftp-put-file-id5625e187ae2015ca078b4567#findElement_E7045_56266222ae20151a2e04720d_0 |
Автор: dimon2239 21.10.2015, 07:16 | ||
Строку добавил, результат не изменился. Ниже дебаг.
Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/ftp-put-file-id5625e187ae2015ca078b4567#findElement_E7045_562711a9ae2015416f047102_0 |
Автор: a0730 21.10.2015, 16:08 |
FTP клиент использует команду ALLO для резервирования места. Похоже на ошибку в Net::FTP. Есть ли возможность использовать другой клиент или сервер? Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/ftp-put-file-id5625e187ae2015ca078b4567#findElement_E7045_56278e30ae20156b20047013_0 |
Автор: tzirechnoy 21.10.2015, 17:54 |
Учитывая, что в первом RFC, в котором появилась команда STOR (rfc354), объявлена и команда ALLO, и чётко указано: <<The ALLO command should be treated as a NO-OP (no operation) by thuse servers which do not require that the maximum size of the file be declared beforehand.>>, а такжэ тот факт, что никому в Net::FTP это много лет не мешает -- это баг в ftp-сервере, а не в Net::FTP. Впрочем, можно самому перед put сделать allo(0). Оно вернёт ошыбку, которую можно проигнорировать. |
Автор: dimon2239 21.10.2015, 19:04 | ||||
Я правильно понимаю, так должно быть?
Выполнил
|
Автор: a0730 21.10.2015, 21:05 |
Perl FTP клиент использует команду ALLO. Проблема в том, что FTP сервер её не подерживает и возвращает ошибку, которая обламывает операцию PUT. Т.е. клиент и сервер не совместимы. Поэтому я и спрашивал выше, есть ли возможно заменить клиента (другой не PERL) или сервер (другой хост или другой софт). Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/ftp-put-file-id5625e187ae2015ca078b4567#findElement_E7045_5627d3cdae2015c56804711e_0 |
Автор: dimon2239 21.10.2015, 22:55 |
Сервер никак изменить нельзя, т.к. он встроенный в dslam). Только если менять клиент, попробую реализовать на vbs. Жаль что с перлом так получилось. |
Автор: tzirechnoy 21.10.2015, 23:38 | ||
Я тут подумал, да с alloc(0) не прокатит. Попробуйте сделать вместо этого ${*$ftp}{'net_ftp_allo'} = 1; перед (каждым) ->put |
Автор: a0730 22.10.2015, 06:33 |
Задачу какую хотите решить? Понятно, что нужно передать файл на сервер, клиент вроде бы винда. Какая степень автоматизации нужна? Как нужно запускать передачу файла? В C# есть встроенный FTP клиент. С ним мне тоже пришлось камлать когда-то, но может он подойдёт. Можно просто нарисовать два файла s.cmd и s.data: [code=C#] файл s.data: open 10.1.27.1 user password bin put IMG_0061.MOV bye файл s.cmd: @echo off ftp < s.data pause [/code] И запустить s.cmd из командной строки. Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/ftp-put-file-id5625e187ae2015ca078b4567#findElement_E7045_56285915ae2015c377047193_0 |
Автор: dimon2239 22.10.2015, 06:56 | ||||
Спасибо большое, так все работает. Верно ли понимаю что этой командой мы отключили отправку allo? p.s. Скрипт на обновление dslam zyxel. |
Автор: tzirechnoy 22.10.2015, 12:07 | ||
Это командой вы сделали вид, что команда ALLO для следующего STOR успешно сработала и посылать её в этот раз ужэ не нужно. Срабатывает только на один STOR, поскольку ALLO как раз на один STOR и рассчитана, и этот счётчик в STOR сбрасывается. |
Автор: tzirechnoy 22.10.2015, 12:57 |
Кстати, если dslam зарегистрирован у производителя, или вообще есть какие-то контакты техподдержки -- то можно попросить чтобы баг с ALLO исправили. |