> 백엔드 개발 > PHP 튜토리얼 > 폴더를 재귀적으로 생성하고 삭제하는 PHP 코드

폴더를 재귀적으로 생성하고 삭제하는 PHP 코드

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-07-25 09:08:13
원래의
987명이 탐색했습니다.
  1. /**

  2. * 디렉토리 생성 클래스: UtilsMakeDir
  3. * @author yepeng
  4. * @since 2010.3.18
  5. */
  6. class UtilsMakeDir{
  7. //기본 디렉토리 이 디렉터리는 디렉터리를 생성할 때 생성되지 않습니다. 이는 기존 디렉토리여야 합니다
  8. private static $makeBasePath = 'video';
  9. private static $delBasePath = 'video';

  10. /**

  11. * 재귀적으로 디렉터리 생성,
  12. * 생성에 성공하면 전체 경로 반환,
  13. * 생성에 실패하면 false 반환
  14. * @param String $pathString '2/3과 같은 경로 문자열 /4/5'
  15. * @return false 또는 string

  16. public static function makeDir($pathString){

  17. $pathArray =explore('/',$pathString);
  18. if(empty ($pathArray[0])){
  19. false 반환;
  20. }
  21. $path = array_shift($pathArray);
  22. self::$basePath = self::$ basePath.'/'.$path;
  23. if(is_dir(self::$basePath)){
  24. $path = implode('/',$pathArray);
  25. self::makeDir($path );
  26. }
  27. else{
  28. @mkdir(self::$basePath,0777);
  29. $path = implode('/',$pathArray);
  30. self::makeDir( $path);
  31. }
  32. if(is_dir(self::$basePath)){
  33. return self::$basePath;
  34. }
  35. else{
  36. return false;
  37. }
  38. }* /
  39. /**
  40. * 기본 디렉토리를 포함하는 디렉토리를 생성합니다. 예를 들어, 사진은 video 아래에 있어야 합니다(video는 기존 디렉토리입니다). 전달하는 매개변수는 video/2/3/4여야 합니다.
  41. * 생성에 성공하면 전체 경로가 반환됩니다.
  42. * 반환 false
  43. * 설정에 실패하면
  44. * @param String $pathString 'video/2/3/4/5'와 같은 경로 문자열입니다.
  45. * @return false 또는 문자열
  46. **/
  47. 공용 정적 함수 makeDir($pathString){
  48. $pathArray = 폭발('/',$pathString);
  49. $tmpPath = array_shift($pathArray ) ;
  50. foreach($pathArray as $val){
  51. $tmpPath .= "/".$val;
  52. if(is_dir($tmpPath)){
  53. continue;
  54. }
  55. else {
  56. @mkdir($tmpPath,0777);
  57. }
  58. }
  59. if(is_dir($tmpPath)){
  60. return $tmpPath;
  61. }
  62. else {
  63. false 반환;
  64. }
  65. } /**
  66. * 재귀 삭제
  67. * 디렉토리 및 파일 삭제
  68. * 'video/2/3/4'와 같은 경로를 전달하면 4 이하의 모든 디렉토리 및 파일이 삭제됩니다
  69. * @param string $ 문자열경로
  70. */
  71. 공용 정적 함수 delDir($stringPath){
  72. if(!$handle = @opendir($stringPath ) ){
  73. false 반환;
  74. }
  75. while (false !==($file = readdir($handle))){
  76. if($file !='.' && $file ! = '..'){
  77. $tmpdir = $stringPath."/".$file;
  78. if(is_dir($tmpdir)){
  79. self::delDir($tmpdir);
  80. rmdir ($tmpdir);
  81. }
  82. if(is_file($tmpdir)){
  83. 연결 해제($tmpdir);
  84. }
  85. }
  86. }
  87. closedir($handle ; , PHP 파일이 gb2312로 인코딩되고 파일 이름이 임의인 경우 gb2312로 인코딩되도록 파일 이름을 변경해야 합니다.
deltree('./copy 복사 복사 복사 복사 복사 aaa');

function deltree($pathdir )

{
//echo $pathdir.'
';//디버깅할 때 사용합니다
if(is_empty_dir($pathdir))//비어 있는 경우
    {
  1. rmdir($pathdir);//직접 삭제
  2. }
  3. 그렇지 않으면
  4. {//그렇지 않으면 . 및 ..
  5. $d=dir($pathdir)을 제외하고 이 디렉토리를 읽으십시오.
  6. while($a=$d->read()) //다음에는 $pathdir만 삭제
  7. {
  8. if(is_file($pathdir.'/'.$a) && ($ a! ='.') && ($a!='..'))
  9. {
  10. unlink($pathdir.'/'.$a) //파일인 경우 직접 삭제
  11. }elseif(is_dir($pathdir.'/'.$a) && ($a!='.') && ($a!='..')) //디렉토리인 경우
  12. {
  13. if (!is_empty_dir($pathdir.'/'.$a))//비어있나요
  14. {
  15. deltree($pathdir.'/'.$a) //그렇지 않으면 자신을 호출하세요.
  16. }else
  17. {
  18. rmdir($pathdir.'/'.$a) //비어 있으면 직접 삭제
  19. }
  20. }
  21. }
  22. $d-> close();
  23. //echo "디렉터리의 모든 파일을 먼저 삭제해야 합니다.";//디버깅할 때 사용하는 것
  24. rmdir($pathdir);
  25. }
  26. }
  27. function is_empty_dir ($pathdir)
  28. {
  29. //디렉토리가 비어 있는지 판단하는 방법은 별로 좋지 않죠? >$d=opendir($pathdir );
  30. $i=0;
  31. while($a=readdir($d))
  32. {
  33. $i ;
  34. }
  35. closedir ($d);
  36. if($i>2){return false;}
  37. else return true;
  38. }
  39. ?>
  40. 코드 복사
  41. 방법 2 테스트는 winxp에서 성공했습니다. PHP 파일이 gb2312로 인코딩되고 파일 이름이 임의인 경우 파일 이름을 gb2312로 변경해야 하며 테스트할 필요가 없습니다.

    1. header("Content-Type:text/html; charset=gb2312");
    2. if(deleteDir(' ./copy 복사 복사 복사 복사 복사 복사 복사 복사 복사 aaa'))
    3. echo "삭제 성공";
    4. function deleteDir($dir)
    5. {
    6. if (@rmdir($dir ) ==false && is_dir($dir)) //삭제할 수 없습니다. 모든 파일을 삭제하려면 Enter를 누르세요
    7. {
    8. if ($dp = opendir($dir))
    9. {
    10. while (($ file= readdir($dp)) != false)
    11. {
    12. if($file!='.' && $file!='..')
    13. { //echo $file=$dir .' /'.$file;echo '
      ';
    14. $file=$dir.'/'.$file;
    15. if (is_dir($file)) // 실제 디렉토리
    16. {
    17. deleteDir($file);
    18. }else {
    19. unlink($file);
    20. }
    21. }
    22. }
    23. closedir($dp) ;
    24. }else
    25. {
    26. return false;
    27. }
    28. }
    29. if (is_dir($dir) && @rmdir($dir)==false) //디렉토리는 삭제
    30. false 반환;
    31. true 반환;
    32. }
    33. ?>
    코드 복사

    방법 3. 테스트는 다음과 같습니다. winxp에서 성공하면 열은 디렉터리 파일이 매우 유용합니다.

    1. function listDir($dir)
    2. {
    3. static $break=0 if($break == 100) 종료;//깊이 수준 수 제어
    4. static $i=-0;
    5. if(is_dir($dir))//디렉터리
    6. {
    7. if ($dh = opendir( $dir) ))//열기
    8. {
    9. while (($file = readdir($dh)) !== false)
    10. {
    11. if((is_dir($dir."/" .$file )) && $file!="." && $file!="..")//디렉토리
    12. {
    13. $j=$i;while($j--) echo "-- --- --";
    14. echo "디렉터리 이름: ".$dir."/".$file ."< ;br>
      ";
    15. $i ;
    16. listDir($dir."/".$file);
    17. $i--;
    18. }
    19. else
    20. {
    21. if($file!="." && $file!="..")
    22. {
    23. $j=$i;while($j--) echo "-- --- --";
    24. $ext=trim(extend($file));
    25. //if($ext=='jpg')
    26. echo $dir.'/'.$file ."< ;br>";
    27. }
    28. }
    29. }
    30. closedir($dh);
    31. }
    32. }
    33. }
    34. 함수 확장($file_name)
    35. {
    36. $retval="";
    37. $pt=strrpos($file_name, ".");
    38. if ($pt) $retval=substr($file_name, $pt 1, strlen ($file_name ) - $pt);
    39. return ($retval);
    40. }
    41. //실행 시작
    42. listDir(".");
    43. ?>
    코드 복사



본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿