PHP - 追加檔案



在 PHP 中,fopen() 函式返回用於不同開啟模式的檔案指標,例如 "w" 用於寫入模式,"r" 用於讀取模式,"r+" 或 "w+" 用於同時讀取/寫入操作,以及 "a" 模式,表示追加模式。

當檔案以 "w" 模式引數開啟時,它始終會開啟一個新檔案。這意味著如果檔案已存在,其內容將丟失。隨後的 fwrite() 函式將把資料放在檔案的起始位置。

假設存在一個名為 "new.txt" 的檔案,其內容如下:

Hello World
TutorialsPoint
PHP Tutorial

以下語句:

$fp = fopen("new.txt", "w");

在寫入新內容之前會擦除所有現有資料。

讀寫模式

顯然,如果檔案以 "r" 模式開啟,則無法新增新資料。但是,"r+" 或 "w+" 模式以 "r/w" 模式開啟檔案,但仍然在開啟檔案後立即執行 fwrite() 語句會覆蓋內容。

示例

請檢視以下程式碼:

<?php
   $fp = fopen("new.txt", "r+");
   fwrite($fp, "PHP-MySQL Tutorial\n");
   fclose($fp);
?>

使用此程式碼,"new.txt" 檔案的內容現在將變為:

PHP-MySQL Tutorial
lsPoint
PHP Tutorial

為了確保新內容新增到現有檔案的末尾,我們需要在寫入操作之前手動將檔案指標置於末尾。(初始檔案指標位置在第 0 個位元組)

fseek() 函式

PHP 的 fseek() 函式使您可以將檔案指標放在任何您想要的位置:

fseek(resource $stream, int $offset, int $whence = SEEK_SET): int

$whence 引數是從哪裡計算偏移量的。其值為:

  • SEEK_SET - 將位置設定為等於偏移量位元組。

  • SEEK_CUR - 將位置設定為當前位置加上偏移量。

  • SEEK_END - 將位置設定為檔案末尾加上偏移量。

示例

因此,我們需要使用 fseek() 函式將指標移動到末尾,如下面的程式碼所示,該程式碼將新內容新增到末尾。

<?php
   $fp = fopen("new.txt", "r+");
   fseek($fp, 0, SEEK_END);
   fwrite($fp, "\nPHP-MySQL Tutorial\n");
   fclose($fp);
?>

現在檢查 "new.txt" 的內容。它將包含以下文字:

Hello World
TutorialsPoint
PHP Tutorial
PHP-MySQL Tutorial

追加模式

無需手動將指標移動到末尾,fopen() 函式中的 "a" 引數會以追加模式開啟檔案。每個 fwrite() 語句都會透過自動將指標移動到 SEEK_END 位置,將內容新增到現有內容的末尾。

<?php
   $fp = fopen("new.txt", "a");
   fwrite($fp, "\nPHP-MySQL Tutorial\n");
   fclose($fp);
?>

fopen() 函式允許的模式之一是 "r+" 模式,該模式下檔案執行讀取/追加操作。要從任何位置讀取資料,您可以使用 fseek() 將指標置於所需的位元組處。但是,每個 fwrite() 操作僅將新內容寫入末尾。

示例

在下面的程式中,檔案以 "a+" 模式開啟。要讀取第一行,我們將檔案位置從開頭移到第 0 個位置。但是,fwrite() 語句仍然將新內容新增到末尾,並且不會覆蓋下一行,就像以 "r+" 模式開啟時那樣。

<?php
   $fp = fopen("new.txt", "a+");
   fseek($fp, 0, SEEK_SET);
   $data = fread($fp, 12);
   echo $data;
   fwrite($fp, "PHP-File Handling");
   fclose ($fp);
?>

因此,如果檔案以 "r+/w+" 模式或 "a/a+" 模式開啟,我們可以將資料追加到現有檔案中。

廣告