【问题标题】:PHP file_get_contents($url) slow performancePHP file_get_contents($url) 性能缓慢
【发布时间】:2011-12-27 16:19:54
【问题描述】:

我的网页使用 Google 图表生成五张图表。如果图形尚未缓存,我有以下代码行来检索图像。

$image = file_get_contents("http://chart.apis.google.com/chart?".$query);

当循环执行该代码时,获取每个图像需要 10 秒。但是,如果我将代码更改为使用 Google 的 IP 地址之一而不是 URL:

$image = file_get_contents("http://74.125.93.100/chart?".$query);

检索图像只需不到一秒钟的时间。所以我最初的想法是 DNS 没有解析 URL,延迟是来自循环分配的 DNS 服务器?所以我尝试从服务器 ping chart.apis.google.com,它立即返回了合理的响应。

所以我的问题是:是否有任何我可能忽略的 PHP(或 Apache2)配置设置可能导致此延迟,或者这听起来像是服务器配置问题?

【问题讨论】:

  • 如果您使用其他方法来检索图像,例如 cURL,该怎么办?
  • PHP 的哪个版本?您是否有机会升级到最新版本,看看是否能解决问题?
  • 我会做一些测试,看看 DNS 是否真的是问题所在。您可以将 API 调用包装在一个计时块中。
  • 感谢所有回复的人。这个问题肯定与 DNS 相关,我的任务是弄清楚它是否与 PHP 或 Apache 相关。我已经使用不同的 DNS 服务器测试了服务器,但无济于事。如果我发现任何进一步的东西会更新。

标签: php


【解决方案1】:

您的 DNS 解析速度很慢(您的服务器使用的 DNS 可能有问题,然后大多数其他域可能很慢)或您的服务器在使用 DNS 缓存时出现问题。

无论如何,如果您没有特定的理由来处理从谷歌图表接收到的图像,为什么不直接将其打印为 img 标签?如果需要,您可以使用 css 覆盖文本或透明 png-s。

【讨论】:

    【解决方案2】:

    这里遇到了同样的问题。可能是 DNS 问题...可能是 apache 服务器 使用速度太慢的 DNS 服务器。

    我尝试了不同的方法:CURL、WGET (shell exec)...但仍然遇到同样的性能问题。

    在我的生产服务器上大约需要 15 秒。但是在我的本地服务器(使用 IP)上,我的脚本只需不到 1.5 秒。

    试试 /etc/resolv.conf 还是 /etc/named.conf?也许。我正在努力寻找解决方案。

    【讨论】:

    • 看来我遇到了和你一样的问题。我的解决方案原来是编辑我的 /etc/resolv.conf 以使用 Google 的名称服务器(即nameserver 8.8.8.8)。
    • @Steven Oxley 非常感谢!!!!我花了 2 个小时才找到解决这个问题的方法,只有您的建议有用。
    【解决方案3】:

    这是与您的托管服务提供商在/etc/resolv.conf 中设置的 IP 有关的问题。你不能修复它。这是您的托管服务提供商的问题。

    但您可以使用 google 公共 dns:8.8.8.8。打开/etc/resolv.conf,然后删除所有数据并写入:

    nameserver 8.8.8.8
    

    然后保存。重启dns和apache。然后再试一次。

    【讨论】:

      【解决方案4】:

      为什么不先解析ip再开始加载图片?

      $ip = gethostbyname($name);
      $image = file_get_contents($ip."/chart?".$query);
      

      【讨论】:

      • 是的,这可行,但仍会花费大约 10 秒,这是不可接受的。我确信这是一个配置问题,只是不确定这听起来像是 PHP、Apache 还是服务器配置问题。
      • 只有在该服务器上仅托管一个站点时才有效。在多站点环境中,服务器将不知道您正在调用哪个站点
      猜你喜欢
      • 1970-01-01
      • 2016-01-01
      • 2012-12-27
      • 2010-10-14
      • 2015-01-27
      • 2021-06-04
      • 2016-11-09
      • 2021-06-21
      • 2012-05-11
      相关资源
      最近更新 更多