【问题标题】:Http requests fail after X amountX 数量后 Http 请求失败
【发布时间】:2013-10-10 12:19:51
【问题描述】:

我有一个页面通过名为thumb.php的文件动态加载图像

此文件获取大图像文件,制作缩略图并输出 jpg,如下所示:

<img src="thumb.php?width=100&height=100&cropratio=1:1&image=/photos/45_Jumps-059.jpg" />

我的服务器出现问题,当我达到大约 60 个请求(所有图像请求 thumb.php 60 多次)时,我从服务器返回的响应是:

Remote server closed the connection before sending response header

图片加载失败。

这是否像 apache 或 php 内存不足之类的?在它再次开始工作之前,它会使我的整个服务器停止大约一分钟。

【问题讨论】:

  • 看起来是内存问题。
  • 那会是 apache 内存还是 php?
  • 我相信是 PHP。你用什么输出(echo,gd?)你的图像?
  • 脚本生成缓存文件并将其保存到/imagecache 文件夹。然后它将使用$image = ob_get_contents() 读取图像文件,设置标题,然后使用echo $image
  • Benjamin之前在这个话题中提供了一个很棒的优化功能:stackoverflow.com/questions/1851849/output-an-image-in-php

标签: php apache


【解决方案1】:

问题很可能是 Apache 中的最大连接限制。它已设置为服务器可以在同时连接过多时继续运行。它很容易配置,但您提到您在共享主机上,因此您不太可能更改它。

在您的场景中,我会通过在页面加载时加载一些图像请求来分散图像请求,然后使用 JavaScript 观察加载完成并添加更多图像。 JQuery 示例(未经测试):

<img src="" data-src="thumb.php?width=100&height=100&cropratio=1:1&image=/photos/45_Jumps-059.jpg" />
<img src="" data-src="thumb.php?width=100&height=100&cropratio=1:1&image=/photos/46_Jumps-059.jpg" />
<img src="" data-src="thumb.php?width=100&height=100&cropratio=1:1&image=/photos/47_Jumps-059.jpg" />

<script>
    $("img[src='']").load(function() {
       var next = $("img[src='']:first");
       next.attr('src', next.data('src');
    });
    var first = $("img[src='']:first");
    first.attr('src', first.data('src');
</script>

【讨论】:

  • 嗯,这可能只在一个页面上解决。但是,apache 必须从许多客户端机器获取请求。这个问题应该有更复杂的解决方案!
  • 共享主机也可能限制来自单个 IP 的同时连接,以帮助防止 DDOS 攻击。这将解决这个问题。
  • 我认为你对 apache 限制连接是正确的。我认为您的解决方案可能有效,但我最终将图像分页,每页放置约 40 个图像,现在一切似乎都很好
猜你喜欢
  • 2019-05-09
  • 1970-01-01
  • 2022-12-16
  • 2016-09-07
  • 2014-11-19
  • 1970-01-01
  • 2016-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多