1、使用FTP从服务器下载文件
①连接远程FTP服务器
$conn
=
ftp_connect
(
$host
);
②登录(通过用户名或匿名登录)
许多FTP网站都支持匿名登录(anony-mous),任何人都可以用这个名字来连接FTP服务器,匿名登录通常包电子邮箱作为地址;
$result
= @
ftp_login
(
$conn
,
$user
,
$password
);
③检查远程文件是否已经更新;
$localtime
=
filemtime
(
$localfile
); //获取本地文件更新时间
$remotetime
=
ftp_mdtm
(
$conn
,
$remotefile
); //获取远程文件更新时间
④如果该文件已更新,下载此文件;
$fp
=
fopen
(
$localfile
,
'w'
);
$success
=
ftp_fget
(
$conn
,
$fp
,
$remotefile
,
FTP_BINARY
);
fclose
(
$fp
);
⑤关闭FTP连接;
ftp_quit
(
$conn
);
<?php
//预设变量
$host = 'ftp.cs.rmit.edu.au';
$user = 'anonymous';
$password = 'me@example.com';
$remotefile = 'pub/tsg/teraterm/ttssh14.zip';
$localfile = '/d:/D:/Program Design/PHP/ttssh14.zip';
//连接FTP服务器
$conn = ftp_connect($host); //连接FTP服务器
if($conn){
echo "Error:Could not connect to ftp server<br/>";
exit;
}
echo "Connected to Host $host .<br/>";
//登陆(通过用户名或者匿名登陆)
$result = @ftp_login($conn ,$user ,$password); //使用用户名登陆FTP服务器
if(!$result){
echo "Error: Could not log on as $user<br />";
ftp_quit($conn);
exit;
}
//检查文件是否更新
echo "Checking file timne....<br./>";
if(file_exists($localfile)){ //检验本地文件是否存在
$localtime = filemtime($localfile); //文件存在时,获取该文件的最近修改时间
echo "Local file last update date(\"G:i j-M-Y\",$localtime) <br/>";
}
else
$localtime = 0; //文件不存在时,本地修改时间设置为0,以确保文件能被下载
$remotetime = ftp_mdtm($conn,$remotefile);
if(!($remotetime >= 0)) { //在无法获取下载文件的修改时间的情况下,手动设置下载文件的修改时间,确保文件下载
echo "Cant\'t access remote file time.<br/>";
$remotetime = $localtime + 1;
}
if(!($remotetime > $localtime)){ //比较本地文件下载文件的更新时间,决定是否下载文件
echo "Local copy is up to date<br/>";
}
//下载文件
echo "Get the file form server...<br/>";
$fp = fopen($localfile ,'w');
$success = ftp_fget($conn,$fp,$remotefile,FTP_BINARY);
if(!$success){
echo 'Error: Could not download file';
ftp_quit($conn);
exit;
}
fclose($fp);
echo "File downloaded successfully";
//关闭FTP连接
ftp_quit($conn);
?>
2、上传文件
基本步骤同上,将ftp_fget() , ftp_get() 函数更换为ftp_fput() 、ftp_put();
bool
ftp_fput ( resource
$ftp_stream
, string
$remote_file
, resource
$handle
, int
$mode
[, int
$startpos
= 0 ] )
bool
ftp_put ( resource
$ftp_stream
, string
$remote_file
, string
$local_file
, int
$mode
[, int
$startpos
] )
3、其他的FTP函数
set_time_limit($time):设置该脚本的执行时间避免脚本执行超时,php.ini中默认30s;
ftp_size($conn, $remotefile ):获取FTP服务器上一个文件的大小;
获取FTP服务器特定目录上的文件列表:
$listing =
ftp_nlist($conn , dirname($remotefile));
foreach($listing as $filename)
echo "$filename<br/>";