首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP动态图像

PHP动态图像
EN

Stack Overflow用户
提问于 2012-05-09 20:21:58
回答 1查看 1.6K关注 0票数 4

我接管了一个动态生成调整大小的图片和缩略图的CodeIgniter网站。

以下是站点中生成100px x 100px缩略图的img标记的示例:

代码语言:javascript
复制
<img src="/media/image/ImageName.jpg/100/100" />

这是通过使用helper生成的:

代码语言:javascript
复制
echo img('media/image/ImageName.jpg/100/100');

在媒体控制器的图像功能中有一些逻辑,它首先检查缓存文件夹,然后提供缓存的图像(如果存在)。

这看起来仍然不是一种优雅的方法,看看其他像SilverStripe这样的PHP框架做这件事的方式,最好是这样做:

代码语言:javascript
复制
echo img_link('ImageName.jpg', 100, 100);

助手中的这个新的img_link函数将首先检查高速缓存的图像,并将链接直接写入图像文件,或者生成新图像并将直接链接传递给html。

我的想法是,如果PHP使用这种类型的代码为每个img提供服务

代码语言:javascript
复制
$this->output->set_content_type('jpeg')->set_output(file_get_contents($file_path));

它总是低效的。

有谁想过吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-09 20:35:51

我同意,我已经完全按照你的建议做了(如果它已经缓存了,直接写链接),它工作得很好。

我认为你唯一会被发现的情况是,你的html被缓存了,而你删除了缓存的图像,所以到图像文件的直接链接现在被断开了。

在我的例子中,我从来没有删除过缓存的图像,所以还没有实现这一点。

我能看到的唯一的另一种情况是如果你有私人镜像。在这种情况下,php需要在显示图像之前先检查谁有权限,你不能只将缓存的文件作为直接链接提供,因为人们可以共享直接链接,安全性将不再适用。

如果你确实需要这样做,并且你能够在apache上安装模块(假设你使用的是apache),有一个"x-sendfile“模块可以让你把文件传递过程交回给apache,而不是通过php。这对于php可能超时的大文件是很好的,等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10515985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档