// 讀取一行 (最多 n-1 字元,遇換行或 EOF 停止)
$line = fgets($fp, 1024);
// 寫入字串
fputs($fp, "內容\n");
fgets() 回傳包含換行符的字串;fputs() 相當於 fwrite() 但不需指定長度。// 讀取指定位元組數
$data = fread($fp, 8192); // 讀 8KB
// 寫入指定位元組數
fwrite($fp, $binaryData, strlen($binaryData));
| 模式 | 說明 |
|---|---|
r/w/a | 文字模式 (Windows 會轉換 \n↔\r\n) |
rb/wb/ab | 二進位模式 (不轉換),跨平台一致 |
處理二進位檔案務必加 b 旗標 (如 fopen($file, 'rb'))。
$fp = fopen("stu_list", "wb+");
$students = [
['name'=>'Alice','num'=>1,'age'=>20,'addr'=>'Taipei'],
['name'=>'Bob', 'num'=>2,'age'=>21,'addr'=>'Taichung'],
];
foreach ($students as $s) {
// 簡易序列化:固定長度欄位
$rec = pack("a10 i i a15", $s['name'], $s['num'], $s['age'], $s['addr']);
fwrite($fp, $rec);
}
rewind($fp);
while ($rec = fread($fp, 37)) { // 10+4+4+15+4(padding) = 37
$u = unpack("a10name/inum/iage/a15addr", $rec);
echo "{$u['name']} {$u['num']} {$u['age']} {$u['addr']}\n";
}
fclose($fp);
fgets/fputs 適合行導向文字處理;fread/fwrite 適合二進位與固定結構資料。選擇正確模式與函式組合,能簡化邏輯並提升效能。