Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php文件\u获取\u内容速度慢_Php_Apache_Curl - Fatal编程技术网

php文件\u获取\u内容速度慢

php文件\u获取\u内容速度慢,php,apache,curl,Php,Apache,Curl,我有两台配置不同的服务器 服务器1: Apache-2.2.2, PHP-5.3.10 服务器2: Apache-2.4.7, PHP-5.5.9 file\u获取内容(“来自服务器1的文件”)工作正常。但是,file\u获取内容(“filefromserver2”)速度非常慢,检索文件内容需要5分钟 CURL在这两个服务器上都可以正常工作。问题仅限于文件\u获取\u内容。我也看到了服务器配置,两台服务器都是一样的 当我使用相对路径时,它是好的。问题来自完整的url。 openssl已启用,并且

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

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

服务器2: Apache-2.4.7, PHP-5.5.9

file\u获取内容(“来自服务器1的文件”)
工作正常。但是,
file\u获取内容(“filefromserver2”)
速度非常慢,检索文件内容需要5分钟

CURL在这两个服务器上都可以正常工作。问题仅限于
文件\u获取\u内容
。我也看到了服务器配置,两台服务器都是一样的

当我使用相对路径时,它是好的。问题来自完整的url。 openssl已启用,并且
allow\u url\u fopen
也设置为on


如果有任何帮助,我们将不胜感激。

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

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

其次,Apache HTTP服务器: Apache错误日志中是否有任何错误报告

为了更好地进行比较,您可以在两台web服务器上运行相同的Apache版本和相同的配置

Apache HTTP服务器有许多功能,包括缓存\磁盘\模块、缓存\模块和文件\缓存\模块—这些功能是否在一台/两台web服务器上都启用

尝试关闭TCP连接,如下所述

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

最后是PHP脚本。 尝试加快PHP脚本的速度。为了加快速度,可以考虑使用FockOpen()替换套接字FielyGET-CocultStand()。下面的代码段来自PHP文档,并解释了如何使用:

$fp=fsockopen(“www.example.com”,80,$errno,$errstr,30);
如果(!$fp){
回显“$errstr($errno)
\n”; }否则{ $out=“GET/HTTP/1.1\r\n”; $out.=“主机:www.example.com\r\n”; $out.=“连接:关闭\r\n\r\n”; fwrite($fp,$out); 而(!feof($fp)){ echo fgets(fp,128美元); } fclose($fp); }
不清楚这两台服务器的作用。您是在它们上面运行客户端代码(curl,
file\u get\u contents()
),还是从它们下载?另外,发布实际代码和用于比较的curl命令行有助于获得答案。我正在尝试从这些服务器下载。下面是我使用的CURL代码
$ch=CURL\u init();curl_setopt($ch,CURLOPT_URL,'http://example.com/test.txt'); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1)$输出=curl_exec($ch)这可能取决于配置和缓存。你没有提供足够的细节来说明这两个问题。这个问题可能更适合于超级用户或服务器故障……因为它没有提供足够的信息而关闭。您是否在服务器上记录请求持续时间?(如果没有,您需要启动)您是否使用数据包嗅探器监视连接以查找延迟?您是否在浏览器中看到相同的行为?我使用wireshark跟踪请求过程。看起来浏览器正在等待服务器响应。我在apache配置中启用了调试。在那里,我发现after
mod_authz_core
正在等待apache超时值达到。基本上,服务器在超时到达之前不会提供响应。如果我将超时值更改为10秒,则服务器将在10秒后提供服务。
$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);
}