Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用perl脚本中的retr-';RETR&x27;不明白_Perl_Ftp - Fatal编程技术网

使用perl脚本中的retr-';RETR&x27;不明白

使用perl脚本中的retr-';RETR&x27;不明白,perl,ftp,Perl,Ftp,我有一个简单的任务,在我的公司,我们需要从ftp服务器下载文件,通常我有一些脚本,他们可以处理这个,但在一台服务器上,我有一些问题。当我使用特定于系统的ftp命令时,它可以正常工作,文件可以下载,但当我尝试从perl执行此操作时,会出现错误“'RETR'无法理解” 我的脚本是这样的 外壳: ftp>调试 ftp>打开xx.xx.xx.xx 220 ProFTPD 1.3.0服务器(ProFTPD默认安装)[xx.xx.xx.xx] ftp>cd-IN --->CWD在 250 CWD命令成功

我有一个简单的任务,在我的公司,我们需要从ftp服务器下载文件,通常我有一些脚本,他们可以处理这个,但在一台服务器上,我有一些问题。当我使用特定于系统的ftp命令时,它可以正常工作,文件可以下载,但当我尝试从perl执行此操作时,会出现错误“'RETR'无法理解”

我的脚本是这样的

外壳:


ftp>调试
ftp>打开xx.xx.xx.xx
220 ProFTPD 1.3.0服务器(ProFTPD默认安装)[xx.xx.xx.xx]
ftp>cd-IN
--->CWD在
250 CWD命令成功
ftp>获取一些文件10112499xxx.ZIP
--->端口3126181,35,14131
200端口命令成功
--->RETR somefile10112499xxx.ZIP
150打开somefile10112499xxx.ZIP的ASCII模式数据连接(13299字节)
226传输完成。
ftp:64d bajtów odebranych w 0,01Sekund 889,80Kbajtów/sek.
ftp>退出
--->退出
221再见。
perl脚本:

使用Net::FTP
$ftp=Net::ftp->new($ftp\u主机,调试=>1,被动=>0)
$ftp->login($ftp\u USER,$ftp\u PASS)
$ftp->retr(“somefile10112499xxx.ZIP”)
$ftp->退出

我尝试使用被动模式、ascii和二进制传输方法,但所有这些都使“Net::FTP=GLOB(0x1ee71a0)是否有理由使用
$FTP->retr()
而不是
$FTP->get()
来下载这些文件?通常情况下,如果只是下载文件,则使用

get ( REMOTE_FILE [, LOCAL_FILE [, WHERE]] )

方法。我相信
retr()
方法返回对
Net::FTP::dataconn
对象的引用。

关于FTP,您需要知道的是有一个客户端程序和一个服务器程序。客户端程序接受一组命令,服务器接受另一组站点命令。您的客户端可能接受RETR,并将其转换为远程服务器知道的内容。您要返回的500是从该服务器获取的。因此,无论您的本地客户端是否知道服务器将接受什么“RETR”,服务器似乎不理解该命令。这就是它告诉您的


我破解
Net::FTP
已经有一段时间了,但是如果我记得有很多不太频繁的命令被传递到服务器上。

我找到了解决方案,问题不在下载脚本中,而是在FTP服务器上。文件被从服务器上删除了-是某种崩溃-这就是我无法下载它的原因。

毕竟,在脚本中,有时我似乎在没有任何参数的情况下使用get方法,这也返回了
500'RETR'not knowned
。我认为这并不酷,它应该告诉我没有这样的文件


但我想感谢大家的阅读和帮助。

离题,但当我看到有人在
ASCII模式下下载
*.ZIP
文件时,我想到了facepalm。当然,它应该是二进制模式,但这不是问题所在-我想用最简单的示例来说明这是可行的。在第一个示例中,您似乎不知道正在登录,但在您正在登录的Net::FTP示例?2006中,他们想要他们的FTP服务器软件。通知FTP管理员升级。如果您这样做,您会得到什么:$FTP->get(“somefile…”)或die“get failed”“,$ftp->消息;您是否在没有设置调试标志的情况下尝试过它?如果您只需要下载文件,我看不出您为什么需要调试集。人们可能会认为他设置了调试标志,因为他想找出下载文件不起作用的原因……也许,但我见过很多人在不需要额外信息的情况下设置调试标志。我使用调试模式来显示向我转发的服务器。可能是,你知道其他处理ftp的包吗?我总是用这个。