4

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

img以下是网站中生成 100 x 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 服务于每一个img使用这种类型的代码

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

它总是效率低下。

有人想吗?

4

1 回答 1

1

我同意,我已经完全按照您的建议完成了(如果链接已经缓存,则直接编写链接)并且效果很好。

我唯一认为你会被抓住的情况是,如果你的 html 被缓存并且你已经删除了缓存的图像,那么到图像文件的直接链接现在被破坏了。

就我而言,我从来没有删除缓存的图像,所以还没有删除。

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

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

于 2012-05-09T12:35:50.797 回答