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