当前位置: 首页 > 工具软件 > FTP for PHP > 使用案例 >

PHP FTP下载服务器文件流程

宗政博
2023-12-01

1.连接ftp服务器conn.php


$host='xxx.xxx.xxx.xxx';
$user='xxx';
$pass='xxx';

$conn=ftp_connect($host,21);

if(!$conn){
	exit('不能连接到服务器');
}

echo '连接到服务器...<br/>';

$result=@ftp_login($conn,$user,$pass);

if(!$result){
	exit('不能登陆到服务器,用户'.$user);
}

echo '用户'.$user.'已登录...<br />';

2.下载主程序download.php

 

include("./conn.php");

//设置为0不限制脚本执行时间
ini_set('max_execution_time', 0);

$dir=@strip_tags(trim($_GET['dir']));
$act=@strip_tags(trim($_GET['act']));

if(empty($dir)){
	$dir='./';
}

if(empty($act)){
	$act='index';
}

switch($act){
	case 'index':
		//获取登陆的ftp目录
		$flist=ftp_nlist($conn,$dir);
		foreach($flist as $k=>$v) {
			echo '<a href="/bak/download.php?dir='.$v.'">'.$v.'</a><a href="/bak/download.php?dir='.$v.'&act=downl">下载</a><br />';
		}
		break;
	case 'downl':
		$local="D:/www/bak/bak";
		$remote=str_replace('./','/',$dir);
		//ftp_set_option($conn,FTP_TIMEOUT_SEC,100000);//设置超时时间 
		$arr=download_file($conn,$local,$remote);
		ftp_quit($conn); 
		print_r($arr);
		
		break;
}

function download_file($conn,$local,$remote) {

	static $error=array();
	
	//列出远程目录的文件名(含子目录),存储在数组中 
	$flist=ftp_nlist($conn,$remote);
	$size=sizeof($flist);
	echo "进入远程目录:".$remote."...<br/>";

	for($i=0;$i<$size;$i++){ 

		//跳过'.','..'这两个目录  
		if(!in_array($flist[$i],array('.','..'))){
			
			//判断是目录还是文件 是文件直接下载
			//用ftp_rawlist,返回结果会告诉你,是文件还是文件夹,非要用ftp_nlist的话,就循环判断返回值里面的ftp_size,如果是文件夹,会返回-1,但是效率没有ftp_rawlist来得高
			$ret=ftp_size($conn,$flist[$i]);
			
			if($ret=='-1'){//是目录时继续循环
				
				//本地目录不存在就创建一个
				if(!file_exists($local.$flist[$i])){
					//递归创建目录 注:此函数的第三个参数仅限于php5.0以后版本 如果更低版本可用递归循环创建
					echo "创建本机目录:".$local.$flist[$i]."/...<br/>";
					mkdir($local.$flist[$i], 0700 ,true);
				}
				
				//可以查看当前复制目录 不是必须
				if(ftp_chdir($conn,$flist[$i])){
					echo "进入远程目录:".ftp_pwd($conn)."/...<br/>";
				}
				
				download_file($conn,$local,$flist[$i]);
				echo "远程目录:".$flist[$i]."结束...<br/><br/>";

			}else{ //文件直接下载
				
				$basedir=dirname($flist[$i]);
				
				if(!file_exists($local.$basedir)){
					echo "创建本机目录:".$basedir."/...<br/>";
					mkdir($local.$basedir, 0700 ,true);
				}

				if(ftp_get($conn,$local.$flist[$i],$flist[$i],FTP_BINARY)){
					echo "<br/>".$flist[$i]."下载成功";
				}else { 
					echo "<br/>".$flist[$i]."下载失败";
					$error[]=$flist[$i];
				}

			}

		}

	}

	return $error;

}

下载流程如上,里面可自由添加下载时间统计、滚动信息显示、主动被动模式选择等,用来一键备份网站时可以将数据库表一键打包下载下来

 类似资料: