PHP文件讀寫(xiě)操作相關(guān)函數(shù)總結(jié)
一、fwrite()寫(xiě)入文件
將程序中的數(shù)據(jù)保存到文件中比較容易,使用fwrite()函數(shù)就可以將字符串內(nèi)容寫(xiě)入文件中。在文件中中通過(guò)字符序列\(zhòng)n表示換行符,表示文件中一行的末尾。當(dāng)需要一次輸入或輸出一行信息時(shí),請(qǐng)記住這一點(diǎn)。不同的操作系統(tǒng)具有不同的結(jié)束符號(hào),基于UNIX的系統(tǒng)使用“\n”作為行結(jié)束字符,基于Windows系統(tǒng)使用“\r\n”作為行結(jié)束字符,基于Macintosh的系統(tǒng)使用“\r”作為行結(jié)束字符。當(dāng)要寫(xiě)入一個(gè)文本文件并想插入一個(gè)新行時(shí),需要使用相應(yīng)操作系統(tǒng)的行結(jié)束符號(hào)。函數(shù)fwrite()的原型如下所示:
int fwrite(resource handle,string string[,int length]) //寫(xiě)入文件
第一個(gè)參數(shù)需要提供fopen()函數(shù)打開(kāi)的文件資源,該函數(shù)將第二個(gè)參數(shù)提供的字符串內(nèi)容輸出到由第一個(gè)參數(shù)指定的資源中。如果給出了第三個(gè)可選參數(shù)lenth,fwrite()將在寫(xiě)入了length個(gè)字符時(shí)會(huì)停止。否則將一直寫(xiě)入,直到到達(dá)內(nèi)容結(jié)尾時(shí)才停止。如果寫(xiě)入的內(nèi)容少于length個(gè)字節(jié),該函數(shù)也會(huì)在寫(xiě)完全部?jī)?nèi)容后停止。函數(shù)fwrite()執(zhí)行完成以后會(huì)返回寫(xiě)入的字符數(shù),出現(xiàn)錯(cuò)誤時(shí)則返回FALSE。下面的代碼是寫(xiě)入文件的一個(gè)示例。
<?php
//聲明一個(gè)變量用來(lái)保存文件名
$fileName = "data.txt";
//使用fopen()函數(shù)以只寫(xiě)的模式打開(kāi)文件,如果不存在則創(chuàng)建它,打開(kāi)失敗則通過(guò)程序
$handle = fopen($fileName,'w') or die('打開(kāi)<b>'.$fileName.'</br>文件失?。?!');
//循環(huán)10次寫(xiě)入10行數(shù)據(jù)到文件中
for($row=0;$row<10;$row++){
fwrite($handle, $row.":www.lampbrother.net\n");
}
fclose($handle);
?>
該程序執(zhí)行后,如果當(dāng)前目錄下存在data.txt文件,則清空該文件并寫(xiě)入10行數(shù)據(jù)。如果不存在data.txt文件,則會(huì)創(chuàng)建該文件并將10行數(shù)據(jù)寫(xiě)入。另外寫(xiě)入文件還可以使用fputs()函數(shù),該函數(shù)是fwrite()函數(shù)的別名函數(shù)如果需要快速寫(xiě)入文件,可以使用file_put_contents()函數(shù),和依次調(diào)用fopen(),fwrite()以及fclose()函數(shù)的功能一樣。該函數(shù)的使用代碼如下所示:
<?php
//聲明一個(gè)變量用來(lái)保存文件名
$fileName = "data.txt";
//聲明一個(gè)變量用來(lái)保存被寫(xiě)入文件中的數(shù)據(jù)
$data = "共10行數(shù)據(jù)\n";
for($row=0;$row<10;$row++){
//將10數(shù)據(jù)都存放到一個(gè)字符串變量中
$data .= $row.":www.lampbrother.net\n";
}
//一次將所有數(shù)據(jù)寫(xiě)入到指定的文件中
file_put_contents($fileName, $data);
?>
該函數(shù)可以將數(shù)據(jù)直接寫(xiě)入到指定的文件中。如果同時(shí)調(diào)用多次時(shí),并向同一個(gè)文件中寫(xiě)入數(shù)據(jù),則文件中只保存了最后一次調(diào)用該函數(shù)寫(xiě)入的數(shù)據(jù)。因?yàn)樵诿看蔚魡雅赌莻€(gè)時(shí)都會(huì)重新打開(kāi)文件并將文件中原有的數(shù)據(jù)清空,所以不能像第一個(gè)程序那樣連續(xù)寫(xiě)入多行數(shù)據(jù)。
二、讀取文件內(nèi)容
在PHP中提供了多個(gè)從文件中讀取內(nèi)容的標(biāo)準(zhǔn)函數(shù),可以根據(jù)它們的功能特性在程序中選擇哪個(gè)函數(shù)使用。這些函數(shù)功能及其描述如下表所示。
在讀取文件時(shí),不僅要注意行結(jié)束符號(hào)“\n”,程序也需要一種標(biāo)準(zhǔn)的方式來(lái)識(shí)別何時(shí)到達(dá)文件的末尾,這個(gè)標(biāo)準(zhǔn)通常成為EOF(End Of File)字符。EOF是非常重要的概念,幾乎每種主流的編程語(yǔ)言中都提供了相應(yīng)的內(nèi)置函數(shù),來(lái)分析是否到達(dá)了文件EOF。在PHP中,使用feof()函數(shù)。該函數(shù)接受一個(gè)打開(kāi)的文件資源,判斷一個(gè)文件指針是否位于文件的結(jié)束處,如果在文件末尾處,則返回TRUE。
①函數(shù)fread()
該函數(shù)用來(lái)在打開(kāi)的文件中讀取指定長(zhǎng)度的字符串。也可以安全用于二進(jìn)制文件,在區(qū)分二進(jìn)制文件和文本文件的系統(tǒng)上(如Windows)打開(kāi)文件時(shí),fopen()函數(shù)的mode參數(shù)要加上'b'。函數(shù)fread()的原型如下所示:
string fread(int handle,int length) //讀取打開(kāi)的文件
該函數(shù)從文件指針資源handle中讀取最多l(xiāng)ength個(gè)字節(jié)。在讀取完length個(gè)字節(jié)數(shù),或到達(dá)EOF時(shí),或(對(duì)于網(wǎng)絡(luò)流)當(dāng)一個(gè)包可用時(shí)都會(huì)停止讀取文件,就看先碰到哪種情況了。該函數(shù)返回讀取的內(nèi)容字符串,如果失敗則返回FALSE。函數(shù)的使用代碼如下所示:
<?php
//從文件中讀取指定字節(jié)數(shù)的內(nèi)容存入到一個(gè)變量中
$filename = "data.txt";
$handle = fopen($filename, 'r') or die("文件打開(kāi)失敗 ");
$contents = fread($handle, 100); //從文件中讀取100個(gè)字節(jié)
fclose($handle); //關(guān)閉文件資源
echo $contents; //將從文件中讀取的內(nèi)容輸出
//從文件中讀取全部?jī)?nèi)容到一個(gè)變量中,每次讀取一部分,循環(huán)讀取
$filename = "c:\\files\\somepic.gif";
$handle = fopen($filename, 'rb') or die("文件打開(kāi)失敗"); //以只讀的方式,模式加了‘b'
$contents = "";
while(!feof($handle)){ //使用feof()判斷文件結(jié)尾
$contents .=fread($handle, 1024); //每次讀取1024個(gè)字節(jié)
}
fclose($handle); //關(guān)閉文件資源
echo $contents; //將從文件中讀取的全部?jī)?nèi)容輸出
//另一種從文件中讀取全部?jī)?nèi)容的方法
$filename = "data.txt";
$handle = fopen($filename, "r")or die("文件打開(kāi)失敗");
$contents = fread($handle, filesize($filename)); //使用fielsize()函數(shù)一起讀出
fclose($handle);
echo $contents;
?>
如果你只是想將一個(gè)文件的內(nèi)容讀入到一個(gè)字符串中,可以用file_get_contents()函數(shù),它的性能比上面的代碼好得多。file_get_contents()函數(shù)是用來(lái)將文件的內(nèi)容讀入到一個(gè)字符串中的首選方法,如果操作系統(tǒng)支持,還會(huì)使用內(nèi)存映射技術(shù)來(lái)增強(qiáng)性能。該函數(shù)的使用代碼如下所示:
<?php
echo file_get_contents("data.txt"); //讀取文本文件中的內(nèi)容并輸出
echo file_get_contents("c:\\files\\somepic.gif"); //讀取二進(jìn)制文件中的內(nèi)容并輸出
?>
②函數(shù)fgets()、fgetc()
fgets()該函數(shù)一次至多從打開(kāi)的文件資源中讀取一行內(nèi)容。函數(shù)fgets()的原型如下所示:
string fgets(int handle[,int length]) //從打開(kāi)的文件中返回一行
第一個(gè)參數(shù)提供使用fopen()函數(shù)打開(kāi)的資源。如果提供了第二個(gè)可選參數(shù)length,該函數(shù)返回length-1個(gè)字節(jié)?;蛘叻祷赜龅綋Q行或EOF之前讀取的所有內(nèi)容。如果忽略可選的length參數(shù),默認(rèn)為1024個(gè)字符。在大多數(shù)情況下,這意味著fgets()函數(shù)將讀取到1024個(gè)字符前遇到換行符號(hào),因此每次成功調(diào)用都會(huì)返回下一行。如果讀取失敗則返回FALSE。該函數(shù)的使用代碼如下所示:
<?php
$handle = fopen("data.txt", "r") or die("文件打開(kāi)失敗 "); //以只讀模式打開(kāi)文件
while(!feof($handle)){
$buffer = fgets($handle,4096); //一次讀取一行內(nèi)容
echo $buffer."<br>"; //輸出每一個(gè)航
}
fclose($handle);
?>
函數(shù)fgetc()在打開(kāi)的文件資源中只讀取當(dāng)前指針位置處的一個(gè)字符。如果遇到文件結(jié)束標(biāo)志EOF,則返回FALSE值。該函數(shù)的使用代碼如下所示:
<?php
$fp = fopen('data.txt','r') or die("文件打開(kāi)失敗");
while(false !==($char = fgetc($fp))){
echo $char."<br>";
}
?>
③函數(shù)file()
該函數(shù)非常有用,與file_get_contents()類(lèi)似,不需要使用fopen()函數(shù)打開(kāi)文件,不同的是file()函數(shù)可以把整個(gè)文件讀入到一個(gè)數(shù)組中。數(shù)組中的每個(gè)元素對(duì)應(yīng)文件中相應(yīng)的行,各元素由換行符分割,同時(shí)換行符仍附加在每個(gè)元素的末尾。這樣,就可以使用數(shù)組的相關(guān)函數(shù)對(duì)文件內(nèi)容進(jìn)行處理。該函數(shù)的使用代碼如下所示:
<?php
//將文件test.txt中的內(nèi)容讀入到一個(gè)數(shù)組中,并輸出
print_r(file(test.txt));
?>
④函數(shù)readfile()
該函數(shù)可以讀取指定的整個(gè)文件,立即輸出到輸出緩沖區(qū),并返回讀取的字節(jié)數(shù)。該函數(shù)也不需要使用fopen()函數(shù)打開(kāi)文件。在下面的示例中,輕松地將文件內(nèi)容輸出到瀏覽器。代碼如下所示:
<?php
//直接將文件data.txt中的數(shù)據(jù)讀出并輸出到瀏覽器
readfile("data.txt");
?>
- PHP文件打開(kāi)關(guān)閉及讀寫(xiě)操作示例解析
- PHP5.6讀寫(xiě)excel表格文件操作示例
- php 讀寫(xiě)json文件及修改json的方法
- PHP基于文件鎖解決多進(jìn)程同時(shí)讀寫(xiě)一個(gè)文件問(wèn)題示例
- PHP程序中的文件鎖、互斥鎖、讀寫(xiě)鎖使用技巧解析
- php使用fputcsv()函數(shù)csv文件讀寫(xiě)數(shù)據(jù)的方法
- php中使用PHPExcel讀寫(xiě)excel(xls)文件的方法
- php的SimpleXML方法讀寫(xiě)XML接口文件實(shí)例解析
- php中讀寫(xiě)文件與讀寫(xiě)數(shù)據(jù)庫(kù)的效率比較分享
- 如何在PHP中讀寫(xiě)文件
相關(guān)文章
PHP設(shè)計(jì)模式之注冊(cè)樹(shù)模式分析
這篇文章主要介紹了PHP設(shè)計(jì)模式之注冊(cè)樹(shù)模式,結(jié)合實(shí)例形式詳細(xì)分析了注冊(cè)樹(shù)模式的概念、原理、實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2018-01-01PHP實(shí)現(xiàn)讀取一個(gè)1G的文件大小
以下是對(duì)使用PHP實(shí)現(xiàn)讀取一個(gè)1G文件大小的方法進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下2013-08-08php更新mysql后獲取影響的行數(shù)發(fā)生異常解決方法
mysql_affected_rows函數(shù)當(dāng)UPDATE前后的數(shù)據(jù)一樣時(shí)會(huì)返回異常值,接下來(lái)為大家介紹個(gè)簡(jiǎn)單的解決方法感興趣的朋友可以參考下哈2013-03-03PHP轉(zhuǎn)Go之基礎(chǔ)數(shù)據(jù)類(lèi)型對(duì)比詳解
這篇文章主要為大家詳細(xì)介紹了PHP與Go語(yǔ)言中基礎(chǔ)數(shù)據(jù)類(lèi)型的對(duì)比,以及使用時(shí)常見(jiàn)的坑,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2023-09-09php+mysql實(shí)現(xiàn)無(wú)限級(jí)分類(lèi)
這篇文章主要介紹了php+mysql實(shí)現(xiàn)無(wú)限級(jí)分類(lèi),一個(gè)php項(xiàng)目需要用到分類(lèi),動(dòng)手制作了一個(gè)php無(wú)限極分類(lèi),感興趣的小伙伴們可以參考一下2015-11-11php下實(shí)現(xiàn)一個(gè)阿拉伯?dāng)?shù)字轉(zhuǎn)中文數(shù)字的函數(shù)
最近因需要,寫(xiě)了個(gè)“阿拉伯?dāng)?shù)字轉(zhuǎn)中文數(shù)字的函數(shù)”。搜索了精華區(qū)只見(jiàn)到一個(gè)類(lèi)似的。 感覺(jué)到我的算法不錯(cuò),所以貼出來(lái)共享一下2008-07-07