2012-08-12 31 views
0

有沒有一種方法讓PHP CURL函數獲取網站的內容,但停在我們剛纔問的角色上。我想這種緩衝區。PHP如何cURL/FOpen停止在某些字符

所以劇本沒叫整體頁面

所以方案是這樣的:

: curl execution 
<html> 
-> 
-> 
-> 
-> Title Detected 
: curl close 
-> 
-> 
-> 
-> 
</ html> 

請這不是一個DOM問題。但是,如果發現我們問了,怎麼會停下來。 這是我的代碼:

function curl_download($Url){ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $Url); 
    curl_setopt($ch, CURLOPT_REFERER, $Url); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5"); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
    $output = curl_exec($ch); 
    curl_close($ch); 
    return $output; 
} 

如果捲曲不能處理這個問題,怎麼樣的fopen?你有沒有例子? 感謝before.Also請給我你的示例代碼對我來說,,謝謝

+1

據我所知,curl不能做這個工作,但fopen可能沒問題,因爲你可以使用read在fopen上過濾流。 – Tom 2012-08-12 22:41:34

+0

你可以給我一個用fopen方法的例子。謝謝 – wpro 2012-08-12 22:44:10

+0

http://nz.php.net/manual/en/wrappers.http.php – Louis 2012-08-12 23:08:27

回答

0

下面是使用fsockopen()一個非常簡單例子。將其擴展以適應您的需求。

$host = 'www.site.com'; 
$port = 80; 

$sock = fsockopen($host, $port, $errno, $errstr, 30); 
if (!$sock) { 
    die("Failed to connect. $errno: $errstr"); 
} 

// write http request to socket: 
$request = "GET /file.html HTTP/1.0\r\n" 
      ."Host: $host\r\n" 
      ."User-Agent: some-user-agent\r\n" 
      ."Connection: close\r\n" 
      ."\r\n"; 

fwrite($sock, $request); 

$buffer = ''; // buffer for storing response 

while (!feof($sock)) { 
    $buffer .= fgets($sock, 1024); // read 1024 bytes from socket, append to buffer 

    if (strpos($buffer, '</title>') !== false)) { // title was found 
     fclose($sock); 
     break; 
    } 
} 

因此,我們連接到遠程主機上的HTTP服務器,發出簡單的HTTP/1.0的要求,並且,直到檢測到結束標題標籤在時間讀取響應1024個字節。一旦找到,連接就會關閉。

請注意,儘管我們沒有從套接字讀取整個響應,但底層系統(PHP和OS套接字層)可能已經讀取了更多(或可能全部取決於大小)響應。無論哪種情況,您都確實阻止PHP讀取大部分響應。如果頁面非常大,提前關閉套接字可能會阻止大量數據被實際接收。

希望有所幫助。