2015-07-19 41 views
1

我正在寫一個腳本,我只是從請求的圖像URL調整圖像大小並緩存它們。我也給寬度&高度作爲請求的可選參數。我通過文件名緩存圖像&我想在用戶請求具有不同寬度或高度的相同圖像時覆蓋一個用例。如何檢查緩存的圖像是否具有與url圖像相同的寬度和高度?

由於我使用的是Codeigniter的圖像大小調整庫,文件名將附加_thumb。這就是我存儲圖像的方式。

我該怎麼辦?一種解決方案是檢查調整大小的圖像和緩存圖像的md5散列。

這裏就是我想這樣做:

  $ch = curl_init($url); //initialize cURL 

      curl_setopt($ch, CURLOPT_HEADER, 0); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
      curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 
      $dataToWrite = curl_exec($ch); //Execute the given cURL session. 

      curl_close ($ch); //close the given cURL session 
      $fp = fopen($dirPath.$filename,'w'); 
      fwrite($fp, $dataToWrite); 
      fclose($fp); 

最後,

  if (md5_file($dirPath.$filename) == md5_file($dirPath.$resizedImage){ 
       serveimagefromcache() & deletethedownloadedfile(); 
      } else { 
       resizetheimage() && serveit(); 
      } 

我關心的性能,以及,我將不勝感激任何其他建議。

+0

原始但非常有效的解決方案是更改命名方案,使其包含分辨率。像「mypic0001_1600_1200.jpg」。這非常有效,因爲您不必打開文件即可獲取信息。並且您可以通過該命名模式在文件系統中「緩存」緩存文件夾內容。 – arkascha

+0

它會有任何性能問題嗎? – thedeliciousmuffin

+0

它肯定比檢查總和計算或實際從文件中讀取圖像尺寸等任何其他策略都快得多。這就是我所說的「原始但非常有效」。 – arkascha

回答

0

即使@ arkascha的建議是相當不錯的,但保存文件作爲文件名散列好得多。

有了這個,

$ext = pathinfo($filename, PATHINFO_EXTENSION);  
$filehash = sha1($filename.$width.$height); 
$filename = $filehash.".".$ext 

可以阻止我遇到的問題。

相關問題