程序功能:能够将FTP上的文件目录拷贝到本地目录,能够递归获取目录及文件内容,同时保持目录结构不变

1,在安装php时,加入ftp 扩展 ./configure –enable-ftp
2,涉及到php的ftp有关函数包括:ftp_connect(), ftp_login(),ftp_chdir(),ftp_nlist()等,这些函数的用法请参看php手册
3,使用步骤:

/**
* ftpInfo包括ftp_ip, ftp_port, ftp_user, ftp_passwd等信息
*/
$resFtpHandler = ftp_init($ftpInfo);
if ($resFtpHandler === false)
{
die("FTP Connect error.");
}
$bolDownloadRes = ftp_download_directory($resFtpHandler, $ftpDir,$yourLocalDir);

代码如下:

/**
* @brief 初始化FTP连接
* @param $ftpInfo
* @return resource  ftp连接句柄
*/
function ftp_init($ftpInfo)
{
$resFtpHandler = ftp_connect($ftpInfo['ftp_ip'], $ftpInfo['ftp_port'], 90);
if ($resFtpHandler === false)
{
return false;
}
$bolFtpLogin = ftp_login($resFtpHandler, $ftpInfo['ftp_user'], $ftpInfo['ftp_passwd']);
if ($bolFtpLogin === false)
{
return false;
}
return $resFtpHandler;
}
/**
* @brief FTP下载目录,将目录下载到本地
* @param $strSrcDirectoryName FTP目录名
* @param $strDestDirectoryName 本地保存的目录地址
* @return boolean (true|false)
*/
function ftp_download_directory($resFtpHandler, $strSrcDirectoryName, $strDestDirectoryName = null)
{
if (is_null($resFtpHandler))
{
return false;
}
if (is_null($strDestDirectoryName) === false)
{
if (is_dir($strDestDirectoryName) === false)
{
$bolRes = mkdir($strDestDirectoryName, 0777, true);
}
chdir($strDestDirectoryName);
}
if ($strSrcDirectoryName != '.')
{
if (@ftp_chdir($resFtpHandler, $strSrcDirectoryName) === false)
{
//是文件,直接拷贝
$bolRes =  ftp_get($resFtpHandler, $strSrcDirectoryName, $strSrcDirectoryName, FTP_BINARY);
if ($bolRes === false)
{
return false;
}
return true;
}
if (is_null($strDestDirectoryName))
{
if (is_dir($strSrcDirectoryName) === false)
{
$bolRes = mkdir($strSrcDirectoryName, 0777, true);
}
chdir($strSrcDirectoryName);
}
}
$arrChildDirectory = ftp_nlist($resFtpHandler, '.');
/** 空目录 直接返回上层目录 */
if ($arrChildDirectory === false)
{
ftp_chdir($resFtpHandler, '..');
chdir('..');
return false;
}
foreach ($arrChildDirectory as $strChildDirectory)
{
if ($strChildDirectory == '.' || $strChildDirectory == '..')
{
continue;
}
//如果是目录, 进行递归
if (@ftp_chdir($resFtpHandler, $strChildDirectory) === true)
{
ftp_chdir($resFtpHandler, '..');
ftp_download_directory($resFtpHandler, $strChildDirectory);
}
else
{
//不是目录,是文件,直接下载
//echo "current directory ".getcwd()."\n";
//echo "ftp currecnt directory ".ftp_pwd($resFtpHandler)."\n";
$bolRes =  ftp_get($resFtpHandler, $strChildDirectory, $strChildDirectory, FTP_BINARY);
if ($bolRes === false)
{
return false;
}
}
}
ftp_chdir($resFtpHandler, '..');
chdir('..');
return true;
}

本文地址:http://www.yaronspace.cn/blog/index.php/archives/572

来自yaronspace.cn  本文链接:http://yaronspace.cn/blog/archives/572