您的位置:首页 > 编程语言 > PHP开发

PHP使用FTP函数备份/上传服务器文件

2016-10-21 09:43 405 查看

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/>";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: