• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 204
  • Last Modified:

PHP delete smaller files

Hello,

I am not sure if this is possible but I am optimistic.

I have an images folder with 75,000 images. I had a db that separated them as origina/small/thumb but I lost the db.

I now have one images folder with 3 versions of each file and I need to strip out the small and thumbs and just keep the originals.

Is there a way to query the folder and keep the largest file size of each filename and delete the other 2?

example

1221-93939a-280-510.jpg
1221-93939a-180-180.jpg
1221-93939a-580-720.jpg


175753-a344va-280-500.jpg
175753-a344va-180-160.jpg
175753-a344va-580-735.jpg

I used this code to echo the file names in the folder.

<?php
 foreach(glob('./images/*.*') as $filename){
     echo $filename;
 } 
?>

Open in new window

0
movieprodw
Asked:
movieprodw
  • 8
  • 5
1 Solution
 
GaryCommented:
Whats the common denominator to identify the image groups?
Is it this bit 175753-a344va and 1221-93939a
Is there something in the filename to identify the size?
0
 
movieprodwAuthor Commented:
the common pattern would be the -xxx-xxx.jpg
0
 
GaryCommented:
Hmmm, the examples you gave xxx-xxx,jpg is not common this bit is 175753-a344va.
Also asking do the numbers 280/500, 180/160, 580/735 represent the sizes or something in this block.

175753-a344va-280-500.jpg
175753-a344va-180-160.jpg
175753-a344va-580-735.jpg
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
movieprodwAuthor Commented:
Yeah, well the are in that pattern but they do not always match, the beginning number does.

for example I would like to delete all that are ending in

-320-xxx.jpg
0
 
movieprodwAuthor Commented:
I found this, not sure if it helps.

// Get a list of all CSV files in your folder.
$csv = glob("*.csv");

// Sort them by modification date.
usort($csv, function($a, $b) { return filemtime($a) - filemtime($b); });

// Remove the newest from your list.
array_pop($csv);

// Delete all the rest.
array_map('unlink', $csv);

Open in new window

0
 
GaryCommented:
You've lost me now, you have 3 images - thumb/small/original - what part of the filename is the same for all 3 images but unique from other images?
Is the 280,180,580 in the filenames something to do with the size - these seem to be consistent in your filenames.

x-x-280-510.jpg
x-x-180-180.jpg
x-x-580-720.jpg
0
 
movieprodwAuthor Commented:
Hello,

Yes they are the file size, the width is consistent but the height is not.

Sorry for being confusing.

Ideally it could grab the 'x' part and compare it to the 'y' part then delete the smaller and keep the larger. xxxxxx-xxxxxx-yyy-yyy.jpg

But if you have a way to delete by pattern such as explode filename and unset if $filename[2] = '280' then that would be great too.

Matt
0
 
GaryCommented:
Just to be sure
x-x-280-510.jpg

the 280 represents the width and the 510 is the height

All images have a width of either
180, 280 or 580px

So we can delete all images with a width of 180 or 280px

<?php
$dir = "images/*";  
  
$pattern1 = '/.*?(180)([-+]\d+)(.)(jpg)/';
$pattern2 = '/.*?(280)([-+]\d+)(.)(jpg)/';

foreach(glob($dir) as $file)

{
if(preg_match($pattern1, $file) || preg_match($pattern2, $file)){

     echo $file.'<br>';
}

}

Open in new window


This doesn't delete the files - I just want you to test it shows the correct files for deletion
0
 
movieprodwAuthor Commented:
That does show the correct images to delete.
0
 
GaryCommented:
If you are absolutely sure then replace
echo $file.'<br>';

Open in new window

with
unlink($file);

Open in new window


You definitely sure...? ;o)
0
 
movieprodwAuthor Commented:
Thank you Gary, you are always very helpful.

I have a backup so if I mess up I will reinstate it.

Thanks again.
Matt
0
 
movieprodwAuthor Commented:
I ran the script and it does not unlink them, could their be a permissions error?

Thanks
0
 
movieprodwAuthor Commented:
Got it, it was a permissions error.
0

Featured Post

Learn to develop an Android App

Want to increase your earning potential in 2018? Pad your resume with app building experience. Learn how with this hands-on course.

  • 8
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now