防止通过 PHP 缩略图库提供大量照片时出现 500 内部服务器错误


Prevent 500 Internal Server Error when serving lots of photos via a PHP thumbnailing library

我有一个网站,允许用户将照片贡献(上传(到相册。

为了保护照片,它们存储在/public_html之外的文件夹中,并通过名为PHPThumb的脚本显示在页面中,该脚本显示质量较低的照片的小尺寸调整版本(因为可以上传高分辨率照片(,并且还允许用户在照片中添加水印。

我的问题是,有时当特定相册(页面(的流量很大时,某些照片没有显示,或者整个页面完全显示500 Internal Server Error(即使我使用分页并且每页仅显示 40 张照片(。需要几秒钟,有时甚至几分钟才能恢复网站。

我认为使用缩略图库可以减轻负载,因为服务器不必发送整个高分辨率照片,而只需发送调整大小的版本。但事实似乎并非如此。

我正在使用共享的虚拟主机包,

虽然我知道不建议将共享用于我的网络应用程序,但在我决定升级我的虚拟主机包之前,我想探索任何其他选项来改进网站。

关于防止500错误的任何建议?

鉴于上述设置,也会接受有关良好网络主机的建议。(我不太精通服务器管理。

  1. 这些缩略图不是在每个请求上动态生成的,它们会被缓存,对吧?如果没有,你可以从那里开始。

  2. 将原始图像存储在公共目录之外是有意义的,但您可以考虑将缩略图存储在公共目录中,以便可以直接提供它们,而无需处理。

  3. 此外,请确保在提供这些缩略图时发送正确的缓存标头。考虑到缩略图是较大版本的小复制品,它不会改变,因此您可以将到期日期设置得很远。

    3.1 但是,在您的情况下,您允许用户在缩略图上添加水印,以便您可以根据该水印缓存缩略图。您可以对图像名称+水印进行哈希处理并获取缩略图名称。如果水印会改变,缩略图名称也会不同,所以"遥遥领先"的缓存过期标头不会咬你。