使用php删除所有内容的文件夹

时间:2011-08-04 18:47:44

标签: php

我的主文件夹名为“gallery”。在这个文件夹中有一些子文件夹,如“动物”,“树”等文件夹“动物”包含一些图片等。假设我要删除包含所有图片的“animal”文件夹,怎么办呢? 我试过 -

rmdirr($_SERVER['DOCUMENT_ROOT']."admin/gallery/animal");

但是在服务器中,它删除了整个“gallery”文件夹。请告诉我我做错了什么,并给我一个解决方案。提前谢谢。

3 个答案:

答案 0 :(得分:5)

如果没有子文件夹,您可以使用glob()清空目录,然后再使用rmdir()

foreach( glob( "/path/to/dir/*.*" ) as $filename ) {
    unlink( $filename );
}

rmdir( "/path/to/dir" );

顺便说一句,rmdir()不应该删除任何文件。如果目录不为空,它就会失败。您可能希望确保代码中没有其他内容导致父目录被清除。

答案 1 :(得分:2)

只需使用辅助函数递归删除目录:

rrmdir($_SERVER['DOCUMENT_ROOT']."admin/gallery/animal");

function rrmdir($path)
{
  return is_file($path)
    ? @unlink($path)
    : array_map('rrmdir', glob($path.'/*')) == @rmdir($path)
  ;
}

答案 2 :(得分:1)

删除所需目录时,必须先删除该目录中的文件。完成后,您可以删除目录 - 假设您具有适当的权限。

下面是删除目录中文件的代码,然后删除指定的目录:

<?php
$dirname = "animal";

function destroy($dir) {
    $mydir = opendir($dir);
    while(false !== ($file = readdir($mydir))) {
        if($file != "." && $file != "..") {
            chmod($dir.$file, 0777);
            if(is_dir($dir.$file)) {
                chdir('.');
                destroy($dir.$file.'/');
                rmdir($dir.$file) or DIE("Unable to delete $dir$file");
            }else{
                unlink($dir.$file) or DIE("Unable to delete $dir$file");
            }
        }
    }
    closedir($mydir);
}

destroyDir($dirname);
?>