代码:<?php $remote_addr = 'xxx.xxx.xx.xx'; //remote远程
$user_name = 'xxxxxxxx';
$user_pwd = 'xxxxxxx';
$dir_prefix = 'E:\\mail\\'. date('Y-m-d'); //prefix前缀
recursive_mkdir($dir_prefix); //recursive递归
$cid = ftp_connect($remote_addr) or die("Couldn't connect to server"); //建立ftp新连接
if (@ftp_login($cid, $user_name, $user_pwd))
{
$filelist = filecollect($cid); //collect收集
foreach($filelist as $remote_file)
{
$local_file = $dir_prefix . substr($remote_file,1); //local_file 本地文件
echo $local_file .'<br>';
fileget($cid,$local_file,$remote_file);
}
}
// close the connection
ftp_close($cid);
//递归方式读取目录中的文件
function filecollect($cid,$dir='.')
{
static $flist=array();
if ($files = ftp_nlist($cid,$dir)) //ftp_nlist返回给定目录的文件列表(ftp连接标识符,检查目录)
{
foreach ($files as $file)
{
if (ftp_size($cid, $file) == "-1")
{
filecollect($cid,$file);
}
else
{
$flist[] = $file;
}
}
}
return $flist;
}
//创建目录并下载文件
function fileget($cid,$local_file, $server_file)
{
//目录不存在就创建
if (!file_exists (dirname($local_file)))
{
if (!@mkdir (dirname($local_file), 0777))
{
die($local_file."目录创建失败!");
}
}
if (ftp_get($cid, $local_file, $server_file, FTP_BINARY))
{
echo "传输成功\n";
}
else
{
echo "传输失败\n";
}
//chmod($local_file,0666);
}
function recursive_mkdir( $folder )
{
$folder = explode( DIRECTORY_SEPARATOR , $folder );
$mkfolder = '';
for( $i=0 ; isset( $folder[$i] ) ; $i++ )
{
$mkfolder .= $folder[$i];
if( !is_dir( $mkfolder ) )
mkdir( "$mkfolder" , 0777,true);
$mkfolder .= DIRECTORY_SEPARATOR;
}
} ?>
是这样 ,我在ftp有一个几个文件例如 a ,b,c,d 我想做定时备份,使用计划任务触发,我单一设置ftp根目录为A 程序可以下载其中所有文件,但是我想做的备份是abcd四个文件夹,于是我建立文件夹E,将abcd全都放进去,然后改ftp根目录为E,再次运行程序,却无法创建目录,不知道和解,也没有报错,急煞我也。 有朋友说是我的ftp用户的权限不够,不知道有没有关系,因为ftp不是我控制的,不方便随意更改,如果能确认一下的话,我在申请。
另提一下,单独下载目录A文件的时候没事,没有报错,正常下载。
$user_name = 'xxxxxxxx';
$user_pwd = 'xxxxxxx';
$dir_prefix = 'E:\\mail\\'. date('Y-m-d'); //prefix前缀
recursive_mkdir($dir_prefix); //recursive递归
$cid = ftp_connect($remote_addr) or die("Couldn't connect to server"); //建立ftp新连接
if (@ftp_login($cid, $user_name, $user_pwd))
{
$filelist = filecollect($cid); //collect收集
foreach($filelist as $remote_file)
{
$local_file = $dir_prefix . substr($remote_file,1); //local_file 本地文件
echo $local_file .'<br>';
fileget($cid,$local_file,$remote_file);
}
}
// close the connection
ftp_close($cid);
//递归方式读取目录中的文件
function filecollect($cid,$dir='.')
{
static $flist=array();
if ($files = ftp_nlist($cid,$dir)) //ftp_nlist返回给定目录的文件列表(ftp连接标识符,检查目录)
{
foreach ($files as $file)
{
if (ftp_size($cid, $file) == "-1")
{
filecollect($cid,$file);
}
else
{
$flist[] = $file;
}
}
}
return $flist;
}
//创建目录并下载文件
function fileget($cid,$local_file, $server_file)
{
//目录不存在就创建
if (!file_exists (dirname($local_file)))
{
if (!@mkdir (dirname($local_file), 0777))
{
die($local_file."目录创建失败!");
}
}
if (ftp_get($cid, $local_file, $server_file, FTP_BINARY))
{
echo "传输成功\n";
}
else
{
echo "传输失败\n";
}
//chmod($local_file,0666);
}
function recursive_mkdir( $folder )
{
$folder = explode( DIRECTORY_SEPARATOR , $folder );
$mkfolder = '';
for( $i=0 ; isset( $folder[$i] ) ; $i++ )
{
$mkfolder .= $folder[$i];
if( !is_dir( $mkfolder ) )
mkdir( "$mkfolder" , 0777,true);
$mkfolder .= DIRECTORY_SEPARATOR;
}
} ?>
是这样 ,我在ftp有一个几个文件例如 a ,b,c,d 我想做定时备份,使用计划任务触发,我单一设置ftp根目录为A 程序可以下载其中所有文件,但是我想做的备份是abcd四个文件夹,于是我建立文件夹E,将abcd全都放进去,然后改ftp根目录为E,再次运行程序,却无法创建目录,不知道和解,也没有报错,急煞我也。 有朋友说是我的ftp用户的权限不够,不知道有没有关系,因为ftp不是我控制的,不方便随意更改,如果能确认一下的话,我在申请。
另提一下,单独下载目录A文件的时候没事,没有报错,正常下载。
一般情况下无法创建目录,多半是权限的原因。另:你这是windows系统?怎么感觉不是在建目录,而是盘符?还是目录的名字就是这样设计的
在程序中是 fileget的方法好像出现了问题,不明白,只是多加了一层目录而已。。