Which PHP function to use to read a binary file into a string?
Asked
Active
Viewed 2.8k times
3 Answers
30
file_get_contents
is good enough. It seems that it read files in binary mode. I have made a little PHP script to check this. No MISMATCH messages was produced.
<?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;
}
The following note is from manual:
Note: This function is binary-safe.

vbarbarosh
- 3,502
- 4
- 33
- 43
-
THis is the best answer. +1 for supplying a test. Well done. – Larry K Nov 26 '18 at 05:30
19
You are looking for fread
function.
fread — Binary-safe file read
Example:
$filename = "c:\\files\\somepic.gif";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);
Note:
On systems which differentiate between binary and text files (i.e. Windows) the file must be opened with 'b' included in fopen() mode parameter.

Sarfraz
- 377,238
- 77
- 533
- 578
1
Try this
$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

Toby Allen
- 10,997
- 11
- 73
- 124

Shakti Singh
- 84,385
- 21
- 134
- 153
-
7
-
1Under Windows, this code will treat files as plain text and will possibly corrupt the contents you read. – Álvaro González Dec 28 '10 at 11:43
-
1
-
4You should call fopen() with 'rb', not 'r', so that it does reads as binary instead of text. – samoz Apr 03 '13 at 19:11