抱歉,评论被关闭
PHP实现FTP上传文件和下载文件
昨天写了一个PHP实现FTP的上传、下载文件,这哈又来晒哈
目录文件结构按照下图建
文件源码如下:
一、Lyc\Ftp\Abstract.class.php FTP基类
<?php
/* author:凹凸曼(lyc)
/* email: jar-c@163.com
/* time : 2011-04-22
*/
abstract class Lyc_Ftp_Abstract {
protected $ftpobj=null;
protected $host='';
protected $user='anonymous';
protected $pwd='';
protected $mode=FTP_BINARY;
protected $port=21;
protected $timeout=90;
protected $pasv=TRUE;
protected function init(){
}
/**
* 建立ftp连接
*
*/
protected function connect(){
$this->ftpobj=@ftp_connect($this->host,$this->port,$this->timeout);
if(null==$this->ftpobj){
require_once 'Lyc/Ftp/Exception.class.php';
throw new Lyc_Ftp_Exception("FTP ERROR : Couldn't connect to $this->host");
}
}
/**
* 建立ssl ftp连接
*
*/
protected function connectSsl(){
$ftpobj=@ftp_ssl_connect($this->host,$this->port,$this->timeout);
if(null==$ftpobj){
require_once 'Lyc/Ftp/Exception.class.php';
throw new Lyc_Ftp_Exception("FTP ERROR : Couldn't connect to $this->host");
}
}
/**
* 登录验证ftp 及设置模式
*
*/
protected function login(){
if(@ftp_login($this->ftpobj,$this->user,$this->pwd)){
ftp_pasv($this->ftpobj,$pasv);
}else{
require_once 'Lyc/Ftp/Exception.class.php';
throw new Lyc_Ftp_Exception("FTP ERROR : Couldn't login to $this->host");
}
}
/**
* 上传文件
*
*/
public function upload($remotefile,$localfile){
}
/**
* 下载文件
*
*/
public function download($localfile,$remotefile){
}
/**
* 关闭连接
*
*/
public function close(){
if(is_string($this->ftpobj)){
ftp_close($this->ftpobj);
}
}
}
?>
二、Lyc\Ftp\Ftp.class.php 实现类
<?php
/* author:凹凸曼(lyc)
/* email: jar-c@163.com
/* time : 2011-04-22
/*
*/
require_once 'Lyc/Ftp/Abstract.class.php';
class Lyc_Ftp_Ftp extends Lyc_Ftp_Abstract{
public function __construct($host,$user,$pwd,$mode=FTP_BINARY,$port=21,$timeout=90,$pasv=TRUE){
$this->host=$host;
$this->user=$user;
$this->pwd=$pwd;
$this->mode=$mode;
$this->port=$port;
$this->timeout=$timeout;
$this->pasv=$pasv;
$this->init();
}
protected function init(){
$this->connect();
$this->login();
}
/**
* 上传文件
*
*/
public function upload($remotefile,$localfile){
$res=ftp_nb_put($this->ftpobj,$remotefile,$localfile,$this->mode,ftp_size($this->ftpobj,$remotefile));
while($res==FTP_MOREDATA){
$res=ftp_nb_continue($this->ftpobj);
}
if($res!=FTP_FINISHED){
return FALSE;
}
return TRUE;
}
/**
* 下载文件
*
*/
public function download($localfile,$remotefile){
ftp_set_option($this->ftpobj,FTP_AUTOSEEK,FALSE);
$res=ftp_nb_get($this->ftpobj,$localfile,$remotefile,$this->mode,ftp_size($this->ftpobj,$localfile));
while($res==FTP_MOREDATA){
$res=ftp_nb_continue($this->ftpobj);
}
if($res!=FTP_FINISHED){
return FALSE;
}
return TRUE;
}
}
?>
三、Lyc\Exception.class.php 异常基类
<?php
/* author:凹凸曼(lyc)
/* email: jar-c@163.com
/* time : 2011-04-22
/*
*/
class Lyc_Exception extends Exception{
}
?>
四、Lyc\Ftp\Exception.class.php FTP异常类
<?php
/* author:凹凸曼(lyc)
/* email: jar-c@163.com
/* time : 2011-04-22
*/
require_once 'Lyc/Exception.class.php';
class Lyc_Ftp_Exception extends Lyc_Exception{
}
?>
五、测试区
<?php
/**
* 上传文件
*
*/
public function uploadTest(){
require_once 'Lyc/Ftp/Ftp.class.php';
$host=23.64.41.13'; //主机
$user='tguser'; //用户名
$pwd=""; //密码 端口默认21 也可改
$ftp=new Lyc_Ftp_Ftp($host,$user,$pwd);
$res=$ftp->upload('test.rar',"F:\\wwwroot\\testarea\\Lyc\\Test\\test.rar");
if(!$res){
echo " upload failure";
}
}
public function downloadTest(){
require_once 'Lyc/Ftp/Ftp.class.php';
$host=33.64.41.135';
$user='tguser';
$pwd="";
$ftp=new Lyc_Ftp_Ftp($host,$user,$pwd);
$res=$ftp->download("c:\\test.rar","test.rar");
if(!$res){
echo "download failure";
}
}
对应上面的实现FTP的功能都基础的,还有更大的比如FTP目录列表及文件,还有改变目录,选择需要下载的文件,
上面的可以扩展一下就行了
本文出自 “凹凸曼” 博客,请务必保留此出处 http://www.apoyl.com/?p=533
Tag:
日志信息 »
该日志于2011-04-22 01:46由 凹凸曼 发表在PHP分类下,
评论已关闭。
目前盖楼


