使用哪个 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 函数将二进制文件读入字符串?的主要内容,如果未能解决你的问题,请参考以下文章