如何删除不存在的图像和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.'/');


冉冉说
浏览 100回答 1
1回答

万千封印

方法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'");}
打开App,查看更多内容
随时随地看视频慕课网APP