Как найти одинаковые файлы с разными именами в PHP
Допустим ситуацию – при парсинге с сайта-донора на свой сайт перенеслось множество изображений-заглушек, причем у всех файлов разные названия. От сюда вытекает задача найти и удалить все такие файлы.
Для примера возьмём следующий файл:
Его MD5-хеш равен:
14728910cb850c60c4d989e168709d58
Далее понадобится PHP-скрипт, который получит все файлы в директории и сравнит их хеши с эталоном, если хеши совпадут, то файл будет удален.
<?php $path = $_SERVER['DOCUMENT_ROOT'] . '/uploads'; $md5 = '14728910cb850c60c4d989e168709d58'; echo $file . ' - удален' . PHP_EOL; } } }
Результат работы скрипта:
/docs/uploads/caps.png - удален
Поиск в подкатегориях
Чтобы расширить поиск на подкатегории, потребуется рекурсивная функция:
<?php function remove_duplicate_files($path, $md5) { foreach($files as $file) { remove_duplicate_files($file, $md5); } else { echo $file . ' - удален' . PHP_EOL; } } } } } $path = $_SERVER['DOCUMENT_ROOT'] . '/uploads'; remove_duplicate_files($path, '14728910cb850c60c4d989e168709d58');
Результат:
/docs/uploads/caps.png - удален
/docs/uploads/contents/caps.png - удален
/docs/uploads/contents/caps.png.bak - удален
/docs/uploads/files/caps.png - удален