Perl中FTP的使用

perl中要使用ftp操作需要使用模块 Net::FTP,“Net::FTP”必须注意大小写,否则执行会报错。

Net::FTP模块需要在ppm中下载libnet包。

在Perl中,使用模块Net::FTP来使用FTP服务,一般的使用步骤如下: 
1. 使用Net::FTP的new方法来创建一个新的FTP对象。
2. 使用login方法登录到FTP服务器。
3. 使用cwd方法来切换目录。
4. 使用get方法来获取文件。
5. 使用put方法来上传文件。
6. 使用quit方法退出。
更多有关标准的Net::FTP模块的应用,可以参考PerlDoc里的说明: http://perldoc.perl.org/Net/FTP.html  

以下是Net::FTP模块中的一些常用方法及它们不同寻常的返回值的汇总。因为Perl有非常多的模块,这些模块又有非常多的方法,如果不是经常的使用它们,必须有一个快速的列表供日后要使用时不要再参考其他的技术文档,拿来即用是Perl的风格,要将它发扬光大。
Net::FTP API
如何新建一个FTP对象
$ftp=Net::FTP->new($host[,%options])%options
可以对这个新建的FTP对象指定特定的选项,比如连接的超时时间等。
选项列表:
Port
Timeout
Passive 为文件传输使用被动模式
BlockSize 传输的块长度,默认为10240
如何登录指定的FTP主机
$success=$ftp->login([$username][,$pwd][,$account])
login方法可以不加任何的参数,默认以anonymous为账户名登录,它会查找.netrc 文件来作为它的认证信息。
如何设置文件传输模式
$type=$ftp->ascii  或者 binary
ascii适用于传输文本文件,这个方法返回前一个模式的值,比较的特殊。
如何得到远程FTP服务器上的当前目录
$dir=$ftp->pwd()
返回完整的工作路径
如何删除服务器上目录,如果有权限
$success=$ftp->rmdir($dir)
如何创建目录
$success=$ftp->mkdir($dir,$parents)
如果$parents为真,则会像mkdir -p这样
如何取得某目录内的文件名和目录名的短路径格式列表
@items=$ftp->ls($dir)
在标量上下文中,它返回对数组的引用。你可这样使用它$ftp->(‘-lF’)
@items=$ftp->dir() 这个和上面的ls差不多。它返回长格式形式的列表,像是ls -lg的形式。
如何从服务器上下载文件
$success=$ftp->get($remote,$local,$offset)
$remote可以为完整路径或者相对于当前目录的相对路径,$local可以指定下载的文件要存储的名字,即文件重命名。可以把$local设定为一个存在的文件句柄,这样下载的文件将发送到那个句柄中。比如$ftp->get(‘filename’,\*STDOUT)。$offset是为断点续传而准备的参数,也就是它在传输前会从这个位置来传输。
如何直接检索远程文件不下载到指定的文件
$file_handle=$ftp->retr($filename)
这样我们可以读取这个文件句柄。print while
如何上传文件到远程服务器上
$success=$ftp->put($local,$remote_dir)
如何初始化一个文件的传输
$file_handle=$ftp->stor($filename)
如果你能够把文件从本地上传到指定的远程目录内,这个方法返回一个文件句柄,之后我们就可以通过文件句柄来写文件到远程目录的指定文件下。还有一个功能差不多的方法:appe(),从名字上看,它是追加的意思,而sotr则直接覆盖已经存在的文件。
如何返回远程文件的修改时间,如果FTP服务器支持
$modtime=$ftp->mdtm($file)
它返回从纪元元年到现在的秒数;如果文件不存或者不是普通的文件,它返回undef。
如何得到远程服务器的文件大小
$size=$ftp->size($file)
如果文件不存在或者不是普通文件,返回undef。它以字节为单位返回指定文件的长度。
如果取得FTP服务器反馈的消息
$mesage=$ftp->message()
FTP以交互的形式工作,我们给FTP服务器发送一个指令,它进行解析并返回特定的消息,如 220 Serv-U FTP Server v6.4 for WinSock ready…,前面那个220指示命令完成的状态,大于500的表示FTP服务器内部的错误,400~499表示客户端的错误,200~299表示命令成功完成。通常来说我们没有成功登录到指定的FTP时,message()方法可以报告发生了什么错误。

其他要点:
Net::FTP是libnet实用程序的一部分,这个软件包还包含其他的有用模块,比如Net::Time、Net::SMTP,具体可以参看 http://search.cpan.org/~gbarr/ ,这是此软件包开发者的项目主页。在这里随便提下Net::Cmd模块。这个模块有两个主要的方法:command() 和response()。
$success=$obj->command($cmd,@args)
此方法将$cmd指定的命令发送给服务器,可以为命令加一些参数,它自动的在各参数之间加入空格进行分隔并将一个CRLF控制字符附加到命令的末尾。
$status=$obj->response()
它获取服务器对最后一次命令的响应,返回一个数字作为状态报告给我们,在失败的情况下返回undef。

以上就是FTP模块需要了解的部分,作为日后备忘的快速查阅。
模板例子:
1 #!/usr/bin/perl -w
2 #使用模块Net::FTP
3 use Net::FTP;
4 #创建新的FTP连接
5 $ftp = Net::FTP->new
6 (
7 "ftp.cpan.org",
8 Timeout => 30
9 ) or die "Could not connect.\n";
10 #登录用的用户名和密码
11 $username = 'anonymous';
12 $password = 'lvdbing@163.com';
13 #登录到FTP服务器
14 $ftp->login($username,$password) or die "Could not login.\n";
15 #切换目录到/pub/CPAN
16 $ftp->cwd('/pub/CPAN');
17 #指定远程的文件和本地的文件
18 $remotefile = "CPAN.html";
19 $localfile = "CPAN.html";
20 #使用get方法下载远程文件到本地来
21 $ftp->get($remotefile,$localfile) or die "Could not get remotefile:$remotefile\n";
22 #退出FTP服务器
23 $ftp->quit;

一个我自己的例子:
#!/usr/bin/perl-w

use strict;
use warnings;

#使用Net::FTP模块
use Net::FTP;

our $ftp_host = "-";
our $ftp_user = "-";
our $ftp_pw = "-";

&main();
exit(0);

sub main
{
&login_ftp();
}

sub login_ftp
{
my $ftp;
$ftp = Net::FTP->new($ftp_host,Passive=>1,Debug=>1,Timeout=>30) or die "Can not connect to ftp server $ftp_host : $@" , $ftp->message;
$ftp->login($ftp_user,$ftp_pw) or die "Can not login ", $ftp->message;;
$ftp->cwd("/test") or die "Can not change working directory !\n" , $ftp->message;
#$ftp->get("aaa.txt") or die "get failed ", $ftp->message;
$ftp->put("config.txt");
$ftp->quit;
}

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28929558/viewspace-1143867/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28929558/viewspace-1143867/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值