Как найти одинаковые файлы с разными именами в PHP

Как найти одинаковые файлы с разными именами в PHP

Допустим ситуацию – при парсинге с сайта-донора на свой сайт перенеслось множество изображений-заглушек, причем у всех файлов разные названия. От сюда вытекает задача найти и удалить все такие файлы.

Данную задачу можно решить путем сравнения хешей файлов с искомым файлом-эталоном. Получить MD5-хеш образцового файла можно с помощью сервиса «Файл в 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);
		}
	}
}
PHP

Результат работы скрипта:

/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');
PHP

Результат:

/docs/uploads/caps.png - удален
/docs/uploads/contents/caps.png - удален
/docs/uploads/contents/caps.png.bak - удален
/docs/uploads/files/caps.png - удален
20.01.2021
3754

Комментарии

, чтобы добавить комментарий.

Другие публикации

Автоматическое сжатие и оптимизация картинок на сайте
Изображения нужно сжимать для ускорения скорости загрузки сайта, но как это сделать? На многих хостингах нет...
28384
+8
Загрузка изображений с превью AJAX + PHP + MySQL
В данной статье представлена упрощенная реализация загрузки изображений с превью через AJAX с сохранением в базу данных...
31136
+22
Использование API Яндекс Диска на PHP
Можно найти множество применений Яндекс Диска на своем сайте, например, хранение бекапов и отчетов, обновление прайсов,...
55854
+20
Загрузка файлов через jQuery AJAX
В преведущей статье был приведен пример отправки файлов через AJAX с помощью плагина «jQuery Form Plugin». Но файлы...
56021
+4
Генерация превьюшек изображений на лету
В движках интернет магазинов, часто при добавлении товара и загрузке его фото, на сервере сразу генерируются превью...
6367
+4
ZIP в PHP (ZipArchive)
Класс ZipArchive позволяет быстро и удобно работать с ZIP-архивам, рассмотрим основные возможности класса.
19576
+6