程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php中fsockopen采集網頁內容實例

php中fsockopen采集網頁內容實例

編輯:關於PHP編程

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.1rn”;
$request .= “Host: $url[host]rn”;
$request .= “Connection: Closern”;
if($cookie) $request.=”Cookie:   $cookien”;
$request.=”rn”;
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,”rnrn”);
$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。

 代碼如下 復制代碼

$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);


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved