代码:<?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文件的时候没事,没有报错,正常下载。

解决方案 »

  1.   

    登进系统看下是不是权限的原因。
    一般情况下无法创建目录,多半是权限的原因。另:你这是windows系统?怎么感觉不是在建目录,而是盘符?还是目录的名字就是这样设计的
      

  2.   

    sorry,刚没看清,是递归建目录的。也就是碰到不存在的父目录,也会一并新建吧
      

  3.   

    对了,请问关于权限的原因我不是很明白,因为咱在php中有一个权限的设置,ftp貌似也有权限的设置,哪个会影响我创建目录呢?我个人感觉程序中的权限影响最大吧,但是我已经给了0777了,0700也试过,有点迷糊,人家说我应该提升ftp用户的权限,我在想,我在本地建立目录与远程ftp权限会有关系么?
      

  4.   

    类似这样一个输出E:\mail\2011-09-19/backup/2011-09/1315472555.6155.21120,S=2377.eml目录创建失败!
    在程序中是 fileget的方法好像出现了问题,不明白,只是多加了一层目录而已。。
      

  5.   

    E:\mail\2011-09-19/backup/2011-09/1315472555.6155.21120,S=2377.eml斜杠和反斜杠的问题吧
      

  6.   

    如果程序没错的话,那就是ftp的账号没有创建目录的权限