我接管了一个动态生成调整大小的图片和缩略图的CodeIgniter网站。
以下是站点中生成100px x 100px缩略图的img标记的示例:
<img src="/media/image/ImageName.jpg/100/100" />这是通过使用helper生成的:
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));它总是低效的。
有谁想过吗?
发布于 2012-05-09 20:35:51
我同意,我已经完全按照你的建议做了(如果它已经缓存了,直接写链接),它工作得很好。
我认为你唯一会被发现的情况是,你的html被缓存了,而你删除了缓存的图像,所以到图像文件的直接链接现在被断开了。
在我的例子中,我从来没有删除过缓存的图像,所以还没有实现这一点。
我能看到的唯一的另一种情况是如果你有私人镜像。在这种情况下,php需要在显示图像之前先检查谁有权限,你不能只将缓存的文件作为直接链接提供,因为人们可以共享直接链接,安全性将不再适用。
如果你确实需要这样做,并且你能够在apache上安装模块(假设你使用的是apache),有一个"x-sendfile“模块可以让你把文件传递过程交回给apache,而不是通过php。这对于php可能超时的大文件是很好的,等等。
https://stackoverflow.com/questions/10515985
复制相似问题