Получить контрольную сумму MD5 для очень больших файлов

Я написал сценарий, который читает все файлы в каталоге и возвращает хеш-файл md5 для каждого файла. Однако он не делает ничего для довольно большого файла. Я предполагаю, что интерпретатор имеет некоторое значение, установленное для максимального времени обработки, и поскольку для получения этого значения требуется слишком много времени, он просто переходит к другим файлам. Есть ли в любом случае, чтобы получить контрольную сумму md5 для больших файлов через PHP? Если нет, можно ли это сделать с помощью chron-работы с cpanel? Я дал ему выстрел, но не кажется, что моя команда md5sum когда-либо обрабатывалась: я никогда не получаю сообщение с хешем. Вот PHP, который я уже написал. Это очень простой код и работает файл для файлов разумного размера:

function md5_dir($dir) { if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { echo nl2br($file . "\n" . md5_file($file) . "\n\n"); } closedir($dh); } } } 

Хотя я не мог воспроизвести его с помощью PHP 5.2 или 5.3 с файлом 2 ГБ, проблема, похоже, возникла на 32-битных PHP-сборках.

Тем не менее, это не очень хорошее решение, которое вы могли бы попытаться позволить системе хакинг

 echo system("md5sum test.txt"); 

46d6a7bcbcf7ae0501da341cb3bae27c test.txt

Обязательно используйте escapeshellarg ( http://us3.php.net/manual/en/function.escapeshellarg.php ), если вы решите использовать вызов shell_exec () или system (). То есть,

 shell_exec('md5sum -b ' . escapeshellarg($filename)); 

Если вы нажимаете ограничение времени выполнения или максимальное время выполнения, PHP должен вызывать сообщение об ошибке. Проверьте свои журналы ошибок. Если вы достигли предела, вы можете установить максимальные значения для использования памяти PHP и времени выполнения в файле php.ini:

 memory_limit = 16M 

будет устанавливать максимальное использование памяти до 16 мегабайт. Максимальное время выполнения:

 max_execution_time = 30 

будет установлено максимальное время выполнения до 30 секунд.

вы можете добиться этого с помощью командной строки

  shell_exec('md5sum -b '. $fileName); 

FYI …. в случае, если кому-то нужна быстрая контрольная сумма md5 (). PHP довольно быстрый даже с большими файлами. Это возвращает контрольную сумму в Linux Mint .iso (размер 880 МБ) за 3 секунды.

 <?php // checksum $path = $_SERVER['DOCUMENT_ROOT']; // get upload folder path $file = $path."/somefolder/linux-mint.iso"; // any file echo md5_file($file); ?>