실제 개발에서 파일 지문 (파일 해시 값)은 파일 무결성을 검증하거나 변조 방지 또는 파일 중복 제거 및 기타 기능을 구현하는 데 사용되는 일반적인 요구 사항입니다. PHP는 강력한 내장 기능 MD5_File ()을 제공하며 파일의 MD5 해시 값을 쉽게 얻을 수 있습니다. scandir () 함수와 결합하여 지정된 디렉토리의 모든 파일의 배치 지문 생성을 쉽게 달성 할 수 있습니다.
이 기사는 MD5_File () 및 Scandir ()를 사용하여 파일 지문의 배치 생성을 달성하고 완전한 샘플 코드를 제공하는 방법을 자세히 소개합니다.
md5_file (String $ filename) : String | false
지정된 파일의 MD5 해시 값을 계산하고 32 비트 문자열을 반환하고 읽기가 실패하면 False를 반환합니다.
scandir (문자열 $ directory, int $ sorting_order = scandir_sort_ascending) : Array | false
지정된 디렉토리에 모든 파일 및 하위 디렉토리를 가져 와서 파일 이름을 포함하는 배열을 반환합니다.
scandir ()를 사용하여 대상 디렉토리에서 모든 파일과 폴더 이름을 가져옵니다.
특수 디렉토리를 필터링하십시오 . 그리고 ... 디렉토리 항목에서.
모든 파일을 반복하고 md5_file ()을 사용하여 MD5 지문을 얻으십시오.
파일 이름과 해당 MD5 값을 배열 또는 출력에 저장합니다.
<?php
$directory = '/path/to/your/files'; // 스캔하려는 디렉토리 경로로 바꾸십시오.
// 디렉토리를 스캔하십시오
$files = scandir($directory);
if ($files === false) {
die('디렉토리 읽기가 실패했습니다');
}
$fileHashes = [];
foreach ($files as $file) {
// 필터링 '.' 그리고 '..'
if ($file === '.' || $file === '..') {
continue;
}
$filePath = $directory . DIRECTORY_SEPARATOR . $file;
// 파일 만 처리합니다,하위 디렉토리를 무시하십시오
if (is_file($filePath)) {
$hash = md5_file($filePath);
if ($hash !== false) {
$fileHashes[$file] = $hash;
} else {
$fileHashes[$file] = '읽지 못했습니다';
}
}
}
// 출력 결과
foreach ($fileHashes as $filename => $md5) {
echo "파일 이름:{$filename},MD5 지문:{$md5}" . PHP_EOL;
}
?>
PHP 스크립트에 디렉토리를 읽을 수있는 권한이 있는지 확인하기 위해 디렉토리 경로를 서버의 실제 경로로 작성해야합니다.
이 샘플 코드는 지정된 디렉토리의 첫 번째 파일 계층 만 처리하며 하위 디렉토리로 다시 반복하지 않습니다. 재귀가 필요한 경우, 재귀 함수 또는 재귀 유효성 검사기 와 함께 구현 될 수 있습니다.
md5_file ()은 작은 파일의 빠른 지문 생성에 적합합니다. 메모리 오버플로를 피하기 위해 해시 값을 계산하기 위해 청크를 사용하는 것이 좋습니다.
때로는 원격 파일에서 지문을 생성해야합니다. md5_file ()은 원격 파일 URL을 지원하지만 원격 서버가 액세스를 제한하면 실패 할 수 있습니다. 계산하기 전에 파일을 로컬 임시 디렉토리로 다운로드하는 것이 좋습니다.
예 (회로도) :