실제 개발에서 파일 중복 제거는 특히 많은 파일을 저장할 때 일반적인 요구 사항입니다. 중복 파일을 피하면 공간을 절약 할뿐만 아니라 시스템 효율성도 향상시킵니다. PHP는 매우 편리한 기능 MD5_File () 을 제공하여 파일의 해시 계산을 신속하게 구현하여 파일이 복제되었는지 쉽게 결정할 수 있도록 도와줍니다.
MD5_FILE ()은 지정된 파일 컨텐츠의 MD5 해시 값을 계산하기위한 PHP의 내장 함수입니다. 기본 구문은 다음과 같습니다.
string md5_file(string $filename, bool $raw_output = false)
$ filename : 계산할 파일 경로.
$ raw_output : 원시 바이너리 형식으로 출력할지 여부, 기본값은 False 이며 32 비트 16 진수 문자열을 반환합니다.
이 함수는 파일 내용의 고유 한 요약을 반환하며, 이는 두 파일의 내용이 동일했는지 여부를 결정하는 데 매우 적합합니다.
아이디어는 매우 간단합니다.
대상 폴더의 모든 파일을 반복합니다.
md5_file ()을 사용하여 각 파일의 해시 값을 계산하십시오.
배열을 사용하여 나타난 해시 값을 기록하십시오.
파일의 해시 값이 이미 존재하는 경우 중복 파일로 결정되며 삭제 또는 건너 뛰기를 선택할 수 있습니다.
샘플 코드는 다음과 같습니다.
<?php
$directory = '/path/to/your/files'; // 파일 디렉토리
$hashes = []; // 파일의 해시 값을 저장하는 데 사용됩니다
// 디렉토리의 모든 파일을 가로 지르십시오
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
foreach ($files as $file) {
if ($file->isFile()) {
$filePath = $file->getRealPath();
$fileHash = md5_file($filePath); // 파일을 계산합니다MD5
if (isset($hashes[$fileHash])) {
// 중복 파일을 찾으십시오,처리를 수행하십시오,예를 들어, 삭제
echo "중복 파일: {$filePath} 已存在중복 파일 {$hashes[$fileHash]}\n";
// unlink($filePath); // 삭제 해야하는 경우,이 라인을 무결하게합니다
} else {
// 새로운 해시를 기록하십시오
$hashes[$fileHash] = $filePath;
}
}
}
?>
배치 처리 : 대형 디렉토리 파일이 많으면 한 번에 많은 양의 메모리를 소비하지 않도록 배치로 스캔 할 수 있습니다.
캐시 해시 : 일반적으로 사용되는 디렉토리의 경우 해시 결과를 데이터베이스 또는 파일에 캐시하고 다음에 직접 읽어 효율성을 향상시킬 수 있습니다.
교체 알고리즘 : MD5는 매우 효율적이지만 보안이 약합니다. 보안 요구 사항이 높으면 SHA1_FILE () 또는 HASH_FILE ()를 사용하는 것을 고려할 수 있습니다.
PHP 공식 문서 : md5_file ()