Как удалить несколько старых изображений с помощью php?

Я хочу удалить изображения из определенной категории, которые старше определенного возраста (например, 2 месяца).

Эти изображения находятся где-то в каталоге, если я использую следующий код:

<?php

// define the directory
$dir = "images/";

// cycle through all files in the directory
foreach (glob($dir."*") as $file) {

// if file is 2 Month (5.184e+6 seconds) old then delete it
if (filemtime($file) < time() - 5.184e+6) {
unlink($file);
}
}

?>

Затем он удаляет все 2-месячные изображения, но я хочу удалить изображения по категориям.

Это таблица в моей базе данных:

------------------------------------
table msn_story_images
------------------------------------
ID    image(url)   thumbnail   sortstyID

Папка с изображениями довольно большая (около 19 ГБ) и не может быть отображена на сервере.

-2

Решение

Итак, вы сохраняете только URL изображения в базе данных. Я думаю, вы можете иметь логическую связь между изображениями БД и изображениями файловой системы по имени изображения. Я бы предложил в первую очередь получить соответствующие изображения из БД и поместить их в плоский массив, содержащий только URL-адреса. Просмотрите массив и преобразуйте имена изображений, чтобы пропустить ведущую часть URL. Упрощенный пример:

foreach($imagesWithUrl as $idx => $image) {
$imagesWithUrl[$idx] = basename($image);
}

Затем в вашем цикле проверьте наличие этого изображения в массиве из БД:

/*** cycle through all files in the directory ***/
foreach (glob($dir."*") as $file) {

/*** if file is 2 Month (5.184e+6 seconds) old then delete it ***/
if (filemtime($file) < time() - 5.184e+6 && in_array(basename($file), $imagesWithUrl)) {
unlink($file);
}
}
2

Другие решения

Я делаю этот сценарий для моего вопроса, и он работает отлично, если больше улучшений, то скажите мне

   <?php
$conn = new mysqli('localhost', 'freemed_mainuser', 'xDPf$$!O!H61','freemed_main');


$sql="select img.styid imgid,concat('sam_data/story/images/',img.image) as img,story.id storyid,story.title storytitle,story.insdatetime insdatetime from msn_story_images img , msn_stories story WHERE  img.styid=story.id and insdatetime < DATE_SUB( CURDATE( ) , INTERVAL 60
DAY )
AND catid NOT
IN ( 1, 86, 85, 88, 87 )
";
$data = mysqli_query($conn,$sql);


while($row=mysqli_fetch_array($data)){

unlink($row['img']);

echo "files deleted";



}

/*and delete matching rows from DB*/
$del="DELETE msn_story_images,
msn_stories FROM msn_stories INNER JOIN msn_story_images WHERE msn_story_images.styid = msn_stories.id AND msn_stories.insdatetime < DATE_SUB( CURDATE( ) , INTERVAL 60 DAY ) AND msn_stories.catid NOT IN ( 1, 86, 85, 88, 87 )";
$del_data=mysqli_query($conn,$del);


?>
0

По вопросам рекламы [email protected]