PHP 怎么PHP二进制文件

wen PHP项目 1

本文目录导读:

PHP 怎么PHP二进制文件

  1. 读取二进制文件
  2. 写入二进制文件
  3. 解析二进制数据
  4. 高级二进制操作
  5. 完整示例:读取二进制文件头
  6. 注意事项
  7. 常用格式字符

在 PHP 中操作二进制文件有几种常见方法,我来详细介绍一下:

读取二进制文件

使用 fopen()fread()

// 打开二进制文件
$handle = fopen('file.bin', 'rb');  // 'rb' 模式很重要
if ($handle) {
    // 读取前100字节
    $data = fread($handle, 100);
    fclose($handle);
    // 读取整个文件
    $content = file_get_contents('file.bin');
}

使用 file_get_contents()

// 读取整个二进制文件
$binaryData = file_get_contents('image.jpg');

写入二进制文件

// 写入二进制数据
$data = "\x00\x01\x02\x03";  // 十六进制表示
file_put_contents('output.bin', $data);
// 使用 fopen
$handle = fopen('output.bin', 'wb');
fwrite($handle, $data);
fclose($handle);

解析二进制数据

使用 unpack()

// 解析二进制数据
$data = file_get_contents('data.bin');
// 格式说明:
// C = 无符号字符(1字节)
// v = 无符号短整型(2字节,小端)
// V = 无符号长整型(4字节,小端)
// N = 无符号长整型(4字节,大端)
// L = 无符号长整型(4字节)
$unpacked = unpack('Cuint8/vint16/Vuint32', $data);
print_r($unpacked);

使用 pack()

// 创建二进制数据
$data = pack('CvV', 255, 65535, 4294967295);
file_put_contents('output.bin', $data);
// 组合多个数据
$packed = pack('C3', 1, 2, 3);  // 3个无符号字符
$packed .= pack('v5', 100, 200, 300, 400, 500);  // 5个短整型

高级二进制操作

逐字节处理

$file = fopen('file.bin', 'rb');
$byte = fread($file, 1);
while ($byte !== false && !feof($file)) {
    // 处理每个字节
    echo ord($byte) . " ";  // 获取字节的整数值
    $byte = fread($file, 1);
}
fclose($file);

使用 SplFileObject

$file = new SplFileObject('data.bin', 'rb');
$file->seek(10);  // 跳过前10字节
while (!$file->eof()) {
    $byte = $file->fread(4);  // 每次读取4字节
    $number = unpack('V', $byte);  // 解析为32位整数
    var_dump($number);
}

完整示例:读取二进制文件头

function readBinaryHeader($filename) {
    $file = fopen($filename, 'rb');
    if (!$file) {
        return false;
    }
    // 读取文件头(假设前4字节是魔数,接下来4字节是版本号)
    $header = fread($file, 8);
    fclose($file);
    // 解析数据
    $magicNumber = unpack('L', substr($header, 0, 4));
    $version = unpack('L', substr($header, 4, 4));
    return [
        'magic' => dechex($magicNumber[1]),
        'version' => $version[1]
    ];
}

注意事项

// 1. 二进制模式标志
$file = fopen('file.bin', 'rb');  // 读取
$file = fopen('file.bin', 'wb');  // 写入
$file = fopen('file.bin', 'ab');  // 追加
// 2. 检查文件大小
$size = filesize('file.bin');
$data = fread($file, $size);
// 3. 错误处理
try {
    $data = file_get_contents('file.bin');
    if ($data === false) {
        throw new Exception("无法读取文件");
    }
} catch (Exception $e) {
    echo "错误: " . $e->getMessage();
}
// 4. 大文件处理(使用流)
$handle = fopen('largefile.bin', 'rb');
$chunkSize = 8192;  // 8KB 块大小
while (!feof($handle)) {
    $chunk = fread($handle, $chunkSize);
    // 处理数据块
}
fclose($handle);

常用格式字符

格式 含义 字节数
C 无符号字符 1
c 有符号字符 1
S/v 无符号短整型(小端) 2
s 有符号短整型 2
L/V 无符号长整型(小端) 4
l 有符号长整型 4
F 浮点数 4
D 双精度浮点数 8

这些方法覆盖了 PHP 中处理二进制文件的绝大多数场景,根据你的具体需求选择合适的方法即可。

抱歉,评论功能暂时关闭!