当前位置: 首页> 最新文章列表> 如何使用 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 有足够权限操作目标文件夹。