使用哪个 PHP 函数将二进制文件读入字符串?

Posted

技术标签:

【中文标题】使用哪个 PHP 函数将二进制文件读入字符串?【英文标题】:Which PHP function to use to read a binary file into a string? 【发布时间】:2011-05-31 13:12:34 【问题描述】:

【问题讨论】:

【参考方案1】:

file_get_contents 已经足够好了。它似乎以二进制模式读取文件。我制作了一个小 php 脚本来检查这一点。没有产生 MISMATCH 消息。

<?php

foreach (glob('/usr/bin/*') as $binary) 
    $php = md5(file_get_contents($binary));
    $shell = shell_exec("md5sum $binary");
    if ($php != preg_replace('/ .*/s', '', $shell)) 
        echo 'MISMATCH', PHP_EOL;
    
    else 
        echo 'MATCH', PHP_EOL;
    
    echo $php, '  ', $binary, PHP_EOL;
    echo $shell, PHP_EOL;

以下注释来自manual:

注意:这个函数是二进制安全的。

【讨论】:

这是最好的答案。 +1 用于提供测试。干得好。【参考方案2】:

您正在寻找fread 函数。

fread — 二进制安全文件读取

示例:

$filename = "c:\\files\\somepic.gif";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);

注意:

在区分不同的系统上 二进制和文本文件(即 Windows) 该文件必须用'b'打开 包含在 fopen() 模式参数中。

【讨论】:

这里重要的一点是 fopen() 中的 b 标志。【参考方案3】:

试试这个

$handle = @fopen("/path/to/file.bin", "rb");
if ($handle) 
    while (!feof($handle)) 
        $buffer[] = fgets($handle, 400);
    
    fclose($handle);
    $buffer[0][0] = chr(hexdec("FF")); // set the first byte to 0xFF

// convert array to string 

【讨论】:

为什么要设置第一个字节为0xFF? 在 Windows 下,此代码会将文件视为纯文本,可能会损坏您阅读的内容。 感谢 Shakti Singh 和 Álvaro G. Vicario 您应该使用 'rb' 而不是 'r' 调用 fopen(),以便它读取二进制而不是文本。

以上是关于使用哪个 PHP 函数将二进制文件读入字符串?的主要内容,如果未能解决你的问题,请参考以下文章

将整个二进制文件读入 Python

VB6.0中如何实现逐行读入文本文件?

Windows C++ API:如何将整个二进制文件读入缓冲区?

使用 Python 读取二进制 Plist 文件

PHP如何将从二进制文件中读取的字节转换为数字

将二进制文件读入结构(翻译指令)