`
hudeyong926
  • 浏览: 2035238 次
  • 来自: 武汉
社区版块
存档分类
最新评论

FTP类

 
阅读更多
<?php
/**
 * FTP操作类
 * @author chenzhouyu
 *
 *使用$ftps = pc_base::load_sys_class('ftps');进行初始化。
 *首先通过 $ftps->connect($host,$username,$password,$post,$pasv,$ssl,$timeout);进行FTP服务器连接。
 *通过具体的函数进行FTP的操作。
 *$ftps->mkdir() 创建目录,可以创建多级目录以“/abc/def/higk”的形式进行多级目录的创建。
 *$ftps->put()上传文件
 *$ftps->rmdir()删除目录
 *$ftps->f_delete()删除文件
 *$ftps->nlist()列出指定目录的文件
 *$ftps->chdir()变更当前文件夹
 *$ftps->get_error()获取错误信息
 */
class ftps {
	//FTP 连接资源
	private $link;
	//FTP连接时间
	public $link_time;
	//错误代码
	private $err_code = 0;
	//传送模式{文本模式:FTP_ASCII, 二进制模式:FTP_BINARY}
	public $mode = FTP_BINARY;
	
	/**
	 * 连接FTP服务器
	 * @param string $host       服务器地址
	 * @param string $username   用户名
	 * @param string $password   密码
	 * @param integer $port       服务器端口,默认值为21
	 * @param boolean $pasv        是否开启被动模式
	 * @param boolean $ssl      是否使用SSL连接
	 * @param integer $timeout     超时时间 
	 */
	public function connect($host, $username = '', $password = '', $port = '21', $pasv = false, $ssl = false, $timeout = 30) {
		$start = time();
		if ($ssl) {
			if (!$this->link = @ftp_ssl_connect($host, $port, $timeout)) {
				$this->err_code = 1;
				return false;
			}
		} else {
			if (!$this->link = @ftp_connect($host, $port, $timeout)) {
				$this->err_code = 1;
				return false;
			}
		}
		
		if (@ftp_login($this->link, $username, $password)) {
			if ($pasv) ftp_pasv($this->link, true);
			$this->link_time = time()-$start;
		   return true;
		} else {
			$this->err_code = 1;
		   return false;
		}
		register_shutdown_function(array(&$this,'close'));
	}
	
	/**
	 * 创建文件夹
	 * @param string $dirname 目录名,
	 */
	public function mkdir($dirname) {
		if (!$this->link) {
			$this->err_code = 2;
			return false;
		} 
		$dirname = $this->ck_dirname($dirname);
		$nowdir = '/';
		foreach ($dirname as $v) {
			if ($v && !$this->chdir($nowdir.$v)) {
				if ($nowdir) $this->chdir($nowdir);
				@ftp_mkdir($this->link, $v);
			}
			if($v) $nowdir .= $v.'/';
		}
		return true;
	}
	
	/**
	 * 上传文件
	 * @param string $remote 远程存放地址
	 * @param string $local 本地存放地址
	 */
	public function put($remote, $local) {
		if (!$this->link) {
			$this->err_code = 2;
			return false;
		} 
		$dirname = pathinfo($remote,PATHINFO_DIRNAME);
		if (!$this->chdir($dirname)) {
			$this->mkdir($dirname);
		}
		if (@ftp_put($this->link, $remote, $local, $this->mode)) {
			return true;
		} else {
			$this->err_code = 7;
			return false;
		}
	}
	
	/**
	 * 删除文件夹
	 * @param string $dirname  目录地址
	 * @param boolean $enforce 强制删除
	 */
	public function rmdir($dirname, $enforce = false) {
		if (!$this->link) {
			$this->err_code = 2;
			return false;
		} 
		$list = $this->nlist($dirname);
		if ($list && $enforce) {
			$this->chdir($dirname);
			foreach ($list as $v) {
				$this->f_delete($v);
			}
		} elseif ($list && !$enforce) {
			$this->err_code = 3;
			return false;
		}
		@ftp_rmdir($this->link, $dirname);
		return true;
	}
	
	/**
	 * 删除指定文件
	 * @param string $filename 文件名
	 */
	public function f_delete($filename) {
		if (!$this->link) {
			$this->err_code = 2;
			return false;
		} 
		if (@ftp_delete($this->link, $filename)) {
			return true;
		} else {
			$this->err_code = 4;
			return false;
		}
	}
	
	/**
	 * 返回给定目录的文件列表
	 * @param string $dirname  目录地址
	 * @return array 文件列表数据
	 */
	public function nlist($dirname) {
		if (!$this->link) {
			$this->err_code = 2;
			return false;
		} 
		if ($list = @ftp_nlist($this->link, $dirname)) {
			return $list;
		} else {
			$this->err_code = 5;
			return false;
		}
	}
	
	/**
	 * 在 FTP 服务器上改变当前目录
	 * @param string $dirname 修改服务器上当前目录
	 */
	public function chdir($dirname) {
		if (!$this->link) {
			$this->err_code = 2;
			return false;
		} 
		if (@ftp_chdir($this->link, $dirname)) {
			return true;
		} else {
			$this->err_code = 6;
			return false;
		}
	}
	
	/**
	 * 获取错误信息
	 */
	public function get_error() {
		if (!$this->err_code) return false;
		$err_msg = array(
			'1'=>'Server can not connect',
			'2'=>'Not connect to server',
			'3'=>'Can not delete non-empty folder',
			'4'=>'Can not delete file',
			'5'=>'Can not get file list',
			'6'=>'Can not change the current directory on the server',
			'7'=>'Can not upload files'
		);
		return $err_msg[$this->err_code];
	}
	
	/**
	 * 检测目录名
	 * @param string $url 目录
	 * @return 由 / 分开的返回数组
	 */
	private function ck_dirname($url) {
		$url = str_replace('\\', '/', $url);
		$urls = explode('/', $url);
		return $urls;
	}
	
	/**
	 * 关闭FTP连接
	 */
	public function close() {
		return @ftp_close($this->link);
	}
} 

 阿斯

分享到:
评论
1 楼 fc_lamp 2012-02-21  
娃哈哈。。我看到PHPCMS了。。。

相关推荐

    FTP类模块(VB.net)

    ### VB.NET中的FTP类模块详解 #### 模块概述 在VB.NET环境下开发的应用程序,如果需要实现与FTP服务器交互的功能,例如上传、下载文件,创建或删除目录等操作时,可以利用专门编写的FTP类模块来简化这些过程。本文...

    vc++ FTP类,支持防火墙设置.zip

    这个"vc++ FTP类,支持防火墙设置.zip"压缩包显然包含了用Visual C++编写的FTP客户端实现,它允许用户通过可能存在的防火墙进行FTP传输。下面我们将详细探讨FTP的基本原理,以及如何在VC++中实现防火墙支持。 FTP...

    FTP类,支持防火墙设置.zip_FTP 类_ftp_ftp vc_防火墙

    FTP类,支持防火墙设置,在vc上面测试通过,可以放心使用

    PHP操作FTP类

    PHP操作FTP类,可以用PHP去操作ftp上的文件等各种操作

    Windows Mobile下的FTP类实现

    本篇主要介绍如何在Windows Mobile环境下实现一个FTP类,以便进行文件传输操作。 FTP类是用于封装FTP协议的客户端实现,它允许程序通过网络连接到FTP服务器,执行各种FTP命令,如登录、改变目录、列出目录内容、...

    MSDN上推荐的老外编写FTP类(VFP)

    标题中的“MSDN上推荐的老外编写FTP类(VFP)”指的是在微软开发网络(MSDN)上推荐的一个由非中国开发者编写的FTP类库,专为Visual FoxPro(VFP)编程环境设计。FTP(File Transfer Protocol)是一种网络协议,用于在...

    FTP.rar_asp.net_ftp类

    FTP类在ASP.NET中通常是自定义的,用于简化与FTP服务器的交互。在描述中提到的FTP操作类,可能包含了连接到FTP服务器、上传文件、下载文件、删除文件、创建目录、列出目录内容等常见FTP操作的方法。这些方法通常封装...

    VFP中用API做的FTP类

    在这个场景下,"VFP中用API做的FTP类"指的是一个开发者利用VFP编写的一个类,该类封装了FTP(文件传输协议)的相关操作,以便于在VFP程序中进行文件的上传、下载等任务。 FTP是Internet上广泛使用的协议,用于在...

    C#编写的FTP类

    在C#中编写一个FTP类可以为开发者提供一个方便、快捷的方式,来在应用程序中集成文件传输功能。下面将详细介绍这个C#编写的FTP类的功能和使用方法。 首先,这个FTP类能够建立与FTP服务器的连接。建立连接是使用FTP...

    php的操作ftp类.zip

     $this-&gt;conn_id = @ftp_connect($FTP_HOST,$FTP_PORT) or die("FTP服务器连接失败");  @ftp_login($this-&gt;conn_id,$FTP_USER,$FTP_PASS) or die("FTP服务器登陆失败");  @ftp_pasv($this-&gt;conn_id,1); ...

    花了点时间弄了个带相应事件的FTP类(C#)再次修改后的

    标题“花了点时间弄了个带相应事件的FTP类(C#)再次修改后的”表明我们正在讨论一个经过多次优化的C# FTP类,它具有事件处理机制。事件处理在编程中非常常见,特别是在需要对特定操作进行回调或者异步操作时,它...

    C#的FTP类,包括上传下载更名等

    本篇将详细阐述C#中的FTP类及其核心功能。 首先,C#中并没有一个直接的FTP类,但我们可以使用`System.Net.FtpWebRequest`和`System.Net.FtpWebResponse`类来实现FTP操作。这两个类是.NET Framework的一部分,位于`...

    C#封装的完整FTP类

    C#封装的FTP类是一个强大的工具,用于在客户端和FTP服务器之间进行文件传输。这个类提供了丰富的功能,包括建立FTP连接、支持代理服务器、文件上传和下载(同步和异步)、进度显示、目录操作以及文件的重命名和删除...

    C# VS2003 FTP类(开源)

    在这个背景下,"C# VS2003 FTP类(开源)"的出现为开发者提供了一种解决方案,它允许在Visual Studio 2003环境下通过C#语言进行FTP文件传输。 FTP类库通常是基于低级别的Socket编程实现的,因为它需要直接与FTP...

    java_ftp类开发ftp服务器

    本篇文章将深入探讨如何使用Java的FTP类来开发一个FTP服务器,以及相关的知识点。 首先,Java中的FTP功能主要依赖于`java.net`和`java.io`这两个核心包。在`java.net`包中,`Socket`类是建立网络连接的基础,而`...

    C# FTP类 上传下载

    在.NET框架中,C#提供了一个内置的FTP类——`System.Net.FtpWebRequest`,用于实现FTP(File Transfer Protocol)的客户端功能。本篇将详细讲解如何利用C#的FTP类进行文件的上传、下载、重命名以及删除操作。 ### ...

    php ftp 操作类

    PHP FTP类通常会提供设置模式的方法,例如`pasv()`和` aktiv()`,以适应不同网络环境。 6. **文件权限与类型**:虽然FTP协议本身不支持文件权限设置,但类可能包含获取文件或目录信息的方法,如`ftp_nlist()`,它...

    一个来自Discuz开源项目里的FTP类

    在这个场景中,我们关注的是一个源自Discuz开源项目中的FTP类。Discuz是一个基于PHP和MySQL的社区论坛软件,它包含了多种功能模块,其中之一就是通过FTP进行文件上传和下载。 FTP类在C#中通常用于构建应用程序,...

    比较好用的一个C#FTP类,源码

    #### 一、C# FTP类简介与应用场景 在现代软件开发过程中,文件传输协议(FTP)仍然是一种常见的用于在网络上进行文件传输的方法。本篇将介绍一个实用的C# FTP类——`FTPFactory`,它提供了一系列功能强大的方法来...

Global site tag (gtag.js) - Google Analytics