2016-03-07 28 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