Re: File Removal after Database Comparison



Chris Owens wrote:
I'm trying to figure the logic (and therefor the code) to enable the clean-up of a site I've inherited. Basically I have a folder that has around 6,666 images in it that are loosely related to the information held in a database. I say loosely because the images are uploaded (via FTP) manually. There is no direct reference to the JPEGs in the database, as the code on the site references them via:

<img src="<?=echo ($referenceid); ?>_f.jpg" />
<img src="<?=echo ($referenceid); ?>_s.jpg" />
<img src="<?=echo ($referenceid); ?>_b.jpg" />

Each record in the database has three related images:

Image of the front - recordid_f.jpg
Image of the side - recordid_s.jpg
Image of the back - recordid_b.jpg

Now over time records have been removed from the database, but the images haven't been removed and as such, short of removing all images, there is no easy way that I can think of to clear the folder (several GB of data) whilst keeping the images that have related records in the db.

<?php
ob_end_flush();
$mysqli= new mysqli('localhost','login','pass','db');
$refid=explode("\n",shell_exec("ls -1 | sed 's/jpg//g'"));
foreach($refid AS $id) {
echo "Cheking {$id}: ";
$query="SELECT COUNT(*) FROM table_name WHERE recordid='{$id}'";
$res=$mysqli->query($query);
if(!$res->num_rows) {
echo "delete old files.";
//delete all three files at once
exec("rm -f {$id}_[bfd].jpg");
} else {
echo "Still active, we keep them";
}
echo (empty($_SERVER['SERVER_ADDR'])?'':'<br>')."\n";
}
$mysqli->close();
?>

This should take care of the whole thing for you, I do suggest you do run it once with the exec("rm -f {$id}_[bfd].jpg"); commented out, that way you can check if the deletion would be correct. This one uses mysqli, but if you don't use it or even another database, then just modify the code a little bit.

You could change the exec() line and move the old images to a new directory instead, that way if there would be something wrong with the script, then you still would have the images and can move those back that was faulty removed.

--

//Aho
.



Relevant Pages

  • Re: which is the better option for directory hashing to store large number of image files?
    ... images for a given order. ... I create a folder under photos with ... would want to put all those as fields in a database table and have the full ... that way I can only store the name of the image. ...
    (comp.lang.php)
  • Re: [PHP] Re: how to display images stored in DB*
    ... Your claim is that in ALL cases using a file system to store images ... bitmaps in a database without a damn good reason, a bad practice, yes. ...
    (php.general)
  • Re: [PHP] Re: how to display images stored in DB**
    ... for storing images is "bad" practice. ... "Bad" practice or "good" practice depends upon the needs and one's perspective of the situation. ... If you were to talk to the average computer user; or to the average investor who invests in technologies; or to the businessman who is paying the bills for programmers to build the product while trying to make money at the same time; they all might have different opinions as to the quality and state of software. ... If you assume that you have one database supply all the images to all ...
    (php.general)
  • Re: bound object frame: picture
    ... Please let me respond to your critique and hopefully help Bob along the way. ... generates can be very large when they contain images. ... Print event NOT THE FORMAT EVENT. ... your entire database will stop working when you get about 100 pictures ...
    (microsoft.public.access.forms)
  • Re: File Removal after Database Comparison
    ... Basically I have a folder that has around 6,666 images in it that are loosely related to the information held in a database. ... stringify the number to recreate filenames ...
    (alt.php)