我会给你一个用例,说明为什么有人(在这种情况下是我)会通过 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 之外,这样它们就无法在物理上被 Web 访问。通过 PHP 提供服务还有一个额外的好处,那就是不暴露上传目录的位置。
我知道答案是冗长的,但我希望它可以帮助你做出决定。