PHP动态图像

时间:2012-05-09 12:21:58

标签: php codeigniter

我接管了一个动态生成调整大小的图像和缩略图的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));

总是效率低下。

有人想到吗?

1 个答案:

答案 0 :(得分:1)

我同意,我完全按照您的建议(如果已经缓存直接编写链接)并且工作正常。

我唯一认为你会被抓住的时候是你的html被缓存并且你已经删除了缓存的图像,所以现在已经断开了与imagefile的直接链接。

在我的情况下,我从来没有必要删除缓存的图像,所以还没有达到目的。

我认为这是一个问题的唯一其他情况是你有私人图像。在这种情况下,php需要在显示图像之前首先检查谁拥有权限,您不能只是将缓存文件作为直接链接提供,因为人们可以共享该直接链接,并且安全性将不再适用。

如果你确实需要这样做,并且你能够在apache上安装模块(假设你使用的是apache),那么有一个模块“x-sendfile”可以让你将文件传递过程切换回apache,而不是通过PHP。这适用于php可能会超时等的大文件