PHP文件處理
PHP?文件處理
數(shù)據(jù)的存取
數(shù)據(jù)在服務(wù)器上的存取主要有兩種方式:文件或者數(shù)據(jù)庫
目前絕大多數(shù)應(yīng)用都是使用數(shù)據(jù)庫來讀寫數(shù)據(jù),但是文件存取在某些場(chǎng)合仍然會(huì)使用,譬如:
?????? 記錄錯(cuò)誤日志
?????? 導(dǎo)出數(shù)據(jù)到文件
從文件導(dǎo)入數(shù)據(jù)
寫文件
寫文件主要有三步操作,就如同我們手動(dòng)操作一樣,程序也要遵守下面的步驟:
??????? 打開文件,使用fopen函數(shù)
??????? 寫入文件,使用fwrite函數(shù)
??????? 關(guān)閉文件,使用fclose函數(shù)
打開文件
fopen() 函數(shù)用于在 PHP 中打開文件。
此函數(shù)的第一個(gè)參數(shù)含有要打開的文件的名稱,第二個(gè)參數(shù)規(guī)定了使用哪種模式來打開文件:
<html> <body> <?php $file=fopen("welcome.txt","r"); ?> </body> </html>
文件可能通過下列模式來打開:
注釋:如果 fopen() 函數(shù)無法打開指定文件,則返回 0 (false)。
實(shí)例
如果 fopen() 函數(shù)不能打開指定的文件,下面的實(shí)例會(huì)生成一段消息:
<html> <body> <?php $file=fopen("welcome.txt","r") or exit("Unable to open file!"); ?> </body> </html>
?寫入文件
fwrite () 函數(shù)用于寫入文件
fwrite主要也是兩個(gè)參數(shù),handle是fopen打開成功后返回的Resource變量,string是要寫入的數(shù)據(jù)
int?fwrite?(?resource?$handle?,?string?$string?[,?int?$length?] )
當(dāng)寫入成功后,fwrite會(huì)返回寫入的字符數(shù),如果寫入失敗則返回false
實(shí)例
<?php $myfile = fopen("newfile.txt", "w") or die("Unable to open file!"); $txt = "Bill Gates\n"; fwrite($myfile, $txt); $txt = "Steve Jobs\n"; fwrite($myfile, $txt); fclose($myfile); ?>
請(qǐng)注意,我們向文件 "newfile.txt" 寫了兩次。在每次我們向文件寫入時(shí),在我們發(fā)送的字符串 $txt 中,第一次包含 "Bill Gates",第二次包含 "Steve Jobs"。在寫入完成后,我們使用 fclose() 函數(shù)來關(guān)閉文件。
如果我們打開 "newfile.txt" 文件,它應(yīng)該是這樣的:
Bill Gates
Steve Jobs
讀取文件
fread用來讀取整個(gè)文件,而不用使用while語句進(jìn)行循環(huán),需要注意,第二個(gè)參數(shù)是用來控制讀取的最大字節(jié)數(shù),這個(gè)參數(shù)是必填的
string?fread?(?resource?$handle?,?int?$length?)
執(zhí)行
echo?fread($resource,?1024);
可以讀取最大1024個(gè)字節(jié)的文件內(nèi)容
關(guān)閉文件
fclose() 函數(shù)用于關(guān)閉打開的文件:
<?php $file = fopen("test.txt","r"); //執(zhí)行一些代碼 fclose($file); ?>
檢測(cè)文件末尾(EOF)
feof() 函數(shù)檢測(cè)是否已到達(dá)文件末尾(EOF)。
在循環(huán)遍歷未知長(zhǎng)度的數(shù)據(jù)時(shí),feof() 函數(shù)很有用。
注釋:在 w 、a 和 x 模式下,您無法讀取打開的文件!
if (feof($file)) echo "文件結(jié)尾";
逐行讀取文件
fgets() 函數(shù)用于從文件中逐行讀取文件。
注釋:在調(diào)用該函數(shù)之后,文件指針會(huì)移動(dòng)到下一行。
實(shí)例
下面的實(shí)例逐行讀取文件,直到文件末尾為止:
<?php $file = fopen("welcome.txt", "r") or exit("無法打開文件!"); // 讀取文件每一行,直到文件結(jié)尾 while(!feof($file)) { echo fgets($file). "<br>"; } fclose($file); ?>
逐字符讀取文件
fgetc() 函數(shù)用于從文件中逐字符地讀取文件。
注釋:在調(diào)用該函數(shù)之后,文件指針會(huì)移動(dòng)到下一個(gè)字符。
實(shí)例
下面的實(shí)例逐字符地讀取文件,直到文件末尾為止:
<?php $file=fopen("welcome.txt","r") or exit("無法打開文件!"); while (!feof($file)) { echo fgetc($file); } fclose($file); ?>
file_put_contents
無論是讀還是寫,fopen和fclose都是很繁瑣的調(diào)用,從PHP5開始,引入了新的函數(shù)
int?file_put_contents?(?string?$filename?,?mixed?$data?[,?int?$flags?= 0?[,?resource?$context?]] )
file_put_contents 相當(dāng)于執(zhí)行了 fopen + fwrite + fclose
file_put_contents('file',?"hello?worldn");
file_put_contents('file',?"hello?worldn",?FILE_APPEND);
file_get_contents
string?file_get_contents?(?string?$filename?[,?bool?$use_include_path?= false?[,?resource$context?[,?int?$offset?= -1?[,?int?$maxlen?]]]] )
?file_get_contents 相當(dāng)于執(zhí)行了 fopen + fread + fclose
echo?file_get_contents('file');
其他文件操作函數(shù)
S? file_exists 將文件地址作為參數(shù)傳入,可以判斷文件是否存在,然后true或者false
S? filesize 可以返回參數(shù)中文件的大小,以字節(jié)為單位
S? unlink 可以刪除傳遞給它的文件地址所代表的文件
PHP Filesystem 參考手冊(cè)
如需查看 PHP 文件系統(tǒng)函數(shù)的完整參考手冊(cè),請(qǐng)?jiān)L問我們的PHP Filesystem 參考手冊(cè)。