PHP如何cURL / FOpen停止在某些字符

时间:2012-08-12 22:39:41

标签: php curl fopen

有没有办法让PHP CURL函数获取网站的内容,但停在我们刚才问的字符上。我认为这种缓冲。

因此脚本没有调用整个页面

所以这样的计划:

: 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;
}

如果cURL无法处理这个问题,fopen怎么样?你有一个例子吗? 先谢谢。也请给我你的示例代码,谢谢

2 个答案:

答案 0 :(得分:0)

我认为你不能用CURL解析DOM

我建议你使用字符串函数,如strstr,strtok ......

http://www.php.net/manual/en/ref.strings.php

答案 1 :(得分: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阅读大部分响应。如果页面非常大,提前关闭套接字可能会阻止实际接收大量数据。

希望有所帮助。