【发布时间】:2015-10-08 12:20:19
【问题描述】:
我正在编写一个脚本,我只是从请求的图像 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();
}
我也关心性能,如果有任何其他建议,我将不胜感激。
【问题讨论】:
-
一个原始但非常有效的解决方案是更改命名方案,使其包含分辨率。像
mypic0001_1600_1200.jpg这样的东西。这是非常有效的,因为您不必打开文件来获取信息。您可以通过该命名模式glob在文件系统中缓存文件夹内容。 -
会有性能问题吗?
-
它肯定比任何其他策略(如校验和计算或实际从文件中读取图像尺寸)都要快得多。这就是我所说的“原始但极其高效”的意思。
-
一种变体是为不同的图像尺寸设置单独的缓存文件夹。这样文件名就无关紧要了,您只需查看所需的缓存文件夹,看看是否已经存在匹配的缓存图像。
-
我可能最终会使用基于命名约定的解决方案,在有人告诉我查看哈希方法之前,我一直在考虑这个解决方案。
标签: php image codeigniter caching