復制代碼 代碼如下:
/*
用ftp_nlist()函授時,返回的數組值會有兩種類型:因服務器不同而異
a:單獨的文件名
b:包含目錄的文件名。
如果挪用,請注意更改此處。
*/
<?php
function download_file($dir,$fc,$_FILE_)
{
$fn=ftp_nlist($fc,".");//列出該目錄的文件名(含子目錄),存儲在數組中
$size=sizeof($fn);
$dir=($dir=="")?$dir:('/'.$dir);
$_FILE_=$_FILE_.$dir;
echo $_FILE_."<br/>";
for($i=0;$i<$size;$i++)
{
if(ereg('^[a-zA-Z0-9_]+',$fn[$i])) //提取是文件和目錄,剔除.,..這兩個目錄
{
if(ereg('^[a-zA-Z0-9_]+([a-zA-Z0-9-]*.*)(\.+)',$fn[$i])) //是文件時直接下載
{
if(ftp_get($fc,$fn[$i],$fn[$i],FTP_BINARY))
{
echo "<br/>下載".getcwd()."/".$fn[$i]."成功<br/>";
}
else
{
echo "<br/>下載".getcwd()."/".$fn[$i]."失敗<br/>";
}
}//文件下載結束
else //"是目錄,進入目錄,再讀取文件";
{
if(!file_exists($fn[$i]))
mkdir($fn[$i], 0700);//本地機器上該目錄不存在就創建一個
if(ftp_chdir($fc,$fn[$i]))
chdir($fn[$i]);
echo "當前的目錄是:".getcwd()."<br/>";// 更好的看清當前目錄
download_file($fn[$i],$fc,$_FILE_);//遞歸進入該目錄下載文件
}
}//提取文件,目錄結束
}//for循環結束
ftp_cdup($fc);//ftp服務器返回上層目錄
chdir(dirname($_FILE_));
}//download——file()函數結束
$_FILE_="本地機絕對地址";//例如c:/download,不要這樣c:/download/
$hostname="服務器名";
$loginname="用戶名";
$password="用戶密碼";
$fc=ftp_connect($hostname,"21") or die("Couldn't connect to $hostname");
$fc_rw=ftp_login($fc,$loginname,$password);
ftp_set_option($fc,FTP_TIMEOUT_SEC,100000);//設置超時時間
$dir="";chdir($_FILE_);//進入本地機絕對地址目錄
download_file($dir,$fc,$_FILE_);
ftp_quit($fc);
//從服務器下載文件樹的程序
?>
希望能給大家帶去幫助,謝謝