Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查缓存的图像是否具有相同的宽度&;高度作为url图像?_Php_Image_Codeigniter_Caching - Fatal编程技术网

Php 如何检查缓存的图像是否具有相同的宽度&;高度作为url图像?

Php 如何检查缓存的图像是否具有相同的宽度&;高度作为url图像?,php,image,codeigniter,caching,Php,Image,Codeigniter,Caching,我正在编写一个脚本,我只是从请求的图像url调整图像大小并缓存它们。我还提供宽度和高度作为请求的可选参数。我通过文件名缓存图像&我想介绍一个用例,当用户请求具有不同宽度或高度的相同图像时 因为我使用的是Codeigniter的图像大小调整库,所以文件名后面附加了_thumb。这就是我存储图像的方式 那样的话我该怎么办?一种解决方案是检查调整大小的图像和缓存图像的md5散列 以下是我想做的: $ch = curl_init($url); //initialize cURL

我正在编写一个脚本,我只是从请求的图像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(); 
           }

我也很关心性能,如果有其他建议,我将不胜感激。

尽管@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缓存文件系统中的文件夹内容。它会有任何性能问题吗?它肯定比任何其他策略(如校验和计算或从文件中实际读取图像维度)快得多。这就是我所说的“原始但极为高效”的意思。它的一个变体是为不同的图像维度提供单独的缓存文件夹。这样一来,文件名就无关紧要了,您只需查看所需的缓存文件夹,看看是否已经存在匹配的缓存图像。我可能最终会使用基于命名约定的解决方案,这就是我想到的解决方案,直到有人让我查看哈希方法。