在 PHP 開發中,檔案操作是常見需求,但若要在檔案的特定行、特定字元位置插入資料,邏輯就會變得稍微複雜。本文將透過一個完整的函式範例,示範如何精準地在文字檔案指定位置插入字串,並將修改後的內容寫回檔案。
以下範例展示如何在第 3 行、第 10 個字元前插入字串 abcdef,並覆寫原檔案:
$arrInsert = insertContent("array.php", "abcdef", 3, 10);
unlink("array.php"); // 刪除原檔
foreach($arrInsert as $value) {
file_put_contents("array.php", $value, FILE_APPEND); // 逐行寫入
}
function insertContent($source, $s, $iLine, $index) {
$file_handle = fopen($source, "r");
$i = 0;
$arr = array();
while (!feof($file_handle)) {
$line = fgets($file_handle);
++$i;
if ($i == $iLine) {
// 處理插入邏輯:若索引在行尾則換行,否則在指定位置切割插入
if($index == strlen($line)-1)
$arr[] = substr($line, 0, strlen($line)-1) . $s . "\n";
else
$arr[] = substr($line, 0, $index) . $s . substr($line, $index);
} else {
$arr[] = $line;
}
}
fclose($file_handle);
return $arr;
}
函式 insertContent 採用「讀取全文 → 記憶體中修改陣列 → 刪除原檔 → 重寫」的策略。透過 fgets 逐行讀取,利用計數器 $i 判斷是否為目標行,再用 substr 切割字串完成插入。這種方式雖然簡單,但適用於中小型文字檔案;若處理大型檔案,建議改用暫存檔或串流處理以節省記憶體。
此技巧常用於:設定檔自動化修改、日誌檔標記插入、樣板檔案動態產生等情境。若需像資料庫般靈活操作文字檔(刪除特定行、讀取指定行),可進一步封裝成類別管理。