ホームページ  >  記事  >  バックエンド開発  >  フォルダーを再帰的に作成および削除するための PHP コード

フォルダーを再帰的に作成および削除するための PHP コード

WBOY
WBOYオリジナル
2016-07-25 09:08:13929ブラウズ
  1. /**

  2. * ディレクトリ生成クラス: UtilsMakeDir
  3. * @author yepeng
  4. * @since 2010.3.18
  5. */
  6. class UtilsMakeDir{
  7. //Base Directory このディレクトリは、ディレクトリの作成時に作成されません。これは既存のディレクトリである必要があります
  8. private static $makeBasePath = 'video';
  9. private static $delBasePath = 'video';

  10. /**

  11. * ディレクトリを再帰的に作成します。
  12. * 作成が成功した場合はフルパスを返します。
  13. * 作成が失敗した場合は false を返します
  14. * @param String $pathString '2/3/4/5' などのパス文字列
  15. * @ false または文字列を返します
  16. パブリック静的関数 makeDir($pathString){

  17. $pathArray =explode('/',$pathString);
  18. if(empty($pathArray[0])){
  19. return 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. * Create Failure は false を返します
  42. * @param String $pathString 'video/2/3/4/5' などのパス文字列
  43. * @return false または string
  44. **/
  45. パブリック静的関数 makeDir($pathString){
  46. $pathArray =explode('/',$pathString);
  47. $tmpPath = array_shift($pathArray);
  48. foreach ($pathArray as $val){
  49. $ tmpPath .= "/".$val;
  50. if(is_dir($tmpPath)){
  51. Continue;
  52. }
  53. else {
  54. @mkdir($tmpPath,0777);
  55. }
  56. }
  57. if(is_dir($tmpPath) ) {
  58. return $tmpPath;
  59. }
  60. else{
  61. return false;
  62. }
  63. } /**
  64. * 再帰的削除
  65. * ディレクトリとファイルを削除します
  66. * 'video/2/3/4' のようなパスを渡すと、4 より下のすべてのディレクトリとファイルが削除されます
  67. * @param string $stringPath
  68. */
  69. public static function delDir($stringPath){
  70. if(!$handle = @opendir($stringPath ) ){
  71. return false;
  72. }
  73. while (false !==($file = readdir($handle))){
  74. if($file !='.' && $file != '..'){
  75. $ tmpdir = $stringPath."/".$file;
  76. if(is_dir($tmpdir)){
  77. self::delDir($tmpdir);
  78. rmdir($tmpdir);
  79. }
  80. if(is_file($tmpdir) ) {
  81. unlink($tmpdir);
  82. }
  83. }
  84. }
  85. closedir($handle);
  86. }}
  87. ?>

コードをコピー
winxpでのループと再帰PHP ファイルが gb2312 としてエンコードされており、ファイル名が任意である限り、ファイル名は gb2312 に変更される必要があります。

    deltree('./ copy copy copy copy copy copy copy copy aaa');
  1. function deltree($pathdir)
  2. {
  3. //echo $pathdir.'
    if(is_empty_dir($pathdir))//空の場合
  4. {
  5. rmdir($pathdir);//直接削除します
  6. }
  7. else
  8. {//それ以外の場合. と .. を除くこのディレクトリを読み取ります
  9. $d=dir($pathdir);
  10. while($a=$d->read()) //次の $pathdir のみを削除します
  11. {
  12. if(is_file($pathdir) . '/'.$a) && ($a!='.') && ($a!='..'))
  13. {
  14. unlink($pathdir.'/'.$a);ファイルです 直接削除してください
  15. }elseif(is_dir($pathdir.'/'.$a) && ($a!='.') && ($a!='..')) //ファイルの場合ディレクトリ
  16. {
  17. if (!is_empty_dir($pathdir.'/'.$a))//空かどうか
  18. {
  19. deltree($pathdir.'/'.$a) //そうでない場合は、それ自体を呼び出します
  20. ; }else
  21. {
  22. rmdir ($pathdir.'/'.$a); //空の場合は直接削除
  23. }
  24. }
  25. }
  26. $d->close();
  27. //echo "ディレクトリ内のファイルは最初に削除する必要があります。" ;//デバッグ時に使用するのは
  28. rmdir($pathdir);
  29. }
  30. }
  31. function is_empty_dir($pathdir)
  32. {
  33. //ディレクトリが空かどうかを判断する私の方法あまり良くないですよね? {
  34. $i++;
  35. }
  36. closedir($d) ;
  37. if($i>2){return false;}
  38. else return true;
  39. }
  40. ?>
  41. コードをコピー
  42. 方法 2 winxp ではテストは成功しました。PHP ファイルが gb2312 としてエンコードされており、ファイル名が任意であれば、ファイル名を gb2312 に変更すれば問題ありません。

    1. header("Content-Type: text/html; charset=gb2312");
    2. if(deleteDir('./ コピーコピーコピーコピーコピーコピーコピーコピーコピーコピーコピーコピー aaa' ) )
    3. echo "削除に成功しました";
    4. function deleteDir($dir)
    5. {
    6. if (@rmdir($dir)==false && is_dir($dir)) //削除できません。すべてのファイルを削除します
    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. return false;
    31. return true;
    32. }
    33. ?>
    コードをコピー

    方法 3. winxp でテストは成功しました。ディレクトリ ファイルを一覧表示するのに非常に便利です。

    1. function listDir($dir)
    2. {
    3. static $break=0; if($break++==100) exit;//深さレベルの数を制御します
    4. static $i=- 0;
    5. if(is_dir($dir))//ディレクトリ
    6. {
    7. if ($dh = opendir($dir))//Open
    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."
      gt;
      ";
    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= トリム(extend($file));
    25. //if($ext=='jpg')
    26. echo $dir.'/'.$file."
      ";
    27. }
    28. }
    29. }
    30. Closedir( $dh);
    31. }
    32. }
    33. }
    34. function extend($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 までご連絡ください。