當前位置: 首頁> 最新文章列表> 使用pack() 與file_put_contents() 寫入二進製文件

使用pack() 與file_put_contents() 寫入二進製文件

M66 2025-06-03

在PHP 中,處理二進制數據時, pack()函數和file_put_contents()函數的組合非常實用。 pack()可以將數據按照指定格式轉換成二進製字符串,而file_put_contents()則負責將這些二進制數據寫入文件。本文將詳細介紹如何使用這兩個函數,將結構化數據寫入二進製文件。

一、pack() 函數簡介

pack()函數根據格式碼將變量轉換成二進製字符串。它支持多種格式碼,如:

  • c :有符號字符(1 字節)

  • C :無符號字符(1 字節)

  • s :有符號短整數(2 字節)

  • S :無符號短整數(2 字節)

  • i :有符號整數(4 字節)

  • I :無符號整數(4 字節)

  • f :浮點數(4 字節)

  • d :雙精度浮點數(8 字節)

更多格式請參考PHP 官方文檔。

二、file_put_contents() 函數簡介

file_put_contents()函數用於將字符串寫入文件。默認情況下會覆蓋文件內容,也可以設置為追加模式。

三、示例代碼:將結構化數據寫入二進製文件

假設我們要寫入一個包含ID(4 字節整數)、狀態(1 字節字符)、浮點數數值(4 字節浮點數)的數據結構。

 <?php
// 數據準備
$id = 123456;           // 整數
$status = 1;            // 狀態,1字节无符号整數
$value = 3.14159;       // 浮點數

// 使用 pack() 按格式打包數據
// 格式說明:I - 無符號整型,C - 無符號字符,f - 浮點數
$binaryData = pack('ICf', $id, $status, $value);

// 寫入二進製文件
file_put_contents('data.bin', $binaryData);

echo "数据已寫入二進製文件。\n";
?>

運行上述代碼後,會在當前目錄生成一個名為data.bin的文件,文件內容為對應的二進制數據。

四、讀取二進製文件示例

為驗證寫入是否成功,我們可以用file_get_contents()讀取文件內容,並用unpack()解析:

 <?php
// 讀取二進製文件
$data = file_get_contents('data.bin');

// 解包數據
// 格式要和寫入時保持一致
$result = unpack('Iid/Cstatus/fvalue', $data);

print_r($result);
?>

輸出結果應為:

 Array
(
    [id] => 123456
    [status] => 1
    [value] => 3.14159
)

五、注意事項

  1. 字節序pack()默認使用機器字節序,如果跨平台或網絡傳輸,建議指定字節序格式(如N為網絡字節序無符號整型)。

  2. 格式匹配pack()unpack()的格式必須一一對應,否則會解析錯誤。

  3. 文件權限:寫文件時確保PHP 有足夠權限操作目標文件夾。