Допустим ситуацию – при парсинге с сайта-донора на свой сайт перенеслось множество изображений-заглушек, причем у всех файлов разные названия. От сюда вытекает задача найти и удалить все такие файлы.
Данную задачу можно решить путем сравнения хешей файлов с искомым файлом-эталоном. Получить MD5-хеш образцового файла можно с помощью сервиса «Файл в MD5».
Для примера возьмём следующий файл:
Его MD5-хеш равен: 14728910cb850c60c4d989e168709d58
.
Далее понадобится PHP-скрипт, который получит все файлы в директории и сравнит их хеши с эталоном, если хеши совпадут, то файл будет удален.
<?php
header('Content-type: text/html; charset=utf-8');
$path = $_SERVER['DOCUMENT_ROOT'] . '/uploads';
$md5 = '14728910cb850c60c4d989e168709d58';
foreach(glob($path . '/*') as $file) {
if (is_file($file)) {
if (md5_file($file) == $md5) {
echo $file . ' - удален' . PHP_EOL;
unlink($file);
}
}
}
Результат работы скрипта:
/docs/uploads/caps.png - удален
Поиск в подкатегориях
Чтобы расширить поиск на подкатегории, потребуется рекурсивная функция:
<?php
header('Content-type: text/html; charset=utf-8');
function remove_duplicate_files($path, $md5)
{
if ($files = glob($path . '/*')) {
foreach($files as $file) {
if (is_dir($file)) {
remove_duplicate_files($file, $md5);
} else {
if (md5_file($file) == $md5) {
echo $file . ' - удален' . PHP_EOL;
unlink($file);
}
}
}
}
}
$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 - удален