PHP - 寫檔案



PHP 的內建函式庫提供了兩個函式來對檔案流執行寫操作。這些函式是 fwrite()fputs()

為了能夠將資料寫入檔案,必須以寫模式 (w)、追加模式 (a)、讀寫模式 (r+ 或 w+) 或二進位制寫/追加模式 (rb+、wb+ 或 wa) 開啟檔案。

fputs() 函式

fputs() 函式將字串寫入以可寫模式開啟的檔案中。

fputs(resource $stream, string $string, int $length)

這裡,$stream 引數是控制代碼,指向以可寫模式開啟的檔案。$string 引數是要寫入的資料,$length 是一個可選引數,指定要寫入的最大位元組數。

fputs() 函式返回寫入的位元組數,如果函式不成功則返回 false

示例

以下程式碼開啟一個新檔案,在其中寫入一個字串,並返回寫入的位元組數。

<?php
   $fp = fopen("hello.txt", "w");
   $bytes = fputs($fp, "Hello World\n");
   echo "bytes written: $bytes";
   fclose($fp);
?>

它將產生以下 輸出 -

bytes written: 12

示例

如果需要在之前存在的檔案中新增文字,則必須以追加模式 (a) 開啟它。讓我們在前面的示例中在同一檔案中再新增一個字串。

<?php
   $fp = fopen("hello.txt", "a");
   $bytes = fputs($fp, "Hello PHP");
   echo "bytes written: $bytes";
   fclose($fp);
?>

如果在文字編輯器中開啟 "hello.txt" 檔案,您應該能夠看到其中的兩行。

示例

在以下 PHP 指令碼中,一個已存在的檔案 (hello.txt) 在迴圈中逐行讀取,並且每一行都寫入另一個檔案 (new.txt)

假設 "hello.txt" 包含以下文字 -

Hello World
TutorialsPoint
PHP Tutorials

以下是建立現有檔案副本的 PHP 程式碼 -

<?php
   $file = fopen("hello.txt", "r");
   $newfile = fopen("new.txt", "w");
   while(! feof($file)) {
      $str = fgets($file);
      fputs($newfile, $str);
   }
   fclose($file);
   fclose($newfile);
?>

新建立的 "new.txt" 檔案應該具有完全相同的內容。

fwrite() 函式

frwrite() 函式是 fread() 函式的對應函式。它執行二進位制安全的寫操作。

fwrite(resource $stream, string $data, ?int $length = null): int|false

這裡,$stream 引數是指向以可寫模式開啟的檔案的資源。要寫入檔案的資料在 $data 引數中提供。可選的 $length 引數可以提供以指定要寫入的位元組數。它應該是 int 型別,寫入將在寫入 length 個位元組或到達資料末尾後停止,以先發生者為準。

fwrite() 函式返回寫入的位元組數,或者在失敗時返回 false 以及 E_WARNING。

示例

以下程式開啟一個新檔案,執行寫操作並顯示寫入的位元組數。

<?php
   $file = fopen("/PhpProject/sample.txt", "w");
   echo fwrite($file, "Hello Tutorialspoint!!!!!");
   fclose($file);
?>

示例

在下面給出的示例程式碼中,一個已存在的 "welcome.png" 檔案以二進位制讀取模式開啟。fread() 函式用於將其位元組讀取到 "$data" 變數中,然後寫入另一個檔案 "new.png" -

<?php
   $name = "welcome.png";
   $file = fopen($name, "rb");
   $newfile = fopen("new.png", "wb");
   $size = filesize($name);
   $data = fread($file, $size);
   fwrite($newfile, $data, $size);
   fclose($file);
   fclose($newfile);
?>

執行上述程式碼。當前目錄現在應該有一個現有 "welcome.png" 檔案的副本。

廣告