如何删除不包含图像和mysql记录新闻的文件夹

时间:2019-05-09 14:39:40

标签: php mysql

如何删除不包含图像和mysql记录新闻的文件夹? 不要工作为什么?

$resnotid = mysqli_query($db, "SELECT id FROM objects");

$idarray[] = array(); 
$namefolderarray[] = array(); 

while($rownotid = mysqli_fetch_array($resnotid)) {
    $idarray[] = $rownotid['id'];
}

$dir = opendir('upload');
while($folder = readdir($dir)) {
   if (is_dir('upload/'.$folder) && $folder != '.' && $folder != '..') {
        $namefolderarray[] = $folder;
   }
}

$delid = array_diff($namefolderarray, $idarray);
rmdir('upload/'.$delid.'/');

1 个答案:

答案 0 :(得分:0)

方法array_diff返回一个数组。因此,您必须遍历该数组。

$del_arr = array_diff($namefolderarray, $idarray);
foreach ($del_arr as $delid) {
    rmdir('upload/'.$delid.'/');
}

更新1

以前的解决方案仅适用于空文件夹。如果文件夹中有任何内容,则必须首先删除该内容。这可以通过对内容进行迭代的递归函数来完成。

function rmdir_recursively($path) {
    if (is_dir($path)){
        $list = glob($path.'*', GLOB_MARK);
        foreach($list as $item) {
            rmdir_recursively($item);      
        }
        rmdir($path);
    } else if (is_file($path)) {
        unlink($path);  
    }
}

$del_arr = array_diff($namefolderarray, $idarray);
foreach ($del_arr as $del_id) {
    rmdir_recursively('upload/'.$del_id.'/');
}

更新2

要删除没有文件夹的数据库记录,可以扩展如下代码:

foreach ($del_arr as $del_id) {
    rmdir_recursively('upload/'.$del_id.'/');
    $del_id_escaped = mysqli_real_escape_string($del_id);
    mysqli_query($db, "DELETE FROM objects WHERE id='$del_id_escaped'");
}