php 删除非空目录自定义函数

在php中删除目录如果是空目录我们可直接使用rmdir来删除,但是要删除非空目录我们需要先删除最子级目录的文件然后再删除空目录,其实就是递归删除目录了.

循环删除目录和文件函数,代码如下:

  1. function delDirAndFile( $dirName )
  2. {
  3. if ( $handle = opendir( “$dirName” ) ) {
  4. while ( false !== ( $item = readdir( $handle ) ) ) {
  5. if ( $item != “.” && $item != “..” ) {
  6. if ( is_dir( “$dirName/$item” ) ) {
  7. delDirAndFile( “$dirName/$item” );
  8. } else {
  9. if( unlink( “$dirName/$item” ) )echo “成功删除文件: $dirName/$item
  10. n”;
  11. }
  12. }
  13. }
  14. closedir( $handle );
  15. if( rmdir( $dirName ) )echo “成功删除目录: $dirName
  16. n”;
  17. }
  18. }
  19. ?>

循环目录下的所有文件,代码如下:

  1. function delFileUnderDir( $dirName=”../Smarty/templates/templates_c” )
  2. {
  3. if ( $handle = opendir( “$dirName” ) ) {
  4. while ( false !== ( $item = readdir( $handle ) ) ) {
  5. if ( $item != “.” && $item != “..” ) {
  6. if ( is_dir( “$dirName/$item” ) ) {
  7. delFileUnderDir( “$dirName/$item” );
  8. } else {
  9. if( unlink( “$dirName/$item” ) )echo “成功删除文件: $dirName/$item
  10. n”;
  11. }
  12. }
  13. }
  14. closedir( $handle );
  15. }
  16. }
  17. ?>

目录删除函数,代码如下:

  1. function my_del_dir($directory)
  2. {
  3. if (is_dir($directory) == false)
  4. {
  5. exit("The Directory Is Not Exist!");
  6. }
  7. $handle = opendir($directory);
  8. while (($file = readdir($handle)) !== false)
  9. {
  10. if ($file != "." && $file != "..")
  11. {
  12. is_dir("$directory/$file")?
  13. my_del_dir("$directory/$file"):
  14. unlink("$directory/$file");
  15. }
  16. }
  17. if (readdir($handle) == false)
  18. {
  19. closedir($handle);
  20. rmdir($directory);
  21. }
  22. }
  23. ?>

自己写的一个,$sourceDir 要删除的目录路径.

调用方法:DeleteDir(“images/abc”);删除abc目录,代码如下:

  1. function DeleteDir($sourceDir){
  2. $succeed = true;
  3. if(file_exists($sourceDir)){
  4. $objDir = opendir($sourceDir);
  5. while(false !== ($fileName = readdir($objDir))){
  6. if(($fileName != “.”) && ($fileName != “..”)){
  7. chmod(“$sourceDir/$fileName”,0777);
  8. if(!is_dir(“$sourceDir/$fileName”)){
  9. if(!unlink(“$sourceDir/$fileName”)){
  10. $succeed = false;
  11. break;
  12. }
  13. }
  14. else{
  15. DeleteDir(“$sourceDir/$fileName”);
  16. }
  17. }
  18. }
  19. if(!readdir($objDir)){
  20. closedir($objDir);
  21. if(!rmdir($sourceDir)){
  22. $succeed = false;
  23. }
  24. }
  25. }
  26. return $succeed;
  27. }