我有两台配置不同的服务器。
服务器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
也已设置为
任何帮助都将不胜感激。
答案 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);
}