Php 如何检查缓存的图像是否具有相同的宽度&;高度作为url图像?
我正在编写一个脚本,我只是从请求的图像url调整图像大小并缓存它们。我还提供宽度和高度作为请求的可选参数。我通过文件名缓存图像&我想介绍一个用例,当用户请求具有不同宽度或高度的相同图像时 因为我使用的是Codeigniter的图像大小调整库,所以文件名后面附加了_thumb。这就是我存储图像的方式 那样的话我该怎么办?一种解决方案是检查调整大小的图像和缓存图像的Php 如何检查缓存的图像是否具有相同的宽度&;高度作为url图像?,php,image,codeigniter,caching,Php,Image,Codeigniter,Caching,我正在编写一个脚本,我只是从请求的图像url调整图像大小并缓存它们。我还提供宽度和高度作为请求的可选参数。我通过文件名缓存图像&我想介绍一个用例,当用户请求具有不同宽度或高度的相同图像时 因为我使用的是Codeigniter的图像大小调整库,所以文件名后面附加了_thumb。这就是我存储图像的方式 那样的话我该怎么办?一种解决方案是检查调整大小的图像和缓存图像的md5散列 以下是我想做的: $ch = curl_init($url); //initialize cURL
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();
}
我也很关心性能,如果有其他建议,我将不胜感激。尽管@arkascha的建议很好,但将文件保存为文件名哈希要好得多 有了这个,
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$filehash = sha1($filename.$width.$height);
$filename = $filehash.".".$ext
你可以避免我遇到的问题 尽管@arkascha的建议很好,但将文件保存为文件名散列要好得多 有了这个,
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$filehash = sha1($filename.$width.$height);
$filename = $filehash.".".$ext
你可以避免我遇到的问题 一个简单但非常有效的解决方案是更改命名方案,使其包含分辨率。类似于
mypic0001\u 1600\u 1200.jpg
。这是非常有效的,因为您不必打开文件来获取信息。通过这种命名模式,您可以glob
a缓存文件系统中的文件夹内容。它会有任何性能问题吗?它肯定比任何其他策略(如校验和计算或从文件中实际读取图像维度)快得多。这就是我所说的“原始但极为高效”的意思。它的一个变体是为不同的图像维度提供单独的缓存文件夹。这样一来,文件名就无关紧要了,您只需查看所需的缓存文件夹,看看是否已经存在匹配的缓存图像。我可能会使用基于命名约定的解决方案,在有人告诉我看散列方法之前,我一直在想这个问题。一个简单但非常有效的解决方案是更改命名方案,使其包含解析。类似于mypic0001\u 1600\u 1200.jpg
。这是非常有效的,因为您不必打开文件来获取信息。通过这种命名模式,您可以glob
a缓存文件系统中的文件夹内容。它会有任何性能问题吗?它肯定比任何其他策略(如校验和计算或从文件中实际读取图像维度)快得多。这就是我所说的“原始但极为高效”的意思。它的一个变体是为不同的图像维度提供单独的缓存文件夹。这样一来,文件名就无关紧要了,您只需查看所需的缓存文件夹,看看是否已经存在匹配的缓存图像。我可能最终会使用基于命名约定的解决方案,这就是我想到的解决方案,直到有人让我查看哈希方法。