@KenKup11

Можно ли как то вычислить контрольную сумму для папки?

Добрый день.
Появилась необходимость посчитать контрольную сумму для папки (например MD5).
В гугле не удалось найти ответ (может плохо искал).
Возможно ли это вообще сделать?
  • Вопрос задан
  • 940 просмотров
Решения вопроса 2
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
function getMd5DirHash(string $dir): string
{
    $array = [];
    $dir = realpath($dir); 
    $fileSPLObjects =  new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::CHILD_FIRST);
    foreach($fileSPLObjects as $fullFileName => $fileSPLObject ) {
        if ($fileSPLObject->isFile()) {
            $array[] = $fullFileName;
        }
    }
    $md5 = array_map('md5_file', $array);

    return md5(implode('', $md5));
}

расписал чтоб понятнее было, можно улчшить
$array[] = md5_file($fullFileName);
#$md5 = array_map('md5_file', $array);

return md5(implode('', $array));
Ответ написан
@rPman
Запакуй папку tar-ом, без сохранения архива, через пайпы передай в md5sum, получишь результат
$md5=explode(' ',`tar -cf - /path/to/dir | md5sum`)[0];
upd. осторожно, используй относительные пути а не прямые, так как этот путь файлов так же хешируется

на php делать все будет тупо сложнее и медленнее

p.s. новые версии tar поддерживают --order=name чтобы гарантировать хоть какой то порядок файлов
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы