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

Poo*_*att 14 php file-io binaryfiles

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

Sar*_*raz 18

你正在寻找fread功能.

fread - 二进制安全文件读取

例:

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

注意:

在区分二进制文件和文本文件(即Windows)的系统上,必须打开文件,并在fopen()模式参数中包含"b".

  • 这里重要的一点是 fopen() 中的 `b` 标志。 (2认同)

vba*_*osh 16

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;
}
Run Code Online (Sandbox Code Playgroud)

以下注释来自手册:

注意:此函数是二进制安全的.


Sha*_*ngh 1

尝试这个

$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 
Run Code Online (Sandbox Code Playgroud)

  • 为什么要将第一个字节设置为0xFF? (7认同)
  • 您应该使用“rb”而不是“r”来调用 fopen(),这样它就可以读取为二进制而不是文本。 (4认同)