2016-03-07 35 views
2

我管理使用1.6版本构建的Prestashop网站,该网站上有1000个产品。清理Prestashop的原始产品图像以减少存储空间的使用

每次上传新产品图像时,Prestashop都会将其存储在文件结构中供将来访问,并根据当前主题(类别页面,产品,购物篮等)的不同要求调整图像大小。

随着大量产品和14个更小的版本创建,他们很快填满了存储空间。

我期待找到一种方法来删除原始图像,并将其替换为最大尺寸调整图像的副本。

例如产品5010具有它的原始图像命名5010.jpg和下一个最大的是5010-big_default_2x.jpg

我想删除5010.jpg和5010-big_default_2x.jpg复制到5010.jpg,同时它的位置

我正在考虑某种cli递归正则表达式搜索数字文件,并以.jpg结尾,存储文件名,删除文件并将[filename] -big_default_2x.jpg复制到[filename] .jpg

服务器在Centos 6.7上运行,具有完全的根访问权限。

感谢您的任何建议!

+0

那你试试,什么是您的实际问题? –

+0

我相信最好的办法是使用命令行脚本,但是我不确定如何创建一个可以实现这一点的命令行脚本。 我第一次找到原始图像文件的尝试没有奏效:'find。 -regextype sed -regex“./ [0-9] + \。jpg”' – chrismcb

+0

保留原始图像的重点是能够重新生成图像或生成图像为新添加的格式。我假设你想替换它们,因为它们大于2MB? – gskema

回答

1

如何为简单的东西:

images.php 
========== 

require 'config/config.inc.php' 

$productIds = Db::getInstance(...) // Select all products IDs 

$i = 0; 
$s = 0; 
foreach ($productIds as $id_product) { 
    $bits = explode('', (string)$id_product); 
    $directory = _PS_IMG_DIR.'/'.implode('/', $bits); 
    $filePath = $directory.'/'.(string)$id_product.'.jpg'; 

    if (file_exists($filePath)) { 
    $resizedFilePath = $directory.'/'.(string)$id_product.'-large_default.jpg'; 
    $resizedImageData = file_get_contents(resizedFilePath); 
    file_put_contents($filePath, $resizedImageData); 
    $s++; 
    } 
    $i++; 
} 

echo 'Folders: '.$i.'; Successful copies: '.$s; 

上传此通过FTP和调用它在浏览器中一次

+1

非常好,谢谢 - 我只是在我的脑海中使用命令行。我做了一些小小的调整,但这是你所建议的核心。现在保存了1GB以上,谢谢。 – chrismcb

相关问题