這篇文章主要介紹了PHP檔案讀取功能的應用實例以及常用的檔案資料讀取的函數的使用方法及區別,非常的詳細,有需要的小夥伴可以參考下。
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中文網其他相關文章!