V1.6 Eliminar Imágenes No Utilizadas De La Carpeta "IMG"

devian_03

New member
XNullUser
Joined
Apr 16, 2021
Messages
2
Reaction score
0
Points
1
NullCash
31
Hola!

Estoy utilizando este script que encontré entre el foro inglés e Internet. Utilizo Prestashop 1.6

Con el elimino las fotos que están en el servidor y que no aparecen ya en la base de datos, en principio funciona bien, pero me he dado cuenta que no elimina la foto original. Por ejemplo, en la carpeta img/p/1/0/2/4 me quita las imágenes que crea Prestashop, pero no la foto original que yo he dado, es decir me quita:

img/p/1/0/2/4/1024-cart_default.jpg
img/p/1/0/2/4/1024-large_default.jpg
img/p/1/0/2/4/1024-small_default.jpg
img/p/1/0/2/4/1024-home_default.jpg
img/p/1/0/2/4/1024-thickbox_default.jpg
img/p/1/0/2/4/1024-medium_default.jpg

Pero la foto original en la ruta de ". . img/p/1/0/2/4/1024.jpg" no la quita.
¿Habrá algún alma caritativa que sepa programar que pueda hacer que se elimine también esa imagen?
Gracias.

Aquí el código:

<?php
// root path of the shop
require(dirname(__FILE__).'/config/config.inc.php');
// root path of the shop
$shop_root = $_SERVER['DOCUMENT_ROOT']."/";
// limit number of image files to check, set to 10 for testing
$limit=10000000000;


include $shop_root . '/config/settings.inc.php';
$pdo = new PDO( 'mysql:host='._DB_SERVER_.';dbname='._DB_NAME_, _DB_USER_, _DB_PASSWD_ );
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$r=$pdo->query('select count(1) cnt from ps_image')->fetch();
echo 'count images database: '.$r['cnt'] . "<Br />";

// reset some counters
$cnt_files=0;
$cnt_checked=0;
$cnt_not_found=0;
$cnt_found=0;

for($ii=1; ($ii<=9) && ($cnt_files != $limit); $ii++)
{
$pathRacine=$shop_root.'img/p/'.$ii;
//delImage($path);
for($jj=0; ($jj<=9) && ($cnt_files != $limit); $jj++)
{
$path1=$shop_root.'img/p/'.$ii.'/'.$jj;
//delImage($path);
for($kk=0; ($kk<=9) && ($cnt_files != $limit); $kk++)
{
$path2=$shop_root.'img/p/'.$ii.'/'.$jj.'/'.$kk;
//delImage($path);
for($ll=0; ($ll<=9) && ($cnt_files != $limit); $ll++)
{
$path3=$shop_root.'img/p/'.$ii.'/'.$jj.'/'.$kk.'/'.$ll;
//delImage($path);
for($mm=0; ($mm<=9) && ($cnt_files != $limit); $mm++)
{
$path4=$shop_root.'img/p/'.$ii.'/'.$jj.'/'.$kk.'/'.$ll.'/'.$mm;
//delImage($path);
for($nn=0; ($nn<=9) && ($cnt_files != $limit); $nn++)
{
$path5=$shop_root.'img/p/'.$ii.'/'.$jj.'/'.$kk.'/'.$ll.'/'.$mm.'/'.$nn;

delImage($path5);
}

delImage($path4);
}

delImage($path3);
}

delImage($path2);
}

delImage($path1);
}

delImage($pathRacine);
}
echo 'files: '.$cnt_files.' checked: '.$cnt_checked.' not_found: '.$cnt_not_found.' found: '.$cnt_found;

function delImage($imageDir)
{
global $limit, $pdo, $cnt_files, $cnt_checked, $cnt_not_found, $cnt_found;
if ($handle = @opendir($imageDir)) { //@ is wriiten to avoid warning message and is handled in else condition
echo $imageDir."<BR />";
while ($cnt_files != $limit && false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
$cnt_files++;
$pi = explode('-',$entry);
if($pi[0]>0 && !empty($pi[1])) {
$cnt_checked++;
if(!checkExistsDb($pdo,$pi[0])) {
$cnt_not_found++;
echo 'rm '.$imageDir.'/'.$entry."<BR />";
unlink($imageDir.'/'.$entry);
} else {
$cnt_found++;
}
}
}
}
closedir($handle);
}
else
{
echo $imageDir." doesn't exist".'<BR />';
}

}

function checkExistsDb($pdo, $id_image) {
$r=$pdo->query($q='select \'ok\' ok, (select id_image from ps_image where id_image = '.(int)$id_image.') id_image');
$row=$r->fetch();
if($row['ok']!='ok') die( 'Problem with query, please correct');
return $row['id_image']?true:false;
}
?>
 
Top