PHP檔案讀取操作相對於檔案寫入操作涉及更多的PHP檔案操作函數,在代碼執行個體中會詳細介紹這些函數。
讀取文字檔中儲存資料的方式主要涉及的三個步驟及部分檔案操作函數如下:
1、開啟檔案(檔案操作函數:fopen)
2、檔案資料讀取(檔案操作函數:fgets、file、readfile、feof等)
3、關閉檔案(檔案操作函數:fclose)
下面仍然以PHP檔案讀寫作業碼執行個體講解檔案讀取方法的具體應用,在執行個體中,通過調用不同的PHP檔案讀取操作函數讀取文字檔中的資料,你可以加深PHP檔案讀取操作函數的理解,以便在PHP網站開發中合理應用。文字檔中寫入的資料來自於PHP檔案讀寫操作之檔案寫入教程,fopen函數中關於檔案讀寫入模式也可參考此文。
PHP檔案讀取作業碼執行個體
<?$readFun = "fread";switch ($readFun){case "fgetss":@$fp = fopen("leapsoulcn.txt","r") or die("system error");$allowable_tags = "<h1>";while (!feof($fp)) {$output = fgetss($fp,100,$allowable_tags);echo $output;}fclose($fp);break;case "fgetcsv":@$fp = fopen("leapsoulcn.txt","r") or die("system error");while (!feof($fp)) {$output = fgetcsv($fp,100,"\t");print_r($output);}fclose($fp);break;case "readfile":echo readfile("leapsoulcn.txt");break;case "fpassthru":@$fp = fopen("leapsoulcn.txt","r") or die("system error");if(!fpassthru($fp))exit();fclose($fp);break;case "file":$output = file("leapsoulcn.txt");print_r($output);break;case "fgetc":@$fp = fopen("leapsoulcn.txt","r") or die("system error");while (!feof($fp)) {$str = fgetc($fp);echo ($str == "\n"?"<br/>":$str);}fclose($fp);break;case "fread":@$fp = fopen("leapsoulcn.txt","r") or die("system error");echo fread($fp,300);fclose($fp);break;default:@$fp = fopen("leapsoulcn.txt","r") or die("system error");while (!feof($fp)) {$output = fgets($fp,100);echo $output;}fclose($fp);break;}?>
注釋:在上述執行個體中你可以通過對$readFun賦值來實現不同的PHP檔案讀取方法的調用,涉及的PHP檔案讀取操作函數有fgets、fgetss、fgetcsv、readfile、fpassthru、file、fgetc等函數。
PHP檔案讀取操作函數fgets、fgetss、fgetcsv之間的區別
在代碼執行個體中,預設PHP檔案讀取操作函數為fgets,fgetss與fgetcsv函數的功能與fgets一樣,都是一次讀取檔案中的一行,直到檔案末尾。此處我設定讀取文字檔中的資料長度為100,即最大讀取長度為99(100-1),這樣,當遇到分行符號\n或檔案結束符EOF或從檔案中讀取完99個位元組時就停止讀取資料。fgets函數返迴文件讀取的資料,字串型。
fgetss函數是fgets函數的一個變體,它能夠剝離PHP和HTML標記,通過傳遞第三參數來過濾不必要的資料,可以提高網站安全性,比如留言本中可以過濾使用者的輸入資料,fgetss函數原型如下:
string fgetss(resource fp,int length, string[optional] allowable_tags)
allowable_tags參數是可選項,執行個體中我事先在leapsoulcn.txt檔案中寫入了包含html、body、h1標記的一行文字,然後在代碼中我設定只允許h1標記可以出現。
fgetcsv函數是fgets的另一個變體,區別在與,當你的文字檔中寫入的資料使用了定界符,可以使用fgetcsv將一行分解成多行,返回的結果儲存在數組中,函數原型如下:
array fgetcsv(resource fp,int length, string[optional] delimiter,string[optional] enclosure)
delimiter是可選項,由於在之前寫入檔案的資料中我是用了\t,所以在執行個體中檔案讀取函數fgetcsv中的定界符我使用了\t,然後通過print_r列印出fgetcsv返回的數組結構。
三個PHP檔案讀取操作函數fgets、fgetss、fgetcsv共同之處在於事先都需要使用fopen函數開啟讀取的檔案,同時通過feof函數判斷是否檔案指標到達檔案末尾,切記在讀取操作完成後使用fclose函數關閉檔案。
fgetc:讀取單個字元
fgetc函數用來讀取一個字元,在代碼執行個體中我通過一個一個讀取字元,當遇到\n字元時將其轉換成html檔案中的br標記,以便在遊覽器中顯示具體的換行效果,當然此函數的效率肯定是比較低的,不建議使用。
PHP檔案讀取操作函數readfile、fpassthru、file之間的區別
三個函數共同之處是一次可以讀取整個檔案,而不是一次讀一行或一個字元。區別在於:
readfile函數開啟檔案,返迴文件內容直接輸出在遊覽器上,與fopen函數一樣,函數傳回值為檔案的字元總數,readfile函數的第二個參數是可選項,指明PHP是否應在include_path中尋找檔案。在代碼執行個體中,我使用echo語句不是用來輸出讀取的檔案內容,而是輸出讀取的檔案字元總數,讀取的檔案內容readfile函數已自動輸出,這一點必須明確!readfile函數原型如下:
int readfile(string filename,int[optional] use_include_path)
file函數是另一種讀取檔案的方法,它是把讀取的檔案內容送到一個數組中,每行一個數組單元。file函數原型如下:
array file(string filename,bool[optional] use_include_path)
fpassthru()函數用來輸出檔案指標處的所有剩餘資料,即如果檔案指標並不在開頭,它只輸出檔案指標後面的資料。該函數將給定的檔案指標從當前的位置讀取到EOF,並把結果寫到輸出緩衝區,傳回值為輸出的字元數。發生錯誤時,返回FALSE。與readfile()函數相比,fpassthru()函數需要首先開啟檔案,資料讀取完畢後要關閉檔案。
fread與file_exists、filesize函數
fread函數也是讀取檔案的一種方法,其可以從檔案中讀取任意位元組,要麼滿足length要麼讀到檔案末尾。read函數原型如下:
string fread(resource fp,int length)
在用到fread函數時,當你想讀取檔案全部資料,又不知道檔案資料長度時,filesize函數可以解決這個問題,即
<? @$fp = fopen("leapsoulcn.txt","r") or die("system error"); echo fread($fp,filesize("leapsoulcn.txt")); fclose($fp);?>
在PHP檔案讀寫操作教程中我們還沒有使用過file_exists函數,通常在PHP網站開發中,出於各種考慮,有時當檔案不存在時,我們並不像建立新檔案,這時我們就需要在使用fopen函數前使用file_exists函數判斷檔案是否存在,即
<?if(file_exists("leapsoulcn.txt")){ //進行PHP檔案讀寫操作}?>
以上為大家介紹了PHP讀取檔案內容的各種方法,通過合理應用PHP檔案讀寫操作函數,可以實現簡單的留言本、網站log記錄等功能。