在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
php
dedae45nginx
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);