当前位置:首页 > PHP教程 > php高级应用 > 列表

php中fsockopen采集网页内容实例

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-28 10:12:12 浏览: 评论:0 

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

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

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

  1. <?php 
  2. function get_url ($url,$cookie=false) 
  3. $url = parse_url($url); 
  4. $query = $url[path].”?”.$url[query]; 
  5. echo “Query:”.$query
  6. $fp = fsockopen$url[host], $url[port]?$url[port]:80 , $errno$errstr, 30); 
  7. if (!$fp) { 
  8. return false; 
  9. else { 
  10. $request = “GET $query HTTP/1.1rn”; 
  11. $request .= “Host: $url[host]rn”; 
  12. $request .= “Connection: Closern”; 
  13. if($cookie$request.=”Cookie:   $cookien”; 
  14. $request.=”rn”; 
  15. fwrite($fp,$request); 
  16. while(!@feof($fp)) { 
  17. $result .= @fgets($fp, 1024); 
  18. fclose($fp); 
  19. return $result
  20. //获取url的html部分,去掉header 
  21. function GetUrlHTML($url,$cookie=false) 
  22. $rowdata = get_url($url,$cookie); 
  23. if($rowdata)//开源代码phpfensi.com 
  24. $bodystristr($rowdata,”rnrn”); 
  25. $body=substr($body,4,strlen($body)); 
  26. return $body
  27.  
  28.     return false; 
  29. ?> 

被禁用后的解决方法:

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

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

例,代码如下:

  1. $fp = fsockopen($host, 80, $errno$errstr, 30); 
  2. //或 
  3. $fp = fsockopen($host$port$errno$errstr$connection_timeout); 
  4. //修改后: 
  5. $fp = stream_socket_client("tcp://".$host."80"$errno$errstr, 30); 
  6. //或 
  7. $fp = stream_socket_client("tcp://".$host.":".$port$errno$errstr$connection_timeout);

Tags: fsockopen采集 php采集网页

分享到: