PHP ftp_get是递归的

时间:2014-07-29 18:41:19

标签: php recursion ftp

我在使用此函数进行递归时遇到了一些困难:

function fetchFiles($src_dir, $dst_dir) {
  global $conn_id;

  $src_dir = rtrim($src_dir, '/');
  $dst_dir = rtrim($dst_dir, '/');

  echo "fetching $src_dir into $dst_dir<br>";

  if(!is_dir($dst_dir)){
    mkdir($dst_dir);
    echo "create dir <b><u> $dst_dir </u></b><br>";
  } else echo "dir exists<br>";

  ftp_chdir($conn_id, $src_dir);
  $contents = ftp_nlist($conn_id, '.');
  foreach($contents as $file) {
    if ($file != "." && $file != "..") {
      if (is_dir($file)) {
        echo "fetch directory ".$src_dir."/".$file."<br>";
        fetchFiles($src_dir."/".$file, $dst_dir."/".$file);
      } else {
        ftp_get($conn_id, $dst_dir."/".$file, $src_dir."/".$file, FTP_BINARY);
        echo "create files::: <b><u>".$dst_dir."/".$file ." </u></b><br>";
      }
    }
    ob_flush();
    flush();
  }
}

我这样称呼它:

$uploads = "/web/content/wp-content/uploads/";
$local_base = "../wp-content/uploads/";
fetchFiles($uploads, $local_base);

uploads目录有很多文件,传输没有任何问题。还有一个名为&#39; 2011&#39;的文件夹,也可以创建。但是,&#39; 2011&#39;中的文件夹被检测为文件。输出说:

create files::: /web/content/wp-content/uploads/2011/02
create files::: /web/content/wp-content/uploads/2011/10
create files::: /web/content/wp-content/uploads/2011/12

&#39; 02&#39;,&#39; 10&#39;,&#39; 12&#39;都是子目录,里面有文件。为什么它没有在is_dir()检查中将它们检测为目录?我错过了什么?

1 个答案:

答案 0 :(得分:0)

根据Marc的建议,我可以使用以下方法解决此问题:

if (@ftp_chdir($conn_id, $file)) { ... }

谢谢Marc!