为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
冉冉说 2021-06-10 13:46:04
如何删除不存在的图像和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 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

方法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'");

}


查看完整回答
反对 回复 2021-06-13
  • 1 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信