Если у меня есть три параметра ПОЛУЧАЮТ:Чтения больших частей файлов для хеширования/контрольных сумм
$filename = $_GET['filename'];
$start = $_GET['start'];
$size = $_GET['size'];
И я читаю кусок файла, как так:
$handle = fopen($basepath . $filename, "rb");
fseek($handle, $start);
$contents = fread($handle, $size);
echo md5($contents);
Как я могу прочитать большим части файла (в любом месте от 1 мб до 1 гб) и создавать хэш или контрольную сумму его содержимого без необходимости выделять достаточное количество памяти для всего чтения?
На данный момент, если я попытаюсь использовать слишком большую часть файла, я получаю ошибку памяти, так как php не может выделить достаточно памяти (примерно 400 Мб).
Есть функция хеширования, в которой я могу переварить части файла, в то время, а не все содержимое сразу (например, начиная с $start
чтения 100kb блоков и не кормить его функции до $size
выполняется)? И как бы я прочитал файл в кусках, чтобы начать с $start
и читать $size
байтов?
Если нет такой хеширования или контрольная функция, которая поддерживает подавая куски частей данных в то время, бы file_get_contents()
решить проблему выделения памяти для больших объемов чтения? Я не совсем уверен, как эта функция работает.
Спасибо.
, Что цель получить хэш только часть файла? –
Это часть сценария загрузчика, где клиентская часть может загружать HTTP-файл по частям и запрашивать хэш/контрольную сумму этой части файла для сравнения со стороны сервера. –
Почему бы не разделить серверную сторону на zip или tar –