PHP文件處理
PHP 文件處理
數(shù)據(jù)的存取
數(shù)據(jù)在服務(wù)器上的存取主要有兩種方式:文件或者數(shù)據(jù)庫(kù)
目前絕大多數(shù)應(yīng)用都是使用數(shù)據(jù)庫(kù)來(lái)讀寫(xiě)數(shù)據(jù),但是文件存取在某些場(chǎng)合仍然會(huì)使用,譬如:
? 記錄錯(cuò)誤日志
? 導(dǎo)出數(shù)據(jù)到文件
從文件導(dǎo)入數(shù)據(jù)
寫(xiě)文件
寫(xiě)文件主要有三步操作,就如同我們手動(dòng)操作一樣,程序也要遵守下面的步驟:
? 打開(kāi)文件,使用fopen函數(shù)
? 寫(xiě)入文件,使用fwrite函數(shù)
? 關(guān)閉文件,使用fclose函數(shù)
打開(kāi)文件
fopen() 函數(shù)用于在 PHP 中打開(kāi)文件。
此函數(shù)的第一個(gè)參數(shù)含有要打開(kāi)的文件的名稱(chēng),第二個(gè)參數(shù)規(guī)定了使用哪種模式來(lái)打開(kāi)文件:
<html> <body> <?php $file=fopen("welcome.txt","r"); ?> </body> </html>
文件可能通過(guò)下列模式來(lái)打開(kāi):
注釋?zhuān)喝绻?fopen() 函數(shù)無(wú)法打開(kāi)指定文件,則返回 0 (false)。
實(shí)例
如果 fopen() 函數(shù)不能打開(kāi)指定的文件,下面的實(shí)例會(huì)生成一段消息:
<html> <body> <?php $file=fopen("welcome.txt","r") or exit("Unable to open file!"); ?> </body> </html>
寫(xiě)入文件
fwrite () 函數(shù)用于寫(xiě)入文件
fwrite主要也是兩個(gè)參數(shù),handle是fopen打開(kāi)成功后返回的Resource變量,string是要寫(xiě)入的數(shù)據(jù)
int fwrite ( resource $handle , string $string [, int $length ] )
當(dāng)寫(xiě)入成功后,fwrite會(huì)返回寫(xiě)入的字符數(shù),如果寫(xiě)入失敗則返回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" 寫(xiě)了兩次。在每次我們向文件寫(xiě)入時(shí),在我們發(fā)送的字符串 $txt 中,第一次包含 "Bill Gates",第二次包含 "Steve Jobs"。在寫(xiě)入完成后,我們使用 fclose() 函數(shù)來(lái)關(guān)閉文件。
如果我們打開(kāi) "newfile.txt" 文件,它應(yīng)該是這樣的:
Bill Gates
Steve Jobs
讀取文件
fread用來(lái)讀取整個(gè)文件,而不用使用while語(yǔ)句進(jìn)行循環(huán),需要注意,第二個(gè)參數(shù)是用來(lái)控制讀取的最大字節(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)閉打開(kāi)的文件:
<?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ù)很有用。
注釋?zhuān)涸?w 、a 和 x 模式下,您無(wú)法讀取打開(kāi)的文件!
if (feof($file)) echo "文件結(jié)尾";
逐行讀取文件
fgets() 函數(shù)用于從文件中逐行讀取文件。
注釋?zhuān)涸谡{(diào)用該函數(shù)之后,文件指針會(huì)移動(dòng)到下一行。
實(shí)例
下面的實(shí)例逐行讀取文件,直到文件末尾為止:
<?php $file = fopen("welcome.txt", "r") or exit("無(wú)法打開(kāi)文件!"); // 讀取文件每一行,直到文件結(jié)尾 while(!feof($file)) { echo fgets($file). "<br>"; } fclose($file); ?>
逐字符讀取文件
fgetc() 函數(shù)用于從文件中逐字符地讀取文件。
注釋?zhuān)涸谡{(diào)用該函數(shù)之后,文件指針會(huì)移動(dòng)到下一個(gè)字符。
實(shí)例
下面的實(shí)例逐字符地讀取文件,直到文件末尾為止:
<?php $file=fopen("welcome.txt","r") or exit("無(wú)法打開(kāi)文件!"); while (!feof($file)) { echo fgetc($file); } fclose($file); ?>
file_put_contents
無(wú)論是讀還是寫(xiě),fopen和fclose都是很繁瑣的調(diào)用,從PHP5開(kāi)始,引入了新的函數(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 world\n");
file_put_contents('file', "hello world\n", 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問(wèn)我們的PHP Filesystem 參考手冊(cè)。