循环以检查并删除图像(如果不存在)


loop to check and remove image if not exist

我正在尝试创建一个循环,检查是否存在数据库中文件名的图像,如果不取消链接所有图像,因为我在文件夹中有很多重复项,但文件夹是 50gb。我无法检查每一个。

所以这是我尝试过的

$id = $_GET['id'];
$sql = "SELECT thumbnail FROM files WHERE id='$id'";
$query = $mysqli->query($sql);
$row = $query->fetch_assoc();
$thumb = $row['thumbnail'];
$records = "../upload/images/";
foreach ($records as $record) {
    if (file_exists('../upload/images/'.$thumb)) {}
    else {
        @unlink('../upload/images/'.$thumb);
    }
}

更新

$sql = "SELECT thumbnail FROM filesWHERE id='$id'";
$query = $mysqli->query($sql);
$row = $query->fetchAll();
foreach($sql as $search_result) {
    if(file_exists($search_result['thumbnail'])) {
        $img_source = ('../upload/images/'.$search_result['thumbnail']);
    } else {
        @unlink('../upload/images/'.$search_result);
    }
}

这就是我理解的逻辑。检查文件夹中是否存在数据库中不存在的文件,如果有,请将其删除。

$directory = "../upload/images/";
$images = glob($directory . "*.jpg");
foreach($images as $image)
{
  $sql = "SELECT thumbnail FROM files WHERE thumbnail =?";
  $stmt = $mysqli->prepare($sql);
  if($stmt) {
     $stmt->bind_param('s', $image);
     $stmt->bind_result($result);
     $stmt->execute();
     $stmt->fetch();
     if(!$result) {
        if(unlink($image)) {
            echo "Image deleted $image <br>'n";
        }
     }
  } else {
      echo "Unable to prepare SQL";
  }
}