檔案的輸入與輸出
在網頁裡要控制檔案的輸入與輸出,是一件非常容易的事,
只要透過固定的函式群,就可將檔案玩弄於股掌之間,並輕鬆完成檔案的讀寫。
因為網頁是死的,它所能記住的就只有正在執行的幾個變數罷了,
當網頁載入「完畢」,一切也就隨之煙消雲散了,
而檔案的輸入與輸出,正可以將值得記錄下來的資料,儲存在檔案裡,留待日後要使用時,再將之取出。
檔案的輸出(存檔Save)
將資料儲存至檔案
開啟檔案的函式:fopen($file,"Open
Mode")
回傳的值:檔案的handle值,其資料型態為整數
舉例:
$fileopen = fopen($file,"w+");
當中「$fileopen」可以視為開啟後的檔案handle
變數「$file」即為欲開啟檔案的路徑與完整檔名
「w+」表示開啟的模式為何?
關於模式的選擇:
檔案開啟模式
|
說明
|
a
|
用附加檔案方式開啟,屬性為「寫入」,且將檔案指標移至檔案最末,若檔案不存在則建立檔案
|
a+
|
用附加檔案方式開啟,屬性為「可讀可寫」,且將檔案指標移至檔案最末,若檔案不存在則建立新檔
|
r
|
開啟檔案方式為「唯讀」模式,且將檔案指標移至檔案開始處,當中檔案必須存在,否則會發生錯誤
|
r+
|
開啟檔案方式為「可讀可寫」,且將檔案指標移至檔案開始處,當中檔案必須存在,否則會發生錯誤
|
w
|
開啟檔案方式為「唯寫」模式,且先將檔案清除之後重新寫入,若檔案不存在則建立新檔
|
w+
|
開啟檔案方式為「可讀可寫」,且先將檔案清除之後重新寫入,若檔案不存在則建立新檔
|
b
|
將檔案視為二進位檔,如:圖檔,而非文字檔。
但此參數在Unix上會被忽略
|
「$fileopen=fopen($file,"w+")」本身有回傳值,可以讓程式設計師做為除錯之用,如果成功開啟檔案則回傳true;若開啟失敗則回傳false
所以通常會於撰寫時加上一道檢查手續,以防止開啟失敗時的錯誤,
檢驗是否已經順利開啟檔案:
if(($fileopen=fopen($file,"w+"))==true)
{
echo("成功開啟檔案");
}
else
{
echo("開啟檔案失敗");
}
PHP最關鍵的檔案函式群(一)
這些函式群平時無法單獨使用,必須於透過彼此的結合才有意義
函式
|
資料型態
|
用途
|
fopen($file,"w")
|
file handle
|
開啟檔案的函式
|
fseek($fileopen,0)
|
整數
|
在檔案裡移動指標的函式
|
fwrite($fileopen,$name)
|
整數
|
將字串寫入檔案的函式
|
fclose($fileopen)
|
整數
|
關閉檔案的函式
|
程式範例
$name="大河馬";
$file="test-output.txt";
$fileopen=fopen($file,"w");
fseek($fileopen,0);
fwrite($fileopen,$name);
fclose($fileopen);
echo("大河馬 資料已經存檔");
輸出資料的換行
不要將輸出結果連接在一起(以防難以辨認),只要加上「換行符號\n」
$data[0]="大河馬"; //姓名
$data[1]="21"; //年齡
$data[2]="台北市忠孝西路一段78號"; //地址
$file="test01.txt";
$fileopen=fopen($file,"w");
fseek($fileopen,0);
for($i=0;$i<3 i="" o:p="">3>
{
fwrite($fileopen,$data[$i]."\n");
}
fclose($fileopen);
echo("資料已經存檔");
一次寫入多個檔案
程式範例
$data[0][0]="大河馬"; //姓名
$data[0][1]="21歲"; //年齡
$data[0][2]="陽明山景致花園1號"; //地址
$data[0][3]="程式設計"; //職務
$data[1][0]="小恐龍";
$data[1][1]="19歲";
$data[1][2]="台北市立動物園99區";
$data[1][3]="聊天打屁";
$data[2][0]="波波";
$data[2][1]="17歲";
$data[2][2]="玉山上的小歇樓";
$data[2][3]="網頁設計";
$file[0]="file01.txt";
$file[1]="file02.txt";
$file[2]="file03.txt";
for($i=0;$i<3 i="" o:p="">3>
{
$fileopen[$i]=fopen($file[$i],"w");
fseek($fileopen[$i],0);
}
for($i=0;$i<3 i="" o:p="">3>
{
for($j=0;$j<4 j="" o:p="">4>
{
fwrite($fileopen[$i],$data[$i][$j]."\n");
}
}
for($i=0;$i<3 i="" o:p="">3>
{
fclose($fileopen[$i]);
}
echo("資料已經存檔");
檔案的輸入(讀檔)
不論是利用前面內容的存檔以及檔案函式的使用,還是用人工輸入的方式,建立一個固定格式的文字檔;而後利用函式將資料讀取進來,再一一處理資料與輸出資料
一般讀取檔案的方式,可以分成兩種:
1. 一次讀入單行資料
2. 取出檔案裡特定位置的資料
從檔案裡讀取單行資料
讀取檔案與存檔的方法,其實是大同小異的,當中唯一不同的地方,就是將函式fwrite()改成fread()
程式範例
$file="test01.txt";
$fileopen=fopen($file,"r");
fseek($fileopen,0);
$getdata=fread($fileopen,6);
echo("所取得的資料為=".$getdata);
fclose($fileopen);
顯示結果
所取得的資料為=大河馬
程式說明
$getdata=fread($fileopen,6);
係利用fread()檔案讀取開啟後的檔案,並一次讀取6個字元的資料(1字元為1個英文字大小,中文字為2個字元組成)。
讀取之後的資料會存放在$getdata變數裡
取出檔案裡特定位置的資料
當檔案數變多、記錄的資料不只一行時,光是管理這些檔案就是一個頭痛的問題,更何況超出一行的資料,也需要做進一步的處理等等。
因此,可以利用fseek()函式,讀取檔案裡的特定位置的資料。
程式範例
文字檔test02.txt裡的內容,只有一行文字資料:
「大河馬21歲台北市忠孝路78號」
$file="test02.txt";
$fileopen=fopen($file,"r");
fseek($fileopen,0);
$getname=fread($fileopen,6);
fseek($fileopen,6);
$getage=fread($fileopen,4);
fseek($fileopen,10);
$getaddress=fread($fileopen,40);
echo("所取得的資料為:
");
");
echo("姓名=".$getname."
");
");
echo("年齡=".$getage."
");
");
echo("地址=".$getaddress."
");
");
fclose($fileopen);
顯示結果
所取得的資料為:
姓名=大河馬
年齡=21歲
地址=台北市忠孝路78號
姓名=大河馬
年齡=21歲
地址=台北市忠孝路78號
沒有留言:
張貼留言