PHP 檔案處理
fopen() 函數用於在 PHP 中開啟檔案。
開啟檔案
PHP 中沒有單獨的檔案建立函數,建立和開啟檔案都是用 fopen() 函數。 當使用 fopen() 函數開啟一個文件時,如果文件不存在,則會嘗試建立該文件,並傳回一個資源。 如果開啟失敗,函數傳回 FALSE 。
語法
resource fopen ( string $檔名, string 模式)
此函數的第一個參數含有要開啟的檔案的名稱,第二個參數規定了使用哪一種模式來開啟檔案:
<html> <body> <?php $file=fopen("welcome.txt","r"); ?> </body> </html>
檔案可能透過下列模式來開啟:
模式 說明
r 唯讀。在文件的開頭開始。
r+ 讀取/寫入。在文件的開頭開始。
w 只寫。開啟並清空文件的內容;如果文件不存在,則建立新文件。
w+ 讀取/寫入。開啟並清空文件的內容;如果文件不存在,則建立新文件。
a 追加。開啟並向文件末尾進行寫入操作,如果文件不存在,則建立新文件。
a+ 閱讀/追加。透過向文件末尾寫內容,來保持文件內容。
x 只寫。建立新文件。如果檔案已存在,則傳回 FALSE 和一個錯誤。
x+ 讀/寫。建立新文件。如果檔案已存在,則傳回 FALSE 和一個錯誤。
註解:如果 fopen() 函數無法開啟指定文件,則傳回 0 (false)。
實例
如果fopen() 函數不能開啟指定的文件,下面的實例會產生一段訊息:
<html> <body> <?php $file=fopen("welcome.txt","r") or exit("Unable to open file!"); // 不能打开指定文件的错误信息: Unable to open file ?> </body> </html>
關閉文件
fclose()函數用於關閉開啟的檔案:
<?php $file = fopen("test.txt","r"); //执行一些代码 fclose($file); ?>
偵測檔案結尾(EOF)
feof() 函數偵測是否已到達檔案末端(EOF)。
在迴圈遍歷未知長度的資料時,feof() 函數很有用。
註解:在 w 、a 和 x 模式下,您無法讀取開啟的檔案!
if (feof($file)) echo "檔案結尾";
#逐行讀取檔案
fgets() 函數用於從檔案中逐行讀取檔案。
註解:在呼叫函數之後,檔案指標會移到下一行。
語法
string fgets( int handle [, int length] )
fgets() 從 handle 指向的檔案中讀取一行並傳回長度最多為 length-1 位元組的字串。 碰到換行符號(包括在返回值中)、EOF 或已經讀取了 length-1 位元組後停止。 如果沒有指定 length ,則預設為 1K ,或說 1024 位元組。
實例
下面的實例逐行讀取文件,直到文件末尾為止:
<?php $file = fopen("welcome.txt", "r") or exit("无法打开文件!"); // 读取文件每一行,直到文件结尾 while(!feof($file)) { echo fgets($file). "<br>"; } fclose($file); ?>
逐字符讀取文件
#fgetc() 函數用於從檔案中逐字元讀取檔案。
註解:在呼叫函數之後,檔案指標會移到下一個字元。
實例
下面的實例逐字符地讀取文件,直到文件末尾為止:
<?php $file=fopen("welcome.txt","r") or exit("无法打开文件!"); while (!feof($file)) { echo fgetc($file); } fclose($file); ?>
讀取整個文件
fread() 函數用於讀取檔案(可安全用於二進位檔案)。
語法:
string fread( int handle, int length )
fread() 從檔案指標 handle 讀取最多 length 個位元組。當遇到下列任何一種情況時,會停止讀取檔案:
在讀取完最多length 個位元組數時
達到檔案結尾的時候(EOF)
(對於網路流)當一個套件可用時
或(在開啟用戶空間流之後)已讀取了8192 個位元組時
從檔案讀取10 個位元組(包括空格):
<?php $filename = "test.txt"; $fh = fopen($filename, "r"); echo fread($fh, "10"); fclose($fh); ?>
file_get_contents()
file_get_contents() 函數用來把 整個檔案 讀入一個字串,成功回傳一個字串,失敗則回傳FALSE。
語法:
string file_get_contents( string filename [, int offset [, int maxlen]] )
#參數說明:
參數 #說明
filename 要讀取的檔案名稱
offset 選取指定讀取開始的位置,預設為檔案開始位置
maxlen 可選,指定讀取檔案的長度,單位位元組
範例:
<?php $filename = 'NoAlike.txt'; $filestring = file_get_contents($filename); echo $filestring; ?>
#fwrite()
fwrite() 函數用於向檔案寫入字串,成功傳回寫入的字元數,否則傳回FALSE 。
語法:
int fwrite( resource handle, string string [, int length] )
fwrite() 把string 的內容寫入文件指針handle 處。
參數說明:
參數 說明
handle 要寫入字串的檔案指針,一般由fopen() 函數建立
data 要寫入的字串
##length 可選,規定要寫入的最大位元組數
如果指定了可選參數 length,當寫入了 length 個位元組或寫入了 string 以後,寫入就會停止。
範例:
<?php // 要写入的文件名字 $filename = 'file.txt'; // 写入的字符 $word = "你好!"; $fh = fopen($filename, "w"); echo fwrite($fh, $word); // 输出:6 fclose($fh); ?>
執行該範例程序,在程序同目錄下,file.txt 檔案內容為:你好!
上面的範例中,如果使用了length 參數,則至多寫入length 個字串:
echo fwrite($fh, $word, 4); // 輸出:4
file_put_contents()
file_put_contents() 函式用來把字串寫入文件,成功傳回寫入文件內資料的位元組數,失敗則傳回FALSE。
語法:
int file_put_contents ( string filename, string data [, int flags [, resource context]] )
參數說明:
參數
#filename 要寫入資料的檔案名稱
<?php echo file_put_contents("test.txt", "This is something."); ?>###執行此範例,瀏覽器輸出:# ########18################