2015-10-05 141 views
-2

我有兩臺配置不同的服務器。php file_get_contents很慢

服務器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也設置爲

任何幫助,將不勝感激。

+0

目前尚不清楚兩臺服務器的作用。你在他們上面運行客戶端代碼(curl,'file_get_contents()')或者你從他們那裏下載?另外,發佈實際代碼和用於比較的curl命令行有助於獲得答案。 – axiac

+0

我正在嘗試從這些服務器下載。這裏是我使用的CURL代碼 '$ ch = curl_init(); curl_setopt($ ch,CURLOPT_URL,'http://example.com/test。文本'); curl_setopt($ ch,CURLOPT_RETURNTRANSFER,1); $ output = curl_exec($ ch);' – user3752326

+1

它可能取決於配置和緩存。你還沒有提供足夠的細節來說明其中任何一個。這個問題可能更適合超級用戶或服務器故障。 – jww

回答

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()。下面的代碼片段來自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); 
}