2011-03-16 224 views
0

我正在使用file_get_contents從鏈接中獲取標題,但需要大約20 - 30秒才能執行。有沒有一種簡單快捷的方法來獲取?如何減少file_get_contents的執行時間

更新:我想這個代碼帶來的一切,包括HTML

$page = fread(fopen($url, "r"), 1000); // first 2KB 
$titleStart = strpos($page,'<title>')+7; 
$titleLength = strpos($page,'</title>')-$titleStart; 
$meta['title'] = substr($page,$titleStart,$titleLength); 

回答

3

對於檢索遠程頁面,時間主要取決於連接速度,延遲和遠程服務器。關於這些事情你可以做的事情不多,而使用替代的HTTP檢索方法將只會有所幫助。

但是,如果遠程頁面非常大,那麼僅僅部分獲取它是有意義的。相反的file_get_contents下載完整的頁面,請嘗試:

$page = fread(fopen($url, "r"), 2048); // first 2KB 

提取使用這個,而不是你的SUBSTR方法:

preg_match('#<title>(.*?)</title>#', $page, $match); 
$meta["title"] = $match[1]; 
+0

'$ page = fread(fopen($ url,「r」),1000); //第一個2KB $ titleStart = strpos($ page,'')+7; $ titleLength = strpos($ page,'') - $ titleStart; $ meta ['title'] = substr($ page,$ titleStart,$ titleLength);'我試過這個代碼,但它的內容不是標題 – 2011-03-16 17:05:52

+0

然後將它設爲4KB或8KB。不知道你的使用細節。 – mario 2011-03-16 17:10:15

+0

我只是想打印鏈接的META標題..但它帶來了整個html代碼 – 2011-03-16 17:17:14

3

你可以試着捲曲(http://php.net/manual/en/book.curl.php),或緩存答案如果它不經常改變。

您的問題很可能是由於網絡延遲造成的,其中很大一部分由您從中提取數據的網站控制。距離主機較近的服務器可以提供幫助。

+0

。在這些情況下,cURL比'file_get_contents'或'fopen'快得多。 – Artefact2 2011-03-16 17:14:42

1

你對於可能被要求往往是一個文件最好的選擇緩存它。

在您的服務器上保留一個cache文件夾,只要您請求的文件不經常更改,您可以使用filemtime()檢查緩存版本文件的最後修改時間,如果時間超過24小時老,你可以請求遠程文件

0

捲曲的功能是解決方案,因爲有CURLOPT_CONNECTTIMEOUT和CURLOPT_TIMEOUT在捲曲,但是隻有stream_set_timeout同意(連接超時)中的file_get_contents,等的fopen