2012-08-29 163 views
1

在PHP中讀取文件的最快方式是什麼?具體來說,我正在閱讀一個網址,我正在使用fgets閱讀一個文件,網址的大小約爲1MB,閱讀5個網址最多隻需要20秒。我只得到一行字符串,它位於文件的末尾。我實際上使用fseek將指針移動到url的末尾,但它只能在文件(不是url)上工作。任何精彩的想法?在PHP中讀取文件的最快方法是什麼?

我的繼承人的示例代碼

$fp=fopen("http://url.com", "r"); 
if(is_bool($fp)){ 
    exit; 
} 
while(!feof($fp)) { 
    $data = fgets($fp); 
    if($data=="this is what i've wanted") 
    { 
     // codes... 
    } 
} 
fclose($fp); 
+0

您可以嘗試'file_get_contents'。不過,我不確定它會更快 –

回答

2

在這種情況下,你不能只是*跳過所有內容。網絡傳輸工作的方式是定義一個內容長度,並且必須在所需部分之前閱讀所有內容。

總之,你不能跳過它。只要閱讀它,抓住你需要的東西並繼續生活。

* 注意:如果資源支持部分內容和範圍請求,那麼可以。不見得。

0

使用curl獲得遠程URL:

function curlRequest($url) 
{ 

    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_URL,    $url); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,  true); 
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION,  true); 
    curl_setopt($curl, CURLOPT_BINARYTRANSFER,  true); 
    curl_setopt($curl, CURLOPT_ENCODING,   true); 
    curl_setopt($curl, CURLOPT_HEADER,    false); 

    $a = new stdclass; 
    $a->body   = curl_exec   ($curl); 
    $a->status   = curl_getinfo  ($curl,  CURLINFO_HTTP_CODE); 
    $a->effectiveURL = curl_getinfo  ($curl,  CURLINFO_EFFECTIVE_URL); 

    curl_close ($curl); 

    return $a; 
} 
1

你可以使用捲曲,可支持恢復下載僅檢索文件的最後部分:

function retrieve_tail($remoteFile, $localFile = null, $bytes = 1000) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RANGE, intval($bytes)."-"); 
    $fp = fopen($localFile, "w+"); 
    curl_setopt($ch, CURLOPT_FILE, $fp); 
    $result = curl_exec($ch); 
    curl_close($ch); 
    fclose($fp); 
    return $result; 
} 

然後調用:

$result = retrieve_tail("http://url.com", "local_copy.txt", 20000); 
    print_r($result); 

而且你會在你指定的本地文件上得到你想要的。此外,您可以設置

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

直接獲取內容。

相關問題