>  기사  >  백엔드 개발  >  재귀를 사용하여 PHP에서 폴더 크기를 복사, 삭제 및 확인하는 방법의 예

재귀를 사용하여 PHP에서 폴더 크기를 복사, 삭제 및 확인하는 방법의 예

黄舟
黄舟원래의
2017-08-11 13:16:301014검색

이 기사에서는 주로 폴더 복사, 삭제 및 보기 크기 작업의 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;
}

폴더 복사

파일은 복사할 수 있지만 폴더는 복사할 수 없습니다(만들 수는 있음). 폴더 복사 효과를 얻으려면 원본 폴더를 생성해야 합니다. 동일한 디렉터리 구조로 새 폴더를 만든 다음 원래 디렉터리 구조에 따라 파일을 새 폴더에 복사합니다. 재귀적 아이디어에 따르면 처음에 완전한 디렉터리 구조를 생성할 필요가 없으며 현재 디렉터리를 탐색하여 폴더가 존재하지 않는 것을 찾아 생성한 다음 해당 폴더에 파일을 복사하기만 하면 됩니다.


/**
 * 复制文件夹
 * @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 파일 시스템 함수의 특별한 경우입니다. 이름이 바뀐 파일에 대해 다른 경로를 전달하면 파일 기능의 작지만 아름다운 예인 잘라내기 기능이 됩니다.


rreee

위 내용은 재귀를 사용하여 PHP에서 폴더 크기를 복사, 삭제 및 확인하는 방법의 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.