이 기사에서는 주로 폴더 복사, 삭제 및 보기 크기 작업의 PHP 재귀 구현을 소개합니다. PHP 공통 폴더 작업 기능과 결합된 PHP 재귀 알고리즘을 분석하여 폴더 복사, 삭제, 보기 및 기타 관련 구현 기술을 형식으로 구현합니다. 필요하신 친구들은 참고하시면 됩니다
이 글에서는 폴더 복사, 삭제, 크기 보기 작업을 반복적으로 구현하는 PHP의 예를 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.
PHP는 파일 크기, 복사, 연결 해제와 같은 파일 작업에 대한 기능을 제공하지만 dirsize, copydir, rmdirs와 같은 폴더 작업에 대한 기능은 제공하지 않습니다(rmdir은 빈 디렉토리만 삭제). 따라서 이러한 함수는 수동으로만 작성할 수 있습니다. 주요 비결은 문제가 직접 해결될 수 있는 가장 작은 하위 문제로 분해될 때까지 재귀를 통해 문제를 계층별로 분해하는 것입니다.
폴더 크기 확인
폴더에는 크기가 없기 때문에 폴더 크기는 일반적으로 폴더에 있는 모든 파일의 전체 크기를 나타냅니다. 따라서 레이어별로 폴더를 검색하고, 각 레이어에 포함된 파일 크기를 계산하고, 마지막으로 가장 깊은 폴더의 결과를 반환하여 병합하기만 하면 됩니다.
/** * 文件夹大小 * @param $path * @return int */ function dirsize($path) { $size = 0; $handle = opendir($path); while (($item = readdir($handle)) !== false) { if ($item == '.' || $item == '..') continue; $_path = $path . '/' . $item; if (is_file($_path)) $size += filesize($_path); if (is_dir($_path)) $size += dirsize($_path); } closedir($handle); return $size; }
폴더 복사
파일은 복사할 수 있지만 폴더는 복사할 수 없습니다(만들 수는 있음). 폴더 복사 효과를 얻으려면 원본을 생성해야 합니다. file 동일한 디렉터리 구조로 새 폴더를 만든 다음 원래 디렉터리 구조에 따라 파일을 새 폴더에 복사합니다. 재귀적 아이디어에 따르면 처음에 완전한 디렉터리 구조를 생성할 필요가 없으며 현재 디렉터리를 탐색하여 폴더가 존재하지 않는 것을 찾아 생성한 다음 해당 폴더에 파일을 복사하기만 하면 됩니다.
/** * 复制文件夹 * @param $source * @param $dest */ function copydir($source, $dest) { if (!file_exists($dest)) mkdir($dest); $handle = opendir($source); while (($item = readdir($handle)) !== false) { if ($item == '.' || $item == '..') continue; $_source = $source . '/' . $item; $_dest = $dest . '/' . $item; if (is_file($_source)) copy($_source, $_dest); if (is_dir($_source)) copydir($_source, $_dest); } closedir($handle); }
폴더 삭제
rmdir은 빈 폴더만 삭제할 수 있고 연결 해제는 파일을 삭제할 수 있습니다. 그래서 폴더를 삭제한다는 아이디어가 나왔습니다. 먼저 unlink를 통해 디렉터리의 모든 파일을 삭제한 다음, rmdir을 통해 나머지 빈 폴더를 삭제하세요. 재귀 처리를 사용하는 논리는 현재 디렉터리에서 모든 파일과 폴더를 찾아 그 안의 모든 파일을 삭제한 다음 다음 수준 디렉터리를 탐색하여 모든 파일을 삭제하는 것입니다... 마지막 수준 디렉터리까지, 이때 전체 폴더가 삭제됩니다. 파일이 없습니다 (그러나 폴더는 여전히 존재합니다). 이때 재귀가 반환되기 시작하고 한 수준으로 돌아올 때마다 이 수준의 빈 디렉터리가 모두 삭제되고 최상위 수준으로 돌아오면 재귀가 종료됩니다. , 모든 파일과 디렉터리도 삭제됩니다.
/** * 删除文件夹 * @param $path * @return bool */ function rmdirs($path) { $handle = opendir($path); while (($item = readdir($handle)) !== false) { if ($item == '.' || $item == '..') continue; $_path = $path . '/' . $item; if (is_file($_path)) unlink($_path); if (is_dir($_path)) rmdirs($_path); } closedir($handle); return rmdir($path); }
Cut Folder
rename은 파일과 폴더의 이름을 모두 바꿀 수 있는 PHP 파일 시스템 기능의 특별한 경우입니다. 이름이 바뀐 파일에 대해 다른 경로를 전달하면 파일 기능의 작지만 아름다운 예인 잘라내기 기능이 됩니다.
/** * @param $oldname 必需。规定要重命名的文件或目录。 * @param $newname 必需。规定文件或目录的新名称。 * @param $context 可选。规定文件句柄的环境。 */ rename($oldname,$newname,$context);
phpRecursion함수 사례 사용법에 대한 자세한 설명
PHP(반복 +recursion) 무한 수준 분류에 대한 자세한 설명
위 내용은 PHP는 폴더 복사, 삭제, 보기 크기 등을 반복적으로 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!