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