PHP -FTP 서브 디렉토리 재귀 적?
-
06-07-2019 - |
문제
아래 코드는 디렉토리를 재귀 적으로 성공적으로 다운로드 할 수있는 불면증이 작동합니다. 그러나이 디렉토리 내의 디렉토리를 다운로드하고 싶습니다. 따라서 연결할 때 들어갑니다. 내 . 디렉토리는 "in"하위 디렉토리입니다. IN 디렉토리 내의 내용을 재귀 적으로 검색하고 싶습니다. 디렉토리 이름 자체가 변경되므로 스크립트 자체에 무엇이 될지 지정할 수 없습니다. 누구 든지이 작업을 수행하는 방법을 알고 있습니까?
ftp_sync ("./In/");
ftp_close($conn_id);
function ftp_sync ($dir) {
global $conn_id;
if ($dir != ".") {
if (ftp_chdir($conn_id, $dir) == false) {
echo ("Change Dir Failed: $dir<BR>\r\n");
return;
}
if (!(is_dir($dir)))
mkdir($dir);
chdir ($dir);
}
$contents = ftp_nlist($conn_id, "./In/");
foreach ($contents as $file) {
if ($file == '.' || $file == '..')
continue;
if (@ftp_chdir($conn_id, $file)) {
ftp_chdir ($conn_id, "..");
ftp_sync ($file);
}
else
ftp_get($conn_id, $file, $file, FTP_BINARY);
}
ftp_chdir ($conn_id, "..");
chdir ("..");
}
해결책
당신은 사용할 수 있습니다 RecursiveDirectoryIterator
수업:
$ite=new RecursiveDirectoryIterator("/path/");
$bytestotal=0;
$nbfiles=0;
foreach (new RecursiveIteratorIterator($ite) as $filename=>$cur) {
$filesize=$cur->getSize();
$bytestotal+=$filesize;
$nbfiles++;
echo "$filename => $filesize\n";
}
도난당한 예 http://www.php.net/manual/en/class.recursivedirectoryiterator.php, 당신의 취향에 맞게 수용하십시오.
다른 팁
다음 코드를 사용할 수 있습니다.
public static function download($local_dir, $remote_dir, $ftp_conn) {
if ($remote_dir != ".") {
if (ftp_chdir($ftp_conn, $remote_dir) == false) {
echo ("Change Dir Failed: $remote_dir \n");
return;
}
if ( !(is_dir($remote_dir)) ){
mkdir($remote_dir);
echo "-> Folder created: ".$remote_dir." \n";
}
chdir($remote_dir);
}
$contents = ftp_nlist($ftp_conn, ".");
foreach ($contents as $file) {
if ($file == '.' || $file == '..') continue;
if (@ftp_chdir($ftp_conn, $file)) {
ftp_chdir($ftp_conn, "..");
ftpmanager::download($local_dir."/".$file, $file, $ftp_conn);
}
else {
echo "----> path for local file: "."$local_dir/$file"." \n";
echo "----> path for remote file: ".$file." \n";
ftp_get($ftp_conn, "$local_dir/$file", "$file", FTP_BINARY);
echo "-> Downloaded file: ".$local_dir."/".$file." \n";
}
}
ftp_chdir($ftp_conn, "..");
chdir("..");
}
이 정적 함수를 객체에 삽입하고 호출하십시오.
myobject::download( $sBackUpFullCurrentPath, '.', $rConnection );
이것이 당신이나 다른 사람들에게 도움이되기를 바랍니다.
제휴하지 않습니다 StackOverflow