Я записал сценарий, который прочитывает все файлы в каталоге и возвращает хеш 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.
Тем не только это не очень хорошее решение, вы можете попытаться допустить систему к hasing
echo system("md5sum test.txt");
46d6a7bcbcf7ae0501da341cb3bae27c test.txt
Если вы достигли предела времени выполнения или максимального времени выполнения, PHP должен выдать соответствующее сообщение об ошибке. Проверьте свои журналы ошибок. Если вы достигли предела, вы можете установить максимальные значения для использования памяти PHP и времени выполнения в вашем файле php.ini:
memory_limit = 16M
установит максимальное использование памяти на 16 мегабайт. Для максимального времени выполнения:
max_execution_time = 30
устанавливает максимальное время выполнения 30 секунд.
вы можете добиться этого с помощью командной строки
shell_exec('md5sum -b '. $fileName);
Обязательно используйте команду escapeshellarg ( http://us3.php.net/manual/en/function.escapeshellarg.php ), если вы решите использовать вызов shell_exec () или system (). То есть,
shell_exec('md5sum -b ' . escapeshellarg($filename));