Получите контрольную сумму 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);
        }
    }
}
8
задан Charles 24 December 2012 в 21:35
поделиться

4 ответа

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

Тем не только это не очень хорошее решение, вы можете попытаться допустить систему к hasing

echo system("md5sum test.txt");

46d6a7bcbcf7ae0501da341cb3bae27c test.txt

3
ответ дан 5 December 2019 в 09:23
поделиться

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

memory_limit = 16M 

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

max_execution_time = 30

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

2
ответ дан 5 December 2019 в 09:23
поделиться

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

 shell_exec('md5sum -b '. $fileName);
2
ответ дан 5 December 2019 в 09:23
поделиться

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

shell_exec('md5sum -b ' . escapeshellarg($filename));
9
ответ дан 5 December 2019 в 09:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: