2017年10月11日 星期三

檔案的輸入與輸出

檔案的輸入與輸出

在網頁裡要控制檔案的輸入與輸出,是一件非常容易的事,
只要透過固定的函式群,就可將檔案玩弄於股掌之間,並輕鬆完成檔案的讀寫。

因為網頁是死的,它所能記住的就只有正在執行的幾個變數罷了,
當網頁載入「完畢」,一切也就隨之煙消雲散了,
而檔案的輸入與輸出,正可以將值得記錄下來的資料,儲存在檔案裡,留待日後要使用時,再將之取出。



檔案的輸出(存檔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="">
{
 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="">
{
 $fileopen[$i]=fopen($file[$i],"w");
 fseek($fileopen[$i],0);
}
for($i=0;$i<3 i="" o:p="">
{
 for($j=0;$j<4 j="" o:p="">
 {
  fwrite($fileopen[$i],$data[$i][$j]."\n");
 }
}
for($i=0;$i<3 i="" o:p="">
{
 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



沒有留言:

用頭腦去思考,不要人云亦云才好, 宗教信徒就是依賴與自私心態(求東求西)的人, 光是這點就很容易暴露弱點了, 難怪seafood吃飽飽,哈哈。 續上, 除了依賴與自私心態(兩者都是人性)之外。 另外也有很大一部份的人,是人云亦云的思考邏輯, 所以宗教才能譁眾取寵。