Command line interface 清理Prestashop';s原始产品图像以减少存储使用
我管理一个用1.6版构建的Prestashop网站,上面有1000个产品 每次上传新产品图像时,Prestashop都会将其存储在一个文件结构中,以备将来访问,并根据当前主题的各种要求(类别页面、产品、篮子等)调整图像的大小 随着大量的产品和14个较小的版本的创建,他们很快就填满了存储空间 我正在寻找一种方法来删除原始图像,并将其替换为最大尺寸图像的副本 e、 g.产品5010的原始图像名为5010.jpg,其次是5010-big\u default\u 2x.jpg 我想删除5010.jpg并将5010-big_default_2x.jpg复制到5010.jpg,取而代之 我想用某种cli递归正则表达式搜索以.jpg结尾的数字文件,存储文件名,删除文件并将[filename]-big_default_2x.jpg复制到[filename].jpg 服务器在Centos 6.7上运行,具有完全的根访问权限Command line interface 清理Prestashop';s原始产品图像以减少存储使用,command-line-interface,prestashop,prestashop-1.6,Command Line Interface,Prestashop,Prestashop 1.6,我管理一个用1.6版构建的Prestashop网站,上面有1000个产品 每次上传新产品图像时,Prestashop都会将其存储在一个文件结构中,以备将来访问,并根据当前主题的各种要求(类别页面、产品、篮子等)调整图像的大小 随着大量的产品和14个较小的版本的创建,他们很快就填满了存储空间 我正在寻找一种方法来删除原始图像,并将其替换为最大尺寸图像的副本 e、 g.产品5010的原始图像名为5010.jpg,其次是5010-big\u default\u 2x.jpg 我想删除5010.jpg并
谢谢你的建议 像这样简单的事情怎么样:
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上传并在浏览器中调用它一次您尝试了什么以及您的实际问题是什么?我相信最好的方法是使用命令行脚本,但是我不确定如何创建一个可以实现这一点的脚本。首先,我试图查找原始图像文件的尝试没有成功:
find-regextype sed-regex“/[0-9]+\.jpg”
保留原始图像的目的是能够重新生成图像或生成新添加格式的图像。我想你想替换它们是因为它们非常大>2MB?是的,上传的原件太大了,占用了4GB的空间。下一个缩小的大小将足以重新生成任何未来较小的文件-这就是为什么我希望它的副本来代替原始图像。太好了,谢谢-我只是在我的头脑中使用命令行。我做了一些轻微的调整,但这是你建议的核心。现在节省了超过1GB的内存,谢谢。