知识大全 php读取文件内容的几种方法详解

Posted 文件

篇首语:学者有自立之志,当拔出流俗,不可泛泛与世浮沉。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 php读取文件内容的几种方法详解相关的知识,希望对你有一定的参考价值。

  示例代码 : 用file_get_contents 以get方式获取内容

复制代码 代码如下: <?php $url= ; $=file_get_contents($url); //print_r($_response_header); ec($); printhr(); printarr($_response_header); printhr(); ?>

   示例代码 : 用fopen打开url 以get方式获取内容

复制代码 代码如下: <? $fp=fopen($url r ); printarr(stream_get_meta_data($fp)); printhr(); while(!feof($fp)) $result =fgets($fp ); echo"url body:$result"; printhr(); fclose($fp); ?>

   示例代码 用file_get_contents函数 以post方式获取url

复制代码 代码如下: <?php $data=array( foo => bar ); $data=_build_query($data); $opts=array( =>array( method => POST header =>"Content type: application/x form urlencodedrn" "Content Length: " strlen($data) "rn" content =>$data ) ); $context=stream_context_create($opts); $=file_get_contents( false $context); echo$; ?>

   示例代码 用fsockopen函数打开url 以get方式获取完整的数据 包括header和body

复制代码 代码如下: <? functionget_url($url $cookie=false) $url=parse_url($url); $query=$url[path] "?" $url[query]; ec("Query:" $query); $fp=fsockopen($url[host] $url[port]?$url[port]: $errno $errstr ); if(!$fp) returnfalse; else $request="GET$queryHTTP/ rn"; $request ="Host:$url[host]rn"; $request ="Connection: Closern"; if($cookie)$request ="Cookie:$cookien"; $request ="rn"; fwrite($fp $request); while(!@feof($fp)) $result =@fgets($fp ); fclose($fp); return$result; //获取url的部分 去掉header functionGetUrlHTML($url $cookie=false) $rowdata=get_url($url $cookie); if($rowdata) $body=stristr($rowdata "rnrn"); $body=substr($body strlen($body)); return$body; returnfalse; ?>

   示例代码 用fsockopen函数打开url 以POST方式获取完整的数据 包括header和body

复制代码 代码如下: <? functionHTTP_Post($URL $data $cookie $referrer="") // parsing the given URL $URL_Info=parse_url($URL); // Building referrer if($referrer=="")// if not given use this script as referrer $referrer=" "; // making string from $data foreach($dataas$key=>$value) $values[]="$key=" urlencode($value); $data_string=implode("&" $values); // Find out which port is needed if not given use standard (= ) if(!isset($URL_Info["port"])) $URL_Info["port"]= ; // building POST request: $request ="POST " $URL_Info["path"] " HTTP/ n"; $request ="Host: " $URL_Info["host"] "n"; $request ="Referer:$referern"; $request ="Content type: application/x form urlencodedn"; $request ="Content length: " strlen($data_string) "n"; $request ="Connection: closen"; $request ="Cookie:$cookien"; $request ="n"; $request =$data_string "n"; $fp=fsockopen($URL_Info["host"] $URL_Info["port"]); fputs($fp $request); while(!feof($fp)) $result =fgets($fp ); fclose($fp); return$result; printhr(); ?>

   示例代码 :使用curl库 使用curl库之前 你可能需要查看一下php ini 查看是否已经打开了curl扩展

复制代码 代码如下: <? $ch = curl_init(); $timeout = ; curl_setopt ($ch CURLOPT_URL ); curl_setopt ($ch CURLOPT_RETURNTRANSFER ); curl_setopt ($ch CURLOPT_CONNECTTIMEOUT $timeout); $file_contents = curl_exec($ch); curl_close($ch); echo $file_contents; ?>

   关于curl库 curl官方网站 curl 是使用URL语法的传送文件工具 支持FTP FTPS HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP curl 支持SSL证书 HTTP POST HTTP PUT FTP 上传 kerberos 基于HTT格式的上传 代理 cookie 用户+口令证明 文件传送恢复 代理通道和大量其他有用的技巧

复制代码 代码如下: <? functionprintarr(array$arr) echo"<br> Row field count: " count($arr) "<br>"; foreach($arras$key=>$value) echo"$key=$value <br>"; ?>

   ====================================================== PHP抓取远程网站数据的代码 现在可能还有很多程序爱好者都会遇到同样的疑问 就是要如何像搜索引擎那样去抓取别人网站的HTML代码 然后把代码收集整理成为自己有用的数据!今天就等我介绍一些简单例子吧 Ⅰ 抓取远程网页标题的例子: 以下是代码片段

复制代码 代码如下: <?php /* + +抓取网页标题的代码 直接拷贝本代码片段 另存为 php文件执行即可 + */ error_reporting( ); $file = fopen (" "r"); if (!$file) echo "<font color=red>Unable to open remote file </font>n"; exit; while (!feof ($file)) $line = fgets ($file ); if (eregi ("<title>( *)</title>" $line $out)) $title = $out[ ]; echo "" $title ""; break; fclose($file); //End ?>

   Ⅱ 抓取远程网页HTML代码的例子: 以下是代码片段

复制代码 代码如下: <? php /* + +DNSing Sprider + */ $fp = fsockopen(" dnsing " $errno $errstr ); if (!$fp) echo "$errstr ($errno)<br/>n"; else $out = "GET / HTTP/ rn"; $out = "Host: dnsing rn"; $out = "Connection: Close rnrn"; fputs($fp $out); while (!feof($fp)) echo fgets($fp ); fclose($fp); //End ?>

   以上两个代码片段都直接Copy回去运行就知道效果了 上面的例子只是抓取网页数据的雏形 要使其更适合自己的使用 情况有各异 所以 在此各位程序爱好者自己好好研究一下吧 =============================== 稍微有点意义的函数是 get_content_by_socket() get_url() get_content_url() get_content_object 几个函数 也许能够给你点什么想法

复制代码 代码如下: <?php //获取所有内容url保存到文件 function get_index($save_file $prefix="index_") $count = ; $i = ; if (file_exists($save_file)) @unlink($save_file); $fp = fopen($save_file "a+") or die("Open " $save_file " failed"); while($i<$count) $url = $prefix $i " "; echo "Get " $url " "; $url_str = get_content_url(get_url($url)); echo " OKn"; fwrite($fp $url_str); ++$i; fclose($fp); //获取目标多媒体对象 function get_object($url_file $save_file $split="| :**: |") if (!file_exists($url_file)) die($url_file " not exist"); $file_arr = file($url_file); if (!is_array($file_arr) || empty($file_arr)) die($url_file " not content"); $url_arr = array_unique($file_arr); if (file_exists($save_file)) @unlink($save_file); $fp = fopen($save_file "a+") or die("Open save file " $save_file " failed"); foreach($url_arr as $url) if (empty($url)) continue; echo "Get " $url " "; $_str = get_url($url); echo $_str; echo $url; exit; $obj_str = get_content_object($_str); echo " OKn"; fwrite($fp $obj_str); fclose($fp); //遍历目录获取文件内容 function get_dir($save_file $dir) $dp = opendir($dir); if (file_exists($save_file)) @unlink($save_file); $fp = fopen($save_file "a+") or die("Open save file " $save_file " failed"); while(($file = readdir($dp)) != false) if ($file!=" " && $file!=" ") echo "Read file " $file " "; $file_content = file_get_contents($dir $file); $obj_str = get_content_object($file_content); echo " OKn"; fwrite($fp $obj_str); fclose($fp); //获取指定url内容 function get_url($url) $reg = /^//[^/] +$/ ; if (!preg_match($reg $url)) die($url " invalid"); $fp = fopen($url "r") or die("Open url: " $url " failed "); while($fc = fread($fp )) $content = $fc; fclose($fp); if (empty($content)) die("Get url: " $url " content failed "); return $content; //使用socket获取指定网页 function get_content_by_socket($url $host) $fp = fsockopen($host ) or die("Open " $url " failed"); $header = "GET /" $url " HTTP/ rn"; $header = "Accept: */*rn"; $header = "Accept Language: zh cnrn"; $header = "Accept Encoding: gzip deflatern"; $header = "User Agent: Mozilla/ (patible; MSIE ; Windows NT ; SV ; Maxthon; InfoPath ; NET CLR )rn"; $header = "Host: " $host "rn"; $header = "Connection: Keep Alivern"; //$header = "Cookie: cnzz = ; rtime= ; ltime= ; cnzz_eid= rnrn"; $header = "Connection: Closernrn"; fwrite($fp $header); while (!feof($fp)) $contents = fgets($fp ); fclose($fp); return $contents; //获取指定内容里的url function get_content_url($host_url $file_contents) //$reg = /^(#|javascript *?|ftp:// +|+| *?href *?|play *?|index *?| *?asp)+$/i ; //$reg = /^(down *? |d+_d+ *?)$/i ; $rex = "/([hH][rR][eE][Ff])s*=s*[ "]*([^> "s]+)[" >]*s*/i"; $reg = /^(down *? )$/i ; preg_match_all ($rex $file_contents $r); $result = ""; //array(); foreach($r as $c) if (is_array($c)) foreach($c as $d) if (preg_match($reg $d)) $result = $host_url $d "n"; return $result; //获取指定内容中的多媒体文件 function get_content_object($str $split="| :**: |") $regx = "/hrefs*=s*[ "]*([^> "s]+)[" >]*s*(<b> *?</b>)/i"; preg_match_all($regx $str $result); if (count($result) == ) $result[ ] = str_replace("<b>多媒体 " "" $result[ ]); $result[ ] = str_replace("</b>" "" $result[ ]); $result = $result[ ][ ] $split $result[ ][ ] "n"; return $result; ?>

   ====================================================== 同一域名对应多个IP时 PHP获取远程网页内容的函数 fgc就是简单的读取过来 把一切操作封装了 fopen也进行了一些封装 但是需要你循环读取得到所有数据 fsockopen这是直板板的socket操作 如果仅仅是读取一个页面 fgc更好 如果公司是通过防火墙上网 一 般的file_get_content函数就不行了 当然 通过一些socket操作 直接向proxy写请求也是可以的 但是比较麻烦 如果你能确认文件很小 可以任选以上两种方式fopen join( file($file)); 比如 你只操作小于 k的文件 那最好还是用file_get_contents吧 如果确定文件很大 或者不能确定文件的大小 那就最好使用文件流了 fopen一个 K的文件和fopen一个 G的文件没什么明显的区别 内容长 就可以花更长的时间去读 而不是让脚本死掉 PHP获取远程网页内容有多种方式 例如用自带的file_get_contents fopen等函数

复制代码 代码如下: <?php echo file_get_contents(" ?>

   但 是 在DNS轮询等负载均衡中 同一域名 可能对应多台服务器 多个IP 假设blog s 被DNS解析到 三个IP 用户每次访问blog s 系统会 根据负载均衡的相应算法访问其中的一台服务器 上周做一个视频项目时 就碰到这样一类需求 需要依次访问每台服务器上的一个PHP接口程序(假设为abc php) 查询这台服务器的传输状态 这时就不能直接用file_get_contents访问了 因为它可能一直重复访问某一台服务器 而 采用依次访问 的方法 在这三台服务器上的Web Server配有多个虚拟主机时 也是不行的 通过设置本地hosts也不行 因为hosts不能设置多个IP对应同一个域名 那就只有通过PHP和HTTP协议来实现 访问abc php时 在header头中加上blog s 域名 于是 我写了下面这个PHP函数

复制代码 代码如下:

   <?php /************************ * 函数用途 同一域名对应多个IP时 获取指定服务器的远程网页内容 * 参数说明 * $ip服务器的IP地址 * $host服务器的host名称 * $url服务器的URL地址(不含域名) * 返回值 * 获取到的远程网页内容 * false访问远程网页失败 ************************/ function HttpVisit($ip $host $url) $errstr = ; $errno = ; $fp = fsockopen ($ip $errno $errstr ); if (!$fp) return false; else $out = "GET $url HTTP/ rn"; $out = "Host:$hostrn"; $out = "Connection: closernrn"; fputs ($fp $out);

  while($line = fread($fp )) $response = $line; fclose( $fp );

  //去掉Header头信息 $pos = strpos($response "rnrn"); $response = substr($response $pos + );

  return $response;

cha138/Article/program/PHP/201311/20975

相关参考

知识大全 XML文件的读取[1]

PHP网络开发详解:XML文件的读取[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 HTML文件的读取[2]

PHP网络开发详解:HTML文件的读取[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 HTML文件的读取[1]

PHP网络开发详解:HTML文件的读取[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 用 PHP 读取文件的正确方法

用PHP读取文件的正确方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 用PHP读取超大文件的实例代码

用PHP读取超大文件的实例代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!cha138

知识大全 使用 PHP 读取文本(TXT)文件 并分页显示

使用PHP读取文本(TXT)文件并分页显示  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!views

知识大全 PHP下载文件名乱码问题详解

PHP下载文件名乱码问题详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  通过把Content

知识大全 php有规律大文件的读取与写入

  这几天在做一个东西研究PHP读取行数较多的文件(大概上百万行)考虑到效率问题进行了简单的研究总结如下  第一条file()函数的效率问题  file()函数的效率很底下如果是有规律的文件比如每行一

知识大全 php.ini 文件配置详解

  ;;;;;;;;;;;;;;;;;;作者金步国;;日期;;;;;;;;;;;;;;;;;;  版权声明  ;;;;;;;;;;;;;;;;;;;本文作者是一

知识大全 PHP入门需要掌握的几种功能代码

PHP入门需要掌握的几种功能代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  经典循环例子&l