我的主文件夹名为“gallery”。在这个文件夹中有一些子文件夹,如“动物”,“树”等文件夹“动物”包含一些图片等。假设我要删除包含所有图片的“animal”文件夹,怎么办呢? 我试过 -
rmdirr($_SERVER['DOCUMENT_ROOT']."admin/gallery/animal");
但是在服务器中,它删除了整个“gallery”文件夹。请告诉我我做错了什么,并给我一个解决方案。提前谢谢。
答案 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);
?>