PHP FTP上传文件

42 篇文章 0 订阅
42 篇文章 0 订阅
第一步:建立一个新的 FTP 连接。
    ftp_connect(host,port,timeout);
    host必需,规定要连接的 FTP 服务器,可以是域名或 IP 地址,后面不应以斜线结尾,前面也不需要用 ftp:// 开头。
    port可选,规定 FTP 服务器的端口。
    timeout可选,规定该 FTP 服务器的超时时间,默认是 90 秒。
    返回值:若成功,则返回一个连接标识,否则返回 false。

第二步:登陆FTP。
    ftp_login(ftp_connection,username,password);
    ftp_connection必需,规定要使用的 FTP 连接(FTP 连接的标识符)。
    username必需,规定用于登录的用户名。
    password必需,规定用于登录的密码。
    返回值:若成功则返回 true,失败则返回 false 并发出一个警告。

第三步:改变 FTP 服务器上的当前目录或在 FTP 服务器上建立新目录。
    (1)改变 FTP 服务器上的当前目录。
    ftp_chdir(ftp_connection,directory);
    tp_connection必需,规定要使用的 FTP 连接(FTP 连接的标识符)。
    directory必需,规定要切换到的目录。
    返回值:若成功,则返回 true,否则返回 false,如果切换目录失败,PHP 还会发出一条警告。
    (2)在 FTP 服务器上建立新目录。
    ftp_mkdir(ftp_connection,dir);
    ftp_connection必需,规定要使用的 FTP 连接(FTP 连接的标识符)。
    dir必需,规定要创建的目录的名称。
    返回值:若成功,则返回 true,否则返回 false。

第四步:查看FTP当前目录。
    ftp_pwd(ftp_connection);
    ftp_connection必需,规定要使用的 FTP 连接(FTP 连接的标识符)。
    返回值:返回FTP的当前目录。

第五步:把文件上传到服务器。
    ftp_put(ftp_connection,remote,local,mode,resume);
    ftp_connection必需,规定要使用的 FTP 连接(FTP 连接的标识符)。
    remote必需,上传到服务器上的文件名。
    local,必需,规定要上传的本地文件的路径。
    mode必需,规定传输模式,可能的值有:FTP_ASCII、FTP_BINARY。
    resume必需,规定在本地文件中的何处开始拷贝,默认是0。
    返回值:若成功则返回 true,失败则返回 false。

第六步:关闭 FTP 连接。
    ftp_close(ftp_connection);
    ftp_connection必需,规定要使用的 FTP 连接(FTP 连接的标识符)。

 实例代码:
<?php
    $ftp_connection = ftp_connect('xxx.com',21,1000);
    ftp_login($ftp_connection, 'xxxName', 'xxxPWD');
    ftp_chdir($ftp_connection, '/blogs/test');
    //echo ftp_pwd($ftp_connection);
    $r = ftp_put($ftp_connection, 'romote.txt', './local.txt', FTP_BINARY);
    var_dump($r);
    ftp_close($ftp_connection);
?>

FTP相关的其他函数
(1)删除 FTP 服务器上的一个文件。
    ftp_delete(ftp_connection,path);
    ftp_connection必需,规定要使用的 FTP 连接(FTP 连接的标识符)。
    path必需,规定要删除的文件的路径。
    返回值:若成功,则返回 true,否则返回 false。
(2)获取文件的最后修改时间。
    ftp_login(ftp_connection,file);
    ftp_connection必需,规定要使用的 FTP 连接(FTP 连接的标识符)。
    file必需,规定要检查的文件。
    返回值:如:int 1338845458。
    注释:并非所有 FTP 服务器都支持该函数,该函数不适用于检查目录。
(3)删除目录。
    ftp_rmdir(ftp_connection,dir);
    ftp_connection必需,规定要使用的 FTP 连接(FTP 连接的标识符)。
    dir必需,规定要删除的目录。
    返回值:若成功,则返回 true,否则返回 false。
    注释:删除的目录下不能包含子目录和文件。
    
(4)设置 FTP 服务器上指定文件的权限
    ftp_chmod(ftp_connection,mode,file);
    ftp_connection必需,规定要使用的 FTP 连接(FTP 连接的标识符)。
    mode必需,规定新的权限。
    file必需,规定要修改权限的文件的名称。
    返回值:若成功,返回设置的权限值,否则返回false。

(5)获取指定目录的文件列表。
    ftp_nlist(ftp_connection,dir);
    ftp_connection必需,规定要使用的 FTP 连接(FTP 连接的标识符)。
    dir必需,规定要检查的目录,使用 '.' 来获得当前目录。
    返回值:若成功,则返回给定目录下的文件名组成的数组,否则返回 false。

示例代码:

<?php
/**
 * ftp上传文件类
 */
class Ftp {
	
	/**
	 * 测试服务器
	 * 
	 * @var array
	 */
	private $testServer = array(
		'host' => 'ip',
		'port' => 21,
		'user' => 'userName',
		'pwd' => 'password'
	);
	
	/**
	 * 打开并登录服务器
	 * 
	 * @param string $flag 服务器标识test
	 * @return mixed 
	 *				0:服务器连接失败
	 *				1:服务器登录失败
	 *				resource 连接标识
	 */
	public function openServer($flag = 'test'){
		//选择服务器
		$config = $this->getServerConfig($flag);
		
		//连接服务器
		$connect = ftp_connect($config['host'], $config['port']);
		if($connect == false) return 0;
		
		//登录服务器
		if(!ftp_login($connect, $config['user'], $config['pwd'])) return 1;
		
		//打开被动模式,数据的传送由客户机启动,而不是由服务器开始
		ftp_pasv($connect, true);
		
		//返回连接标识
		return $connect;
	}
	
	/**
	 * 创建目录并将目录定位到当请目录
	 * 
	 * @param resource $connect 连接标识
	 * @param string $dirPath 目录路径
	 * @return mixed 
	 *				2:创建目录失败
	 *				true:创建目录成功
	 */
	public function makeDir($connect, $dirPath){
		//处理目录
		$dirPath = '/' . trim($dirPath, '/');
		$dirPath = explode('/', $dirPath);
		foreach ($dirPath as $dir){
			if($dir == '') $dir = '/';
			//判断目录是否存在
			if(@ftp_chdir($connect, $dir) == false){
				//判断目录是否创建成功
				if(@ftp_mkDir($connect, $dir) == false){
					return 2;
				}
				@ftp_chdir($connect, $dir);
			}
		}
		return true;
	}
	
	/**
	 * 关闭服务器
	 * 
	 * @param resource $connect 连接标识
	 */
	public function closeServer($connect){
		if(!empty($connect)) ftp_close($connect);
	}
	
	/**
	 * 上传文件
	 * 
	 * @param string $flag 服务器标识
	 * @param string $local 上传文件的本地路径
	 * @param string $remote 上传文件的远程路径
	 * @return int 
	 * 				0:服务器连接失败 
	 * 				1:服务器登录失败
	 * 				2:创建目录失败
	 * 				3:上传文件失败
	 * 				4:上传成功
	 */
	public function upload($flag = 'test', $local, $remote){
		//连接并登录服务器
		$connect = $this->openServer($flag);
		if(($connect === 0) || ($connect === 1)) return $connect;
		
		//上传文件目录处理
		$mdr = $this->makeDir($connect, dirname($remote));
		if($mdr === 2) return 2;
		
		//上传文件
		$result = ftp_put($connect, basename($remote), $local, FTP_BINARY);
		
		//关闭服务器
		$this->closeServer($connect);
		
		//返回结果
		return (!$result) ? 3 : 4;
	}
	
	/**
	 * 删除文件
	 * 
	 * @param string $flag 服务器标识
	 * @param string $remote 文件的远程路径
	 * @return int 
	 * 				0:服务器连接失败 
	 * 				1:服务器登录失败
	 * 				2:删除失败
	 * 				3:删除成功
	 */
	public function delete($flag = 'test', $remote){
		//连接并登录服务器
		$connect = $this->openServer($flag);
		if(($connect === 0) || ($connect === 1)) return $connect;
		
		//删除
		$result = ftp_delete($connect, $remote);
		
		//关闭服务器
		$this->closeServer($connect);
		
		//返回结果
		return (!$result) ? 2 : 3;
	}
	
	/**
	 * 读取文件
	 * 
	 * @param string $flag 服务器标识
	 * @param string $remote 文件的远程路径
	 * @return mixed 
	 * 				0:服务器连接失败 
	 * 				1:服务器登录失败
	 */
	public function read($flag, $remote){
		//连接并登录服务器
		$connect = $this->openServer($flag);
		if(($connect === 0) || ($connect === 1)) return $connect;
		
		//读取
		$result = ftp_nlist($connect, $remote);
		
		//关闭服务器
		$this->closeServer($connect);
		
		//返回结果
		foreach ($result as $key => $value){
			if(in_array($value, array('.', '..'))) unset($result[$key]);
		}
		return array_values($result);
	}
	
	/**
	 * 获取ftp服务器配置
	 * 
	 * @param string $flag 服务器标识test
	 * @return array ftp服务器连接配置
	 */
	private function getServerConfig($flag = 'test'){
		$flag = strtolower($flag);
		//测试服务器
		if($flag == 'test') return $this->testServer;
		//默认返回测试服务器
		return $this->testServer;
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值