php file_get_contents很慢

时间:2015-10-05 10:18:31

标签: php apache curl

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

服务器1: Apache - 2.2.2, PHP - 5.3.10

服务器2: Apache - 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也已设置为

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

从逻辑上讲,至少有四个方面需要考虑解决这个性能问题:

首先,硬件: 磁盘上的负载是多少?硬件问题?服务器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()将socket_get_contents()替换为套接字。下面的代码段来自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);
}