PHP5與MySQL4 入門學習指南 凱文瑞克 著 第 16 章 檔案處理
本章大綱 16-1 基本檔案處理 16-2 寫入檔案 16-3 讀取檔案 16-4 網頁計數器-文字版 問題與討論
16-1 基本檔案處理 將資料儲存起來, 方便日後使用。 檔案的處理大致上可以分成四個基本動作 開啟檔案 讀取資料 儲存資料 關閉檔案
16-2 寫入檔案 將資料寫入檔案中可以分成三個步驟 開啟檔案 寫入檔案 關閉檔案
開啟檔案 開啟檔案並且告訴系統所開啟的檔案用途及形式為何。fopen 可以開啟檔案 fopen其格式如下: int fopen (檔案名稱, 開啟形式, [是否使用include_path]) 當檔案開檔成功後會傳回一個檔案指標 (file pointer) 來指向開啟的檔案。若是開檔失敗則會傳回 false。 [檔案名稱] 就是欲開啟檔案的名稱。 [開啟形式] 指定開啟檔案的用途是讀取或是寫入等 第三個參數是一個選用參數, 當設定為 1 時會搜尋include_path。
檔案開啟形式 參 數 說 明 r 開啟唯讀檔。 r+ 開啟可讀可寫檔, 將檔案指標放在起始位置。 w 開啟寫入檔, 並清除檔案內容。 w+ 說 明 r 開啟唯讀檔。 r+ 開啟可讀可寫檔, 將檔案指標放在起始位置。 w 開啟寫入檔, 並清除檔案內容。 w+ 開啟可讀可寫檔, 將檔案清除, 並將檔案指標放在起始位置。 a 開啟寫入檔, 並將指標指向檔尾 a+ 開啟可讀可寫檔, 並將指標指向檔尾.
寫入檔案 寫入檔案可以使用 fputs() 函數 其格式如下: int fputs (檔案指標, 寫入資料, [寫入長度]) 此函數會將欲 [寫入資料] 存入 [檔案指標] 所指向的檔案中。 如果有指定 [寫入長度] 僅寫入所指定的寫入長度 當寫入完成 fputs()會傳回寫入長度, 若失敗則會傳回 false.
關閉檔案 關閉檔案, 使用的函數是fclose() 其格式如下: int fclose(檔案指標) 關閉[檔案指標]所指向的檔案。
1: <html> 2: <title>寫入檔案</title> 3: <body> 4: 寫入1..9 。<p> 5: <?php 6: if (!$fp=fopen("number.txt","w")){ 7: echo "檔案無法開啟"; 8: exit; 9: } 10: for ($i=1; $i<=9; $i++){ 11: $len=fputs($fp,$i) ; 12: echo "寫入$i ==> 寫入長度 : $len<br>" ; 13: } 14: fclose($fp) ; 15: ?> 16: 寫入成功。 17: </body> 18: </html> 第 6-9 行開啟一個可寫入檔 ("w") 的檔案為 "number.txt", 並且將檔案指標給$fp, 意即 $fp 指向名為 number.txt 的寫入檔。第10行 for 迴圈, $I 由 1 累增至 9。第 11 行 fputs 將 $i 的內容存到檔案中, 並且將成功寫入的長度傳回給 $len。第 12 行將 $i 及每次寫入長度顯示於瀏覽器。第 14 行關閉檔案。
16-3 讀取檔案 讀取檔案的動作分成三個步驟 開啟檔案 讀取檔案 關閉檔案
讀取檔案 讀取檔案可使用 fgets() 函數 其格式如下: string fgets (檔案指標 [,讀取長度]) 檔案指標是指已開啟的檔案指標 設定讀取長度 len, 則讀取 len-1 個字元, 沒有設定讀取長度則預設值為 1024 bytes 讀取成功傳回讀取字串, 若失敗則傳回 false.
2: <title>讀取檔案</title> 3: <body> 4: 讀取檔案 <p> 1: <html> 2: <title>讀取檔案</title> 3: <body> 4: 讀取檔案 <p> 5: <?php 6: $f=fopen("number.txt","r") ; 7: $s=fgets($f) ; 8: echo "讀取內容 : $s <p>" ; 9: fclose($f) ; 10: ?> 11: 讀取完畢 12: </body> 13: </html> 第 6 行開啟 number.txt 檔為唯讀檔。第 7 行自 $f 讀取檔案內容, 並指定給$s。第 8 行顯示讀取內容。第 9 行關閉檔案。
feof: file eon of file 是否已讀到檔尾? 1: <html> 2: <title>公 佈 欄</title> 3: <body> 4: <b>公 佈 欄</b> <p> 5: <?php 6: $fp=fopen("board.txt","r"); 7: $i=0 ; 8: echo "<table width=200 border=0><caption>公告內容</caption>"; 9: while (!feof($fp)){ 10: $str=fgets($fp) ; 11: $i++; 12: $i%2==0 ? $color="ffffc2" : $color="d2ffff"; 13: echo "<tr bgcolor=$color><td width=20>$i</td><td>$str</td></tr>" ; 14: } 15: echo "</table><p>"; 16: echo "共 $i 筆公告事項"; 17: fclose($fp) ; 18: ?> 19: </body> 20: </html> feof: file eon of file 是否已讀到檔尾? 首先建立一個公告事項的文字檔案, 再利用程式用讀取檔案的方式取得公告內容將公告事項顯示在網頁. 範例說明公告欄的程式.
16-4 網頁計數器-文字版 文字模式的計數器, 比較簡單, 也不會因為圖形而延長下載時間。 file_exists()函數: 檢查所指定的檔案是否存在。其格式如下: int file_exists(檔案名稱) 如果存在傳回 true 否則傳回false。
第一次執行 多次執行後 1: <?php 2: if (file_exists("count.txt")){ 3: $ff=fopen("count.txt","r") ; 4: $c=fgets($ff) ; 5: $c++; 6: fclose($ff) ; 7: }else{ 8: $c=1 ; 9: } 10: $ff=fopen("count.txt","w"); 11: fputs($ff,$c) ; 12: fclose($ff) ; 13: ?> 14: <html> 15: <title>文字版計數器</title> 16: <body> 17: <center> 18: 歡迎您光臨本站, 您是第<?php echo $c ; ?>位訪客 19: </center> 20: </body> 21: </html> 第一次執行 多次執行後
問題與討論 請說明檔案處理的步驟。 請改寫第十章問題4,將各科成績、總和及平均存入檔案中。(Unix系統請注意讀寫權限)。 請將上題之檔案內容讀出並顯示於瀏覽器上。 請利用檔案撰寫一個留言版. (Unix系統請注意讀寫權限)。