fsockopen无阻塞 批量抓取页面、图片,批量采集
博客专区 > let 的博客 > 博客详情
fsockopen无阻塞 批量抓取页面、图片,批量采集
let 发表于4年前
fsockopen无阻塞 批量抓取页面、图片,批量采集
  • 发表于 4年前
  • 阅读 1206
  • 收藏 7
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: fsockopen无阻塞 批量抓取页面、图片,批量采集
function multiFsockopen($urlArr) {
    $sockets = array ();
    $urlInfo = array ();
    $retDone = array ();
    $retData = array ();
    $errno = array ();
    $errstr = array ();
    $urlNum = count ( $urlArr );
    for($x = 0; $x < $urlNum; $x ++) {
        $urlInfo [$x] = parse_url ( $urlArr [$x] );
        $urlInfo [$x] ['port'] = (isset ( $urlInfo [$x] ['port'] )) ? $urlInfo [$x] ['port'] : 80;
        $urlInfo [$x] ['path'] = ($urlInfo [$x] ['path']) ? $urlInfo [$x] ['path'] : "/";
        $sockets [$x] = fsockopen ( $urlInfo [$x] ['host'], $urlInfo [$x] ['port'], $errno [$x], $errstr [$x], 30 );
        stream_set_timeout ( $sockets [$x], 60 );
        stream_set_blocking ( $sockets [$x], false );
        $query = (isset ( $urlInfo [$x] ['query'] )) ? "?" . $urlInfo [$x] ['query'] : "";
        fwrite ( $sockets [$x], "GET " . $urlInfo [$x] ['path'] . "$query HTTP/1.0\r\nHost: " . $urlInfo [$x] ['host'] . "\r\nConnection: close\r\n\r\n" );
    }
    $done = false;
    while ( ! $done ) {
        for($x = 0; $x < $urlNum; $x ++) {
            if (! feof ( $sockets [$x] )) {
                if (isset ( $retData [$x] )) {
                    $retData [$x] .= fgets ( $sockets [$x], 128 );
                } else {
                    $retData [$x] = fgets ( $sockets [$x], 128 );
                }
            } else {
                $retDone [$x] = 1;
            }
        }
        $done = (array_sum ( $retDone ) == $urlNum);
    }
    return array_combine ( $urlArr, $retData );
}

$results = multiFsockopen ( array (
        'http://www.baidu.com/img/bdlogo.gif',
        'http://a.tbcdn.cn/tbsp/img/header/logo.png',
        'http://gtms01.alicdn.com/tps/i1/T1N0pxFEhaXXXxK1nM-357-88.jpg',
        'http://p9.qhimg.com/t01a6b838b555a7435b.png' 
) );
//http://my.oschina.net/cart/
foreach ( $results as $key => $result ) {
    file_put_contents ( basename ( $key ), substr ( $result, strpos ( $result, "\r\n\r\n" ) + 4 ) );
}
exit ();


fsockopen socket 无服务器限制 支持header、cookie、refer 挂马远程

CURL和fsockopen两种方式POST数据并写入文件

共有 人打赏支持
粉丝 137
博文 66
码字总数 75584
×
let
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: