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 :
Примечание: эта функция является бинарно-безопасной.