1mnumb1
1mnumb1

Reputation: 77

loop to check and remove image if not exist

I'm trying to make a loop which checks if an image with filename from database exists, if not to unlink all images because I have many duplicates in folder but folder is 50gb. I can't check each one.

So here's what I've tried

$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);
    }
}

Update

$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);
    }
}

Upvotes: 0

Views: 1060

Answers (1)

Keyne Viana
Keyne Viana

Reputation: 6202

That's the logic I've understood. Checking if there are files in the folder that aren't present in database, and if so, delete it.

$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";
  }

}

Upvotes: 1

Related Questions