使用PHP的FTP整个目录具有递归功能

时间:2013-01-12 19:51:23

标签: php ftp

我正在开发一个代码,可以将更新文件的文件夹上传到多个网站。我一直在尝试使用以下功能将所有文件和文件夹上传到FTP帐户。在这种情况下,包含文件的本地文件夹名为“files”,所有文档都被上传到ftp帐户的父目录。

功能

function upload_dir($dirname,$conn_id) {
    $dir_array=array();
   if (is_dir($dirname))
      $dir_handle = opendir($dirname);
   if (!$dir_handle)
      return false;
   while($file = readdir($dir_handle)) {
      if ($file != "." && $file != "..") {
         if (!is_dir($dirname."/".$file)){
             $dirname2= str_replace('files','',$dirname);
             if($dirname2[0]=='/'){
                $dirname2 = substr($dirname2, 1);
             }
             ftp_put($conn_id, $dirname2."/".$file, $dirname."/".$file, FTP_BINARY);
         }
         else{
             $dirname2= str_replace('files','',$dirname);
             if($dirname2[0]=='/'){
                  $dirname2 = substr($dirname2, 1);
             }

             if(in_array($dirname2.'/'.$file, $dir_array)){
                 upload_dir($dirname.'/'.$file,$conn_id);
             }
             else{
                 array_push($dir_array, $dirname2.'/'.$file);
                 // check if directory exists before trying to create it
                    $filename = $dirname2.'/'.$file;
                    if (file_exists($filename)) {
                    } else {
                      ftp_mkdir($conn_id,$dirname2.'/'.$file);
                    }
                 upload_dir($dirname.'/'.$file,$conn_id);
             }
         }
      }
   }
   closedir($dir_handle);
   return true;
}

代码

// Ftp All data to new server
$ftp_server = "ftp.mywebsite.com";
// set up basic connection
$conn_id = ftp_connect($ftp_server); 
// login with username and password
$login_result = ftp_login($conn_id, 'username', 'password'); 
// check connection
if ((!$conn_id) || (!$login_result)) { 
$reply  = "FTP connection has failed!";
$reply .= "Attempted to connect to $ftp_server for user zerozill@".$option1; 
exit; 
} else {
$reply = "Connected to $ftp_server, for user annon";
upload_dir('files',$conn_id);
}
// close the FTP stream 
ftp_close($conn_id);

我遇到的问题是该功能大部分都有效但由于某种原因它有时会拒绝上传文件夹。例如,我有一个名为scripts的文件夹。每次运行此功能时,都不会上传脚本文件夹。它还会尝试将所有文​​件上传到该文件夹​​,从而创建脚本文件夹不存在的错误。我不知道我是否忽略了什么或什么,但是对此事的任何帮助都表示赞赏。

0 个答案:

没有答案