我接管了一个动态生成调整大小的图像和缩略图的CodeIgniter PHP站点。
以下是网站中生成100px x 100px缩略图的img
代码示例:
<img src="/media/image/ImageName.jpg/100/100" />
这是通过使用帮助程序生成的:
echo img('media/image/ImageName.jpg/100/100');
媒体控制器中的图像功能中有一些逻辑,它首先检查缓存文件夹,然后提供缓存的图像(如果存在)。
看起来这仍然不是一种优雅的方法,并且正在考虑像SilverStripe这样的其他PHP框架的做法,这样做会更好:
echo img_link('ImageName.jpg', 100, 100);
帮助程序中的这个新img_link
函数会首先检查缓存的图像,然后将链接直接写入图像文件或生成新图像并将直接链接传递给html。
我的想法是,如果PHP使用这种类型的代码为每个img
提供服务
$this->output->set_content_type('jpeg')->set_output(file_get_contents($file_path));
总是效率低下。
有人想到吗?
答案 0 :(得分:1)
我同意,我完全按照您的建议(如果已经缓存直接编写链接)并且工作正常。
我唯一认为你会被抓住的时候是你的html被缓存并且你已经删除了缓存的图像,所以现在已经断开了与imagefile的直接链接。
在我的情况下,我从来没有必要删除缓存的图像,所以还没有达到目的。
我认为这是一个问题的唯一其他情况是你有私人图像。在这种情况下,php需要在显示图像之前首先检查谁拥有权限,您不能只是将缓存文件作为直接链接提供,因为人们可以共享该直接链接,并且安全性将不再适用。
如果你确实需要这样做,并且你能够在apache上安装模块(假设你使用的是apache),那么有一个模块“x-sendfile”可以让你将文件传递过程切换回apache,而不是通过PHP。这适用于php可能会超时等的大文件