2012-05-09 63 views
4

我接管了一个CodeIgniter PHP网站,该网站可动态生成已调整大小的图像和缩略图。PHP动态图像

这里是产生站点的img标签的一个例子的由100像素缩略图100像素:

<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使用这种类型的代码

$this->output->set_content_type('jpeg')->set_output(file_get_contents($file_path)); 

服务每img它永远是低效的。

想到任何人?

+0

你是否试图保持相同比例的双方或smoosh /将图像拉伸到您输入的任何尺寸? – AMayer

+0

有几种情况。一种是在没有任何用户输入的情况下生成缩略图,另一种是用户将大图像的区域定义为缩略图的缩略图。 –

回答

1

我同意,我做了你提出什么(直接写入如果它已经被缓存的链接),它工作正常。

我能想到你会被抓住了唯一的一次是,如果你的HTML被缓存,并且您已经删除缓存图像,所以直接链接到镜像文件正在打破。

在我的情况,我从来没有删除缓存图像,所以没有击中那呢。

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

如果您确实需要这样做,并且您能够在apache上安装模块(假设您使用的是apache),那么会有一个模块“x-sendfile”,它将允许您将文件交付过程切换回apache ,而不是通过PHP。这对于那些php可能超时的大文件是很好的,等等。

+0

感谢您的加分,好好想想。 –