Генерация MD5-хеша больших файлов

SAS1024

Новичок
Генерация MD5-хеша больших файлов

Версия PHP - 5.2.0

Подскажите пожалуйста способ, с помощью которого можно получить MD5-хеш у большого файла?
Я уже пробовал 2 способа: встроенная функция md5_file и расчет md5 с помощью функции file_get_contents.
md5_file "затыкается" на файлах больше 500 мбайт :( Скрипт просто висит и всё. Ни сгенерированных md5-хешей, ни ошибок.
А при использовании file_get_contents скрипт выпадает с ошибкой Out of memory.

Так же пробовал генерацию SFV файлов (содержащих CRC32 сумму файлов). Т.к. в PHP нет функции расчета CRC32 у файла, пришлось сделать вот так:
PHP:
$sfv_checksum = strtoupper(dechex(crc32(file_get_contents($filename))));
На выходе опять-таки получал ошибку Out of memory...
 

tony2001

TeaM PHPClub
>md5_file "затыкается" на файлах больше 500 мбайт Скрипт просто висит и всё.
>Ни сгенерированных md5-хешей, ни ошибок.

Ждите. Прочесть 500Mb файл - это не одна секунда.

>На выходе опять-таки получал ошибку Out of memory...

Грамотно.
Читать 500Mb в память чтобы сделать md5..
 

Гравицапа

elbirret elcno
На выходе опять-таки получал ошибку Out of memory...
Тебе не кажется, что это очевидно?
Ты грузишь в пхп в память здоровый файл и тебе непонятно почему такое сообщение? Не надо так делать.
Если уж не работает md5_file, то вызывай консольный аналог md5sum
 

tony2001

TeaM PHPClub
>Если уж не работает md5_file, то вызывай консольный аналог md5sum

Даже md5sum придётся прочесть весь файл, т.е. совершить те же самые телодвижения, что требуются и для md5(), и которые у меня на scsi-диске занимают ~10 секунд на 500Mb (как для md5_file(), так и для md5sum).
 

romy4

invoke [brain]
SAS1024
если тебе для внутренних нужнд, то можешь делать хэш сумму каждого мегабайта, а потом общую хэшсумму полученных 500 сумм.
 

phprus

Moderator
Команда форума
romy4
А что это изменит? Всеравно весь файл читать придется, а именно это и занимает основное время. Читай сообщение tony2001
 

SAS1024

Новичок
tony2001, спасибо за разъяснение.

Скажите, а каким тогда образом можно сделать генерацию CRC32 из больших файлов?
Я так понимаю, способ, предложеный romy4 подойдет для этого?
 

SAS1024

Новичок
tony2001, спасибо за линки. Нашел там функцию hash_file, она то, что мне нужно :)
 
Сверху