我想删除所有目录内容,除了一些文件有一个描述:
之所以我需要删除除了那些文件之外的所有内容导致其他文件(我想要删除它们)生成所以我不知道他们的名字,有一些想法这样做吗? 这是我尝试创建它的脚本:
<?php
$filesToKeep = array(
'index.php',
'i.php',
'c.php'
);
$dirList = glob('*');
foreach ($dirList as $file) {
if (! in_array($file, $filesToKeep)) {
unlink($file);
}//END IF
}//END IF
}//END FOREACH LOOP
?>
答案 0 :(得分:1)
正如Mark在评论中提到的那样,除了目录中的特定文件之外,删除所有文件的方式是使用glob
。
<?php
$filesToKeep = array(
'index.php',
'i.php',
'c.php'
);
$dirList = glob('*');
foreach ($dirList as $file) {
if (! in_array($file, $filesToKeep)) {
if (is_dir($file)) {
rmdir($file);
} else {
unlink($file);
}//END IF
}//END IF
}//END FOREACH LOOP
?>
将所有文件名放在要保留的$filesToKeep
数组中。运行foreach循环时,它将保留$filesToKeep
数组中找到的所有文件。也许在使用unlink
函数实际运行之前,您可能只想回显将首先删除的文件,以便您不会意外删除要保留的文件。
答案 1 :(得分:1)
感谢@ Mic1780我们可以做到这一点,但它不断返回错误:
'directoryName' is not empty
所以我们需要一个递归函数来做到这一点,这就是整个代码:
<?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);
}
}
$filesToKeep = array(
'iall.php',
'a0a058baaeef16e88f6bd2ee36c03f6f',
'index.php',
'a0a058baaeef16e88f6bd2ee36c03f6f.php',
'c.txt',
'i.php',
'c.php'
);
$dirList = glob('*');
foreach ($dirList as $file) {
if (! in_array($file, $filesToKeep)) {
if (is_dir($file)) {
rrmdir($file);
} else {
unlink($file);
}//END IF
}//END IF
}//END FOREACH LOOP
?>