首页 > php开发 > php中fsockopen采集网页内容实例

php中fsockopen采集网页内容实例

fsockopen是php中一个比较实用的函数了,下面我来介绍利用fsockopen函数来采集网页的程序.

用法:int fsockopen(string hostname,int port,int [errno],string [errstr],int [timeout]);

一个采集网页实例,代码如下:

<?php
function get_url($url,$cookie=false)
{
    $url = parse_url($url);
    $query = $url[path] . "?" . $url[query];
    echo "Query:" . $query;
    $fp = fsockopen($url[host], $url[port] ? $url[port] : 80, $errno, $errstr, 30);
    if (!$fp) {
        return false;
    } else {
        $request = "GET $query HTTP/1.1\r\n";
        $request.= "Host: $url[host]\r\n";
        $request.= "Connection: Close\r\n";
        if ($cookie) $request.= "Cookie:   $cookie\n";
        $request.= "\r\n";
        fwrite($fp, $request);
        while (!@feof($fp)) {
            $result.= @fgets($fp, 1024);
        }
        fclose($fp);
        return $result;
    }
}
//获取url的html部分,去掉header
function GetUrlHTML($url, $cookie=false)
{
    $rowdata = get_url($url, $cookie);
    if ($rowdata)
    {
        $body = stristr($rowdata, "\r\n\r\n");
        $body = substr($body, 4, strlen($body));
        return $body;
    }
    return false;
}
?>

被禁用后的解决方法:

服务器同时禁用了fsockopen pfsockopen,那么用其他函数代替,如stream_socket_client(),注意:stream_socket_client()和fsockopen()的参数不同.

fsockopen:替换为 stream_socket_client,然后,将原fsockopen函数中的端口参数"80"删掉,并加到$host.

例,代码如下:

<?php
    $fp = fsockopen($host, 80, $errno, $errstr, 30);
    //或
    $fp = fsockopen($host, $port, $errno, $errstr, $connection_timeout);
    //修改后:
    $fp = stream_socket_client("tcp://" . $host . "80", $errno, $errstr, 30);
    //或
    $fp = stream_socket_client("tcp://" . $host . ":" . $port, $errno, $errstr, $connection_timeout);
?>


教程网址:http://www.phprm.com/develop/fs4907.html

欢迎收藏∩_∩但请保留本文链接。

标签:fsockopen采集 php采集网页

发表留言