Codeigniter / PHP:我应该创建图像加载器还是直接访问图像?

时间:2012-10-04 20:54:28

标签: php image codeigniter

我正在开展一个项目,我从其他网站通过API获取图像,并在我的服务器上本地保存图像。我一直在想,我无法决定是否应该创建一个显示图像的加载器,或者只是直接访问特定的图像?如果我直接访问它们有任何安全问题吗?在我将图像保存在服务器上之前,我验证内容并检查它是否是有效图像,因此我将始终显示有效图像。

图像加载器的工作方式与此类似。我创建了一个控制器(例如称之为“加载”)。然后我可以用图像作为参数调用load,有点像这样:

http://example.com/load/file_name.jpg

然后我通过负载控制器获取图像并显示它。这样做有什么好处,还是可以直接访问图像?

3 个答案:

答案 0 :(得分:1)

如上所述的图像加载器具有明显的缺点,即对于显示的每个图像,必须实例化框架。 一个更好的替代方案是图像助手,可用于在图像上执行任何所需的修改(水印,调整大小,缓存)并输出图像URL,以便图像可以由网络服务器传送而无需额外调用框架。 / p>

答案 1 :(得分:1)

如果通过PHP发送图像,它不会使您的图像更好。数据是相同的,如果不要求限制对指定用户组的访问(也称为公共访问),那么我选择直接访问。

答案 2 :(得分:0)

我将为您提供一个用例,说明为什么某人(在本例中为我)将通过PHP提供图像:

在我的一个应用程序中,用户可以上传头像图像。这些图像在上载时处理,名称更改为哈希,并存储在文件系统中。散列名称存储在数据库中的表中,该表将照片的散列与用户ID相关联,并指示这是否是他们选择的个人资料照片。

如果我只是在网站上使用单个图片大小,我会存储图像路径,是否是他们的个人资料图片并且已经完成了。但是,该网站有多个位置,可以在其中显示图像,并且它们的大小各不相同。根据请求的图像大小,我检查是否已生成接近它的大小。如果有,则发送jpeg标题,在图像位置使用readfile并提供图像。如果没有,那么我将原始上传的图像调整大小,调整到我需要的大小,将其存储在文件系统中,并提供服务。

这样,每次有人上传图片时,我都不会创建5个以上的图像。这些图像是按需生成的,既可以分配CPU时间,又可以减少文件系统的使用,因为可能永远不会请求某些图像大小。

因此,基本上,如果这些适用于您,您不需要通过PHP / CI提供服务:

  • 不限制访问
  • 不需要动态调整大小
  • 不在webroot之外存储图像

如果您感到好奇,我对其中一张图片的请求如下:

http://domain.com/photos/view/3d643a9cecaf8ae849be7ab094579698/s-128/photo.jpg

细分:

http://domain.com/[controller/view]/[image hash]/[square, rectangular, or original]-[size in px]/photo.jpg

这将提供具有以下路径的图像:

http://domain.com/images/uploads/3d/64/3a9cecaf8ae849be7ab094579698/3d643a9cecaf8ae849be7ab094579698_s_128.jpg

我将图像存储在子目录中,以便发生冲突,从而避免由于每个目录的最大文件等导致的文件系统限制。我还可以将图像移到webroot之外,以便它们在网络上无法访问。通过PHP提供服务还有一个额外的好处,就是不要公开上传目录的位置。

我知道答案很冗长,但我希望它可以帮助你做出决定。