我在php中制作了一个图像缩放器.调整图像大小时,它会使用新维度缓存新的jpg文件.下次你调用完全img.php?file = hello.jpg&size = 400时,它会检查是否已经创建了新的jpg.
我的问题是关于第二种情况.哪个更快?
header('Location: cache/hello_400.jpg');die();$data = file_get_contents('cache/hello_400.jpg'); header('Content-type: '.$mime);
header('Content-Length: '.strlen($data));
echo $data;还有其他方法可以改善吗?
如果有人想要生成的代码,请查看:http: //egobits.com/misc/img.phps
感谢大家的帮助!
我会选择永远不会将数据打印到浏览器.两种方案都应该永久重定向到生成的图像.除非图像尚不存在,否则会在发送Location标头之前创建.
编辑:
只是要清楚我的意思是永久重定向...
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://path/to/image');
Run Code Online (Sandbox Code Playgroud)
也许你可以做以下事情:
<a href="/img/resizable/hello_400.jpg>).$_SERVER["REQUEST_URI"]从中了解应调整大小的图像.这样,您可以获得一些好处:
If-modified-since和其他与缓存相关的标头留给Web服务器./ img/resizable文件夹中的示例.htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /img.php [L]
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以改善这一点吗?
是的。
有一种方法只发送 HTTP 标头,而不发送任何内容:条件获取。
您可以查看类似的脚本http://shiftingpixel.com/2008/03/03/smart-image-resizer/来实现