我的服务器上有一个目录,我需要使用PHP清除。我需要删除此目录中的所有文件和文件夹,但是,我不想删除主目录本身。我读过的所有内容,我发现的例子,它们似乎都删除了给定目录中的所有内容,但之后它也删除了给定的目录。我尝试过的一个功能如下,但同样它也会删除主目录,我无法做到。
<?php
function rrmdir($dir) {
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (filetype($dir."/".$object) == "dir")
rrmdir($dir."/".$object);
else unlink ($dir."/".$object);
}
}
reset($objects);
rmdir($dir);
}
}
?>
答案 0 :(得分:0)
在函数的最后部分删除此rmdir($dir);
。
function rrmdir($dir) {
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (filetype($dir."/".$object) == "dir")
rrmdir($dir."/".$object);
else unlink ($dir."/".$object);
}
}
reset($objects);
// rmdir($dir); => this line deletes the directory you specified after its content has been deleted
}
}
答案 1 :(得分:0)
从现有代码 rmdir($ dir); 中删除此行,使用此行还删除您在函数参数上传递的父目录。我还添加了通常用于从目录中删除内容的代码片段。
function remove_directory($str) {
//It it's a file.
if (is_file($str)) {
//Attempt to delete it.
return unlink($str);
}
//If it's a directory.
elseif (is_dir($str)) {
//Get a list of the files in this directory.
$scan = glob(rtrim($str,'/').'/*');
//Loop through the list of files.
foreach($scan as $index=>$path) {
//Call our recursive function.
remove_directory($path);
}
//Remove the directory itself.
return @rmdir($str);
}
}
//call our function
$dir='directory_name';
remove_directory($dir);
答案 2 :(得分:0)
我之前发布的代码版本也删除了子目录,因此删除代码中的最后一个rmdir会阻止它执行此操作。但是,我能够对有效的代码进行更改。此代码将删除给定目录中的所有内容,包括文件和文件夹,而不删除给定目录。
function rrmdir($dir, $issub = false) {
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (filetype($dir."/".$object) == "dir")
rrmdir($dir."/".$object, true);
else unlink ($dir."/".$object);
}
}
reset($objects);
if($issub) {
rmdir($dir);
}
}
}