PHP文件讀寫(xiě)操作之文件讀取方法詳解
更新時(shí)間:2011年01月13日 23:35:08 作者:
在上一篇PHP教程中介紹了如何利用PHP實(shí)現(xiàn)文件讀寫(xiě)操作中的文件寫(xiě)入功能,接下來(lái)和大家分享PHP文件讀取功能的應(yīng)用實(shí)例
PHP文件讀取操作相對(duì)于文件寫(xiě)入操作涉及更多的PHP文件操作函數(shù),在代碼實(shí)例中會(huì)詳細(xì)介紹這些函數(shù)。
讀取文本文件中存儲(chǔ)數(shù)據(jù)的方式主要涉及的三個(gè)步驟及部分文件操作函數(shù)如下:
1、打開(kāi)文件(文件操作函數(shù):fopen)
2、文件數(shù)據(jù)讀取(文件操作函數(shù):fgets、file、readfile、feof等)
3、關(guān)閉文件(文件操作函數(shù):fclose)
下面仍然以PHP文件讀寫(xiě)操作代碼實(shí)例講解文件讀取方法的具體應(yīng)用,在實(shí)例中,通過(guò)調(diào)用不同的PHP文件讀取操作函數(shù)讀取文本文件中的數(shù)據(jù),你可以加深PHP文件讀取操作函數(shù)的理解,以便在PHP網(wǎng)站開(kāi)發(fā)中合理應(yīng)用。文本文件中寫(xiě)入的數(shù)據(jù)來(lái)自于PHP文件讀寫(xiě)操作之文件寫(xiě)入教程,fopen函數(shù)中關(guān)于文件讀寫(xiě)模式也可參考此文。
PHP文件讀取操作代碼實(shí)例
<?
$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;
}
?>
注釋?zhuān)涸谏鲜鰧?shí)例中你可以通過(guò)對(duì)$readFun賦值來(lái)實(shí)現(xiàn)不同的PHP文件讀取方法的調(diào)用,涉及的PHP文件讀取操作函數(shù)有fgets、fgetss、fgetcsv、readfile、fpassthru、file、fgetc等函數(shù)。
PHP文件讀取操作函數(shù)fgets、fgetss、fgetcsv之間的區(qū)別
在代碼實(shí)例中,默認(rèn)PHP文件讀取操作函數(shù)為fgets,fgetss與fgetcsv函數(shù)的功能與fgets一樣,都是一次讀取文件中的一行,直到文件末尾。此處我設(shè)定讀取文本文件中的數(shù)據(jù)長(zhǎng)度為100,即最大讀取長(zhǎng)度為99(100-1),這樣,當(dāng)遇到換行符\n或文件結(jié)束符EOF或從文件中讀取完99個(gè)字節(jié)時(shí)就停止讀取數(shù)據(jù)。fgets函數(shù)返回文件讀取的數(shù)據(jù),字符串型。
fgetss函數(shù)是fgets函數(shù)的一個(gè)變體,它能夠剝離PHP和HTML標(biāo)記,通過(guò)傳遞第三參數(shù)來(lái)過(guò)濾不必要的數(shù)據(jù),可以提高網(wǎng)站安全性,比如留言本中可以過(guò)濾用戶(hù)的輸入數(shù)據(jù),fgetss函數(shù)原型如下:
string fgetss(resource fp,int length, string[optional] allowable_tags)
allowable_tags參數(shù)是可選項(xiàng),實(shí)例中我事先在leapsoulcn.txt文件中寫(xiě)入了包含html、body、h1標(biāo)記的一行文字,然后在代碼中我設(shè)定只允許h1標(biāo)記可以出現(xiàn)。
fgetcsv函數(shù)是fgets的另一個(gè)變體,區(qū)別在與,當(dāng)你的文本文件中寫(xiě)入的數(shù)據(jù)使用了定界符,可以使用fgetcsv將一行分解成多行,返回的結(jié)果存儲(chǔ)在數(shù)組中,函數(shù)原型如下
array fgetcsv(resource fp,int length, string[optional] delimiter,string[optional] enclosure)
delimiter是可選項(xiàng),由于在之前寫(xiě)入文件的數(shù)據(jù)中我是用了\t,所以在實(shí)例中文件讀取函數(shù)fgetcsv中的定界符我使用了\t,然后通過(guò)print_r打印出fgetcsv返回的數(shù)組結(jié)構(gòu)。
三個(gè)PHP文件讀取操作函數(shù)fgets、fgetss、fgetcsv共同之處在于事先都需要使用fopen函數(shù)打開(kāi)讀取的文件,同時(shí)通過(guò)feof函數(shù)判斷是否文件指針到達(dá)文件末尾,切記在讀取操作完成后使用fclose函數(shù)關(guān)閉文件。
fgetc:讀取單個(gè)字符
fgetc函數(shù)用來(lái)讀取一個(gè)字符,在代碼實(shí)例中我通過(guò)一個(gè)一個(gè)讀取字符,當(dāng)遇到\n字符時(shí)將其轉(zhuǎn)換成html文件中的br標(biāo)記,以便在游覽器中顯示具體的換行效果,當(dāng)然此函數(shù)的效率肯定是比較低的,不建議使用。
PHP文件讀取操作函數(shù)readfile、fpassthru、file之間的區(qū)別
三個(gè)函數(shù)共同之處是一次可以讀取整個(gè)文件,而不是一次讀一行或一個(gè)字符。區(qū)別在于:
readfile函數(shù)打開(kāi)文件,返回文件內(nèi)容直接輸出在游覽器上,與fopen函數(shù)一樣,函數(shù)返回值為文件的字符總數(shù),readfile函數(shù)的第二個(gè)參數(shù)是可選項(xiàng),指明PHP是否應(yīng)在include_path中查找文件。在代碼實(shí)例中,我使用echo語(yǔ)句不是用來(lái)輸出讀取的文件內(nèi)容,而是輸出讀取的文件字符總數(shù),讀取的文件內(nèi)容readfile函數(shù)已自動(dòng)輸出,這一點(diǎn)必須明確!readfile函數(shù)原型如下:
int readfile(string filename,int[optional] use_include_path)
file函數(shù)是另一種讀取文件的方法,它是把讀取的文件內(nèi)容送到一個(gè)數(shù)組中,每行一個(gè)數(shù)組單元。file函數(shù)原型如下:
fpassthru()函數(shù)用來(lái)輸出文件指針處的所有剩余數(shù)據(jù),即如果文件指針并不在開(kāi)頭,它只輸出文件指針后面的數(shù)據(jù)。該函數(shù)將給定的文件指針從當(dāng)前的位置讀取到EOF,并把結(jié)果寫(xiě)到輸出緩沖區(qū),返回值為輸出的字符數(shù)。發(fā)生錯(cuò)誤時(shí),返回FALSE。與readfile()函數(shù)相比,fpassthru()函數(shù)需要首先打開(kāi)文件,數(shù)據(jù)讀取完畢后要關(guān)閉文件。
fread與file_exists、filesize函數(shù)
fread函數(shù)也是讀取文件的一種方法,其可以從文件中讀取任意字節(jié),要么滿(mǎn)足length要么讀到文件末尾。read函數(shù)原型如下:
在用到fread函數(shù)時(shí),當(dāng)你想讀取文件全部數(shù)據(jù),又不知道文件數(shù)據(jù)長(zhǎng)度時(shí),filesize函數(shù)可以解決這個(gè)問(wèn)題,即
<?
@$fp = fopen("leapsoulcn.txt","r") or die("system error");
echo fread($fp,filesize("leapsoulcn.txt"));
fclose($fp);
?>
在PHP文件讀寫(xiě)操作教程中我們還沒(méi)有使用過(guò)file_exists函數(shù),通常在PHP網(wǎng)站開(kāi)發(fā)中,出于各種考慮,有時(shí)當(dāng)文件不存在時(shí),我們并不像創(chuàng)建新文件,這時(shí)我們就需要在使用fopen函數(shù)前使用file_exists函數(shù)判斷文件是否存在,即
<?
if(file_exists("leapsoulcn.txt"))
{
//進(jìn)行PHP文件讀寫(xiě)操作
}
?>
以上就是PHP文件讀寫(xiě)操作教程之文件讀取操作的各種方法介紹,通過(guò)合理應(yīng)用PHP文件讀寫(xiě)操作函數(shù),可以實(shí)現(xiàn)簡(jiǎn)單的留言本、網(wǎng)站log記錄等功能。
讀取文本文件中存儲(chǔ)數(shù)據(jù)的方式主要涉及的三個(gè)步驟及部分文件操作函數(shù)如下:
1、打開(kāi)文件(文件操作函數(shù):fopen)
2、文件數(shù)據(jù)讀取(文件操作函數(shù):fgets、file、readfile、feof等)
3、關(guān)閉文件(文件操作函數(shù):fclose)
下面仍然以PHP文件讀寫(xiě)操作代碼實(shí)例講解文件讀取方法的具體應(yīng)用,在實(shí)例中,通過(guò)調(diào)用不同的PHP文件讀取操作函數(shù)讀取文本文件中的數(shù)據(jù),你可以加深PHP文件讀取操作函數(shù)的理解,以便在PHP網(wǎng)站開(kāi)發(fā)中合理應(yīng)用。文本文件中寫(xiě)入的數(shù)據(jù)來(lái)自于PHP文件讀寫(xiě)操作之文件寫(xiě)入教程,fopen函數(shù)中關(guān)于文件讀寫(xiě)模式也可參考此文。
PHP文件讀取操作代碼實(shí)例
復(fù)制代碼 代碼如下:
<?
$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;
}
?>
注釋?zhuān)涸谏鲜鰧?shí)例中你可以通過(guò)對(duì)$readFun賦值來(lái)實(shí)現(xiàn)不同的PHP文件讀取方法的調(diào)用,涉及的PHP文件讀取操作函數(shù)有fgets、fgetss、fgetcsv、readfile、fpassthru、file、fgetc等函數(shù)。
PHP文件讀取操作函數(shù)fgets、fgetss、fgetcsv之間的區(qū)別
在代碼實(shí)例中,默認(rèn)PHP文件讀取操作函數(shù)為fgets,fgetss與fgetcsv函數(shù)的功能與fgets一樣,都是一次讀取文件中的一行,直到文件末尾。此處我設(shè)定讀取文本文件中的數(shù)據(jù)長(zhǎng)度為100,即最大讀取長(zhǎng)度為99(100-1),這樣,當(dāng)遇到換行符\n或文件結(jié)束符EOF或從文件中讀取完99個(gè)字節(jié)時(shí)就停止讀取數(shù)據(jù)。fgets函數(shù)返回文件讀取的數(shù)據(jù),字符串型。
fgetss函數(shù)是fgets函數(shù)的一個(gè)變體,它能夠剝離PHP和HTML標(biāo)記,通過(guò)傳遞第三參數(shù)來(lái)過(guò)濾不必要的數(shù)據(jù),可以提高網(wǎng)站安全性,比如留言本中可以過(guò)濾用戶(hù)的輸入數(shù)據(jù),fgetss函數(shù)原型如下:
復(fù)制代碼 代碼如下:
string fgetss(resource fp,int length, string[optional] allowable_tags)
allowable_tags參數(shù)是可選項(xiàng),實(shí)例中我事先在leapsoulcn.txt文件中寫(xiě)入了包含html、body、h1標(biāo)記的一行文字,然后在代碼中我設(shè)定只允許h1標(biāo)記可以出現(xiàn)。
fgetcsv函數(shù)是fgets的另一個(gè)變體,區(qū)別在與,當(dāng)你的文本文件中寫(xiě)入的數(shù)據(jù)使用了定界符,可以使用fgetcsv將一行分解成多行,返回的結(jié)果存儲(chǔ)在數(shù)組中,函數(shù)原型如下
復(fù)制代碼 代碼如下:
array fgetcsv(resource fp,int length, string[optional] delimiter,string[optional] enclosure)
delimiter是可選項(xiàng),由于在之前寫(xiě)入文件的數(shù)據(jù)中我是用了\t,所以在實(shí)例中文件讀取函數(shù)fgetcsv中的定界符我使用了\t,然后通過(guò)print_r打印出fgetcsv返回的數(shù)組結(jié)構(gòu)。
三個(gè)PHP文件讀取操作函數(shù)fgets、fgetss、fgetcsv共同之處在于事先都需要使用fopen函數(shù)打開(kāi)讀取的文件,同時(shí)通過(guò)feof函數(shù)判斷是否文件指針到達(dá)文件末尾,切記在讀取操作完成后使用fclose函數(shù)關(guān)閉文件。
fgetc:讀取單個(gè)字符
fgetc函數(shù)用來(lái)讀取一個(gè)字符,在代碼實(shí)例中我通過(guò)一個(gè)一個(gè)讀取字符,當(dāng)遇到\n字符時(shí)將其轉(zhuǎn)換成html文件中的br標(biāo)記,以便在游覽器中顯示具體的換行效果,當(dāng)然此函數(shù)的效率肯定是比較低的,不建議使用。
PHP文件讀取操作函數(shù)readfile、fpassthru、file之間的區(qū)別
三個(gè)函數(shù)共同之處是一次可以讀取整個(gè)文件,而不是一次讀一行或一個(gè)字符。區(qū)別在于:
readfile函數(shù)打開(kāi)文件,返回文件內(nèi)容直接輸出在游覽器上,與fopen函數(shù)一樣,函數(shù)返回值為文件的字符總數(shù),readfile函數(shù)的第二個(gè)參數(shù)是可選項(xiàng),指明PHP是否應(yīng)在include_path中查找文件。在代碼實(shí)例中,我使用echo語(yǔ)句不是用來(lái)輸出讀取的文件內(nèi)容,而是輸出讀取的文件字符總數(shù),讀取的文件內(nèi)容readfile函數(shù)已自動(dòng)輸出,這一點(diǎn)必須明確!readfile函數(shù)原型如下:
復(fù)制代碼 代碼如下:
int readfile(string filename,int[optional] use_include_path)
file函數(shù)是另一種讀取文件的方法,它是把讀取的文件內(nèi)容送到一個(gè)數(shù)組中,每行一個(gè)數(shù)組單元。file函數(shù)原型如下:
復(fù)制代碼 代碼如下:
array file(string filename,bool[optional] use_include_path)
fpassthru()函數(shù)用來(lái)輸出文件指針處的所有剩余數(shù)據(jù),即如果文件指針并不在開(kāi)頭,它只輸出文件指針后面的數(shù)據(jù)。該函數(shù)將給定的文件指針從當(dāng)前的位置讀取到EOF,并把結(jié)果寫(xiě)到輸出緩沖區(qū),返回值為輸出的字符數(shù)。發(fā)生錯(cuò)誤時(shí),返回FALSE。與readfile()函數(shù)相比,fpassthru()函數(shù)需要首先打開(kāi)文件,數(shù)據(jù)讀取完畢后要關(guān)閉文件。
fread與file_exists、filesize函數(shù)
fread函數(shù)也是讀取文件的一種方法,其可以從文件中讀取任意字節(jié),要么滿(mǎn)足length要么讀到文件末尾。read函數(shù)原型如下:
復(fù)制代碼 代碼如下:
string fread(resource fp,int length)
在用到fread函數(shù)時(shí),當(dāng)你想讀取文件全部數(shù)據(jù),又不知道文件數(shù)據(jù)長(zhǎng)度時(shí),filesize函數(shù)可以解決這個(gè)問(wèn)題,即
復(fù)制代碼 代碼如下:
<?
@$fp = fopen("leapsoulcn.txt","r") or die("system error");
echo fread($fp,filesize("leapsoulcn.txt"));
fclose($fp);
?>
在PHP文件讀寫(xiě)操作教程中我們還沒(méi)有使用過(guò)file_exists函數(shù),通常在PHP網(wǎng)站開(kāi)發(fā)中,出于各種考慮,有時(shí)當(dāng)文件不存在時(shí),我們并不像創(chuàng)建新文件,這時(shí)我們就需要在使用fopen函數(shù)前使用file_exists函數(shù)判斷文件是否存在,即
復(fù)制代碼 代碼如下:
<?
if(file_exists("leapsoulcn.txt"))
{
//進(jìn)行PHP文件讀寫(xiě)操作
}
?>
以上就是PHP文件讀寫(xiě)操作教程之文件讀取操作的各種方法介紹,通過(guò)合理應(yīng)用PHP文件讀寫(xiě)操作函數(shù),可以實(shí)現(xiàn)簡(jiǎn)單的留言本、網(wǎng)站log記錄等功能。
相關(guān)文章
『PHP』PHP截?cái)嗪瘮?shù)mb_substr()使用介紹
截?cái)辔恼聵?biāo)題,控制在15個(gè)文字,接下來(lái)為大家講解下如何實(shí)現(xiàn)這個(gè)需求,感興趣的朋友可以參考下哈2013-04-04
php基于Snoopy解析網(wǎng)頁(yè)html的方法
這篇文章主要介紹了php基于Snoopy解析網(wǎng)頁(yè)html的方法,實(shí)例分析了使用Snoopy類(lèi)解析html文件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
PHP應(yīng)用跨時(shí)區(qū)功能的實(shí)現(xiàn)方法
今天小編就為大家分享一篇關(guān)于PHP應(yīng)用跨時(shí)區(qū)功能的實(shí)現(xiàn)方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
編寫(xiě)PHP腳本過(guò)濾用戶(hù)上傳的圖片
這篇文章主要介紹了編寫(xiě)PHP腳本過(guò)濾用戶(hù)上傳的圖片,至于是不是能達(dá)到設(shè)想的準(zhǔn)確過(guò)濾那種圖片的效果,這個(gè)就...需要的朋友可以參考下2015-07-07
require(),include(),require_once()和include_once()區(qū)別
面試中最容易提到的一個(gè)PHP的問(wèn)題,我想和大家共勉一下: require()和include()有許多相似之處,也有些不同。理解它們的不同點(diǎn)非常重要,否則很容易犯錯(cuò)誤。2008-03-03
PHP數(shù)組實(shí)例總結(jié)與說(shuō)明
PHP中共有超過(guò)30個(gè)新的數(shù)組相關(guān)函數(shù),其中很多通用函數(shù)允許您檢查給定數(shù)組中是否存在特定對(duì)象、對(duì)數(shù)組元素計(jì)數(shù)、增加或刪除元素,或?qū)υ嘏判颉?2011-08-08
基于php雙引號(hào)中訪問(wèn)數(shù)組元素報(bào)錯(cuò)的解決方法
下面小編就為大家分享一篇基于php雙引號(hào)中訪問(wèn)數(shù)組元素報(bào)錯(cuò)的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
PHP5.6.8連接SQL Server 2008 R2數(shù)據(jù)庫(kù)常用技巧分析總結(jié)
這篇文章主要介紹了PHP5.6.8連接SQL Server 2008 R2數(shù)據(jù)庫(kù)常用技巧,結(jié)合實(shí)例形式分析總結(jié)了PHP5.6.8連接SQL Server 2008 R2數(shù)據(jù)庫(kù)操作步驟、遇到的問(wèn)題及相應(yīng)的解決方法,需要的朋友可以參考下2019-05-05

