我被要求创建一个删除文件夹中所有文件和文件夹的cron作业(递归) 排除某些文件扩展名。
我有这个代码(我在网上找到):
function rrmdir($dir) {
$structure = glob(rtrim($dir, "/").'/*');
if (is_array($structure)) {
foreach($structure as $file) {
if (is_dir($file)) rrmdir($file);
elseif (is_file($file)) unlink($file);
}
}
rmdir($dir);
}
将从指定的文件夹中删除ANYTHING, 但如上所述,我需要在插入中添加异常(不应删除所有'.php'文件)。
请假设文件夹的结构如下:
FOLDER1
FOLDER2
FOLDER3
FILE1.ZIP
FILE2.ZIP
DONOTDELETE1.PHP
DONOTDELETE2.PHP
因此,除了php文件
之外,应删除所有内容任何人都可以帮我吗?
答案 0 :(得分:1)
这是修改过的功能试试吧。这将删除除*.php
或*.PHP
以外的所有文件
文件
function rrmdir($dir) {
$structure = glob(rtrim($dir, "/").'/*');
$rm_dir_flag = true;
if (is_array($structure))
{
foreach($structure as $file)
{
if (is_dir($file))
{
rrmdir($file);
}
else if(is_file($file))
{
$ext = substr($file, -4);
if($ext==".php" || $ext==".PHP")
{
$rm_dir_flag = false;
}
else
{
unlink($file);
}
}
}
}
if($rm_dir_flag)
{
rmdir($dir);
}
}
更新2:
如果你想保护具有特定扩展名的文件,你可以这样做
rrmdir($your_directory, ".php");
//or
rrmdir($your_directory, ".pdf");
//or
rrmdir($your_directory, ".jpeg");
function rrmdir($dir, $protect_extension) {
if(!is_dir($dir))
{
return;
}
$len = strlen($protect_extension)*(-1);
$structure = glob(rtrim($dir, "/").'/*');
$rm_dir_flag = true;
if (is_array($structure))
{
foreach($structure as $file)
{
if (is_dir($file))
{
rrmdir($file, $protect_extension);
}
else if(is_file($file))
{
$ext = substr($file, $len);
if($ext==$protect_extension || $ext==strtoupper($protect_extension))
{
$rm_dir_flag = false;
}
else
{
unlink($file);
}
}
}
}
if($rm_dir_flag)
{
rmdir($dir);
}
}
答案 1 :(得分:0)
你能试试吗,添加了if($ext!='php'){
function rrmdir($dir) {
$structure = glob(rtrim($dir, "/").'/*');
if (is_array($structure)) {
foreach($structure as $file) {
if (is_dir($file)){
rrmdir($file);
}elseif(is_file($file)){
$info = pathinfo($file);
$ext = strtolower($info['extension']);
if($ext!='php'){
unlink($file);
}
}
}
}
rmdir($dir);
}