文本处理系列函数用法(一)

在PHP里有个对文本非常便捷的操作函数对。(file_get_contents和file_put_contents)对文本读取和写的操作。
  主要参数如下:
  file_get_contents(path,include_path,context,start,max_length)
  各参数意义:
  path : 读取的文件路径(读取的文件或者url)
  include_path(该选项是指函数的获取路径)
  context(上下文,读取远程文件的时候常常用到)
  start(开始的读取位置)
  max_length(规定读取的长度)
  PS:该函数在allow_url_fopen是false的情况是无法远程打开网址的(一般在本地读取是会打开该函数,用来对外部进行调用的)
  下面展开具体的使用场景,进行示例说明:
1.txt的文本内容是:(现在希望往每一行前面加一个标记aa)
 12121
 de454

 dedae45


file_put_contents($path,$content,FILE_APPEND);

 

<?php
 //可以直接用file是获取1.txt,将其直接设置为数组
 $str =file_get_contents("C:\\1.txt");
 $str = explode("\n",$str);
  foreach($str as $key=>$val){
           $str1[$key]="aa".$val;
  }
 
  $str2=implode("\n",$str);
  file_put_contents("c:\\1.txt",$str2);
?>

2.读取一个url,对里面的信息进行提取,然后保存进入一个文本(用可以用来对文本进行分析)

<?php
$str = file_get_contents("http://www.baidu.com");
 preg_match_all("/[\w]{2,9}/",$str,$arr);
  $str2 = implode("\n",$arr[0]);
  file_put_contents("1.txt",$str2);
 ?>

 3.利用第三个参数发送上下文$context 上下文是个对初期比较费解的概念,上下文是内容之外的东西(比如http头)
 在curl库里这些东西比较完善。
 用该方法的时候,需要理解一个概念——HTTP的消息头,打开浏览器调试界面即可看到。file_get_contents一般控制的是请求头部分。
 请求头主要包括:(最常见的请求头简单描述)
 Host:读取的远程主机
 User_Agent:客户端(一般浏览器会告诉远程主机,自己的浏览器版本型号相关问题)
 Accept:浏览器可接受的MIME类型(MIME类型在nginx的详细使用解析里提到过,各种文本格式)
 Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
 Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。有些服务器会发送支持的压缩格式,可以使得大幅度提升资料传输效率
 Connection:表示是否需要持久连接。"keep-alive"可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。(实现方式需要服务器端发先进行大小计算,然后分段发送)
 Cookie:这是最重要的请求头信息之一。session的表示方式的一种。写入到客户端的信息,读取的时候,也会对其进行读取,对远程端进行模拟的时候,通常将cookie放入上文,模拟已经登录的状态获取信息
 这里做个模拟用户登录后的状态,获取远程信息:(这个功能非常的强大,可以在登录后提取权限用户能看到的所有信息)也可以模拟登录,同时模拟一些登录后的操作(这让人想到了神秘的各种外挂——对的,各种外挂的模拟也是基于差不多的原理识别完成权限用户的自动操作)
例如抓去数据的时候,模拟登录后抓去草稿的数据方法:

$opts =array(
'http'=>array("header"=>"cookie:oscid=这里是你osccookie")
);
 $context  = stream_context_create($opts);
 $url = "http://my.oschina.net/xiongyuanliang/admin/drafts";
 $result = file_get_contents($url, false, $context, -1, 40000);
 print_r($result);


你可能感兴趣的:(文本处理系列函数用法(一))