我在使用此函数进行递归时遇到了一些困难:
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()
检查中将它们检测为目录?我错过了什么?
答案 0 :(得分:0)
根据Marc的建议,我可以使用以下方法解决此问题:
if (@ftp_chdir($conn_id, $file)) { ... }
谢谢Marc!