php中创建多级目录与删除多级目录和文件

在php中要实现简单的目录创建和删除分别利用mkdir和rmdir这有点像dos中的命令了,但如果我要创建多级目录或删除多级目录中的文件和目录则需要递归来实例了.

php中mkdir创建多级目录,代码如下:

  1. function mkdirs($dir)
  2. { if(!is_dir($dir))
  3. { if(!mkdirs(dirname($dir)))
  4. { return false; }
  5. if(!mkdir($dir,0777))
  6. { return false; } }
  7. return true;
  8. }
  9. //调用方法:mkdirs('div/css/layout');

创建多级目录更标准的方法,代码如下:

  1. //检查并创建多级目录
  2. function checkDir($path){
  3. $pathArray = explode('/',$path);
  4. $nowPath = '';
  5. array_pop($pathArray);
  6. foreach ($pathArray as $key=>$value){
  7. if ( ''==$value ){
  8. unset($pathArray[$key]);
  9. }else{
  10. if ( $key == 0 )
  11. $nowPath .= $value;
  12. else
  13. $nowPath .= '/'.$value;
  14. if ( !is_dir($nowPath) ){
  15. if ( !mkdir($nowPath, 0777) ) return false;
  16. }
  17. }
  18. }
  19. return true;
  20. }

删除多级目录方法

在winxp下测试成功,只要php文件编码为gb2312,文件名随意,应该把文件名改为编码为gb2312 就行,代码如下:

  1. <?php
  2. header("Content-Type:text/html; charset=gb2312");
  3. if(deleteDir('./复件 复件 复件 复件 复件 复件 复件 复件 复件 复件 复件 aaa'))
  4. echo "删除成功";
  5. function deleteDir($dir)
  6. {
  7. if (@rmdir($dir)==false && is_dir($dir)) //删除不了,进入删除所有文件
  8. {
  9. if ($dp = opendir($dir))
  10. {
  11. while (($file=readdir($dp)) != false)
  12. {
  13. if($file!='.' && $file!='..')
  14. { //echo $file=$dir.'/'.$file;echo '<br/>';
  15. $file=$dir.'/'.$file;
  16. if (is_dir($file)) //是真实目录
  17. {
  18. deleteDir($file);
  19. }else {
  20. unlink($file);
  21. }
  22. }
  23. }
  24. closedir($dp);
  25. }else
  26. {
  27. return false;
  28. }
  29. }
  30. if (is_dir($dir) && @rmdir($dir)==false) //是目录删除不了
  31. return false;
  32. return true;
  33. }
  34. ?>

递归删除多级目录

同样的思路,php用rmdir和unlink递归删除多级目录的代码:

  1. function rmdirs($dir)
  2. {
  3. $d = dir($dir);
  4. while (false !== ($child = $d->read())){
  5. if($child != '.' && $child != '..')
  6. {
  7. if(is_dir($dir.'/'.$child))
  8. rmdirs($dir.'/'.$child);
  9. else
  10. unlink($dir.'/'.$child); }
  11. }
  12. $d->close();
  13. //调用方法也很简单只要给目录就好
  14. rmdir($dir);
  15. }