【问题标题】:php file_get_contents is slowphp file_get_contents 很慢
【发布时间】:2016-01-01 23:12:11
【问题描述】:

我有两台配置不同的服务器。

服务器 1: 阿帕奇 - 2.2.2, PHP - 5.3.10

服务器 2: 阿帕奇 - 2.4.7, PHP - 5.5.9

file_get_contents("file from server1") 完美运行。但是,file_get_contents("file from server2") 非常慢,需要 5 分钟才能检索文件的内容。

CURL 在两个服务器上都可以正常工作。问题仅限于file_get_contents。我也看到了服务器配置,两台服务器都一样。

当我使用相对路径时很好。问题带有完整的网址。 openssl 已启用,allow_url_fopen 也设置为 on

任何帮助将不胜感激。

【问题讨论】:

  • 不清楚这两台服务器的作用是什么。您在它们上运行客户端代码(curl,file_get_contents())还是从它们下载?此外,发布实际代码和用于比较的 curl 命令行有助于获得答案。
  • 我正在尝试从这些服务器下载。这是我使用的 CURL 代码$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://example.com/test.txt'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch);
  • 这可能取决于配置和缓存。你没有提供足够的细节来说明他们中的任何一个。这个问题可能更适合超级用户或服务器故障。
  • .....因为没有提供足够的信息,它将被关闭。您是否在服务器上记录请求持续时间? (如果不是,您需要开始)您是否使用数据包嗅探器监视连接以查找延迟?您在浏览器中看到相同的行为吗?
  • 我使用了wireshark来跟踪请求过程。似乎浏览器正在等待服务器响应。我在 apache 配置中启用了调试。在那里我发现mod_authz_core 之后它正在等待 apache 超时值达到。基本上,在超时到达之前,服务器不会提供响应。如果我将超时值更改为 10 秒,那么服务器将在 10 秒内提供服务。

标签: php apache curl


【解决方案1】:

从逻辑上讲,至少有四个方面可以解决此性能问题:

首先,硬件: 磁盘上的负载是多少?硬件问题?服务器 2 是否使用慢速磁盘?磁盘是否在同一台机器上运行?

二、Apache HTTP Server: Apache 错误日志中是否有任何错误报告?

为了获得更好的比较,您可以在两个 Web 服务器上运行相同的 Apache 版本和相同的配置。

Apache HTTP Server 有多个 Caching modules,包括 cache_disk_module、cache_module 和 file_cache_module -- 这些是否在一个/两个 Web 服务器上启用?

尝试关闭 TCP 连接,如此处所述 PHP file_get_contents very slow when using full url

三、PHP配置。 PHP 错误日志中是否有任何错误报告?

最后是 PHP 脚本。 尝试加速 PHP 脚本。为了加快速度,您可以考虑使用 fsockopen() 将 file_get_contents() 替换为套接字。下面的sn-p来自PHP文档,说明如何使用fsockopen()

$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}

【讨论】:

    猜你喜欢
    • 2012-12-27
    • 2014-06-19
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多