PHP에서 MD5_FILE () 함수는 지정된 파일의 MD5 해시 값을 계산하는 데 사용되며, 일반적으로 파일의 무결성을 확인하는 데 사용됩니다. 이론적으로 MD5_File () 함수를 사용하여 동일한 파일을 여러 번 계산해야하며 동일한 해시 값을 얻어야합니다. 그러나 생성 된 해시 값이 매번 다르다는 것을 알게되면 다음과 같은 이유로 인해 발생할 수 있습니다.
가장 일반적인 이유는 계산 된 파일 자체의 내용이 변경되기 때문입니다. 예를 들어, 로그 파일, 캐시 파일, 임시 파일 등은 프로그램이 실행 중일 때 파일 내용을 작성하거나 수정할 수 있으므로 매번 다른 MD5 값이 계산됩니다.
<?php
$hash = md5_file("http://m66.net/path/to/file.txt");
echo "MD5: " . $hash;
?>
파일이 동적으로 생성되거나 자주 업데이트되면 해시 값은 자연스럽게 일치하지 않습니다.
md5_file ()은 파일 경로 또는 URL을 수락 할 수 있습니다 ( allow_url_fopen을 활성화해야 함). API 인터페이스에서 반환 된 파일 컨텐츠 또는 매개 변수가있는 일부 URL과 같이 컨텐츠를 동적으로 생성하는 URL을 전달하면 요청할 때마다 컨텐츠가 다를 수 있으므로 해시 값이 다릅니다.
<?php
$url = "http://m66.net/api/getfile.php?timestamp=" . time();
$hash = md5_file($url);
echo "MD5: " . $hash;
?>
위의 예에서 URL에는 타임 스탬프 매개 변수가 있으며 요청할 때마다 컨텐츠가 다릅니다.
URL을 통해 파일을 읽을 때 불안정, 부분 데이터 손실 또는 인코딩 변경 사항이 네트워크 전송 중에 발생할 수있어 실제 읽기 파일의 다른 내용 및 다른 해시 값이 발생합니다.
파일을 읽거나 파일을 완전히 읽을 때 PHP가 허가 문제를 만난 경우 일부 내용 또는 오류 메시지가 반환되어 해시 결과에 영향을 줄 수 있습니다.
<?php
$file = "/path/to/file.txt";
if (is_readable($file)) {
$hash = md5_file($file);
echo "MD5: " . $hash;
} else {
echo "파일을 읽을 수 없습니다";
}
?>
파일 권한과 경로가 올바른지 확인하는 것이 매우 중요합니다.
파일이 텍스트 파일, 다른 인코딩 (예 : BOM 및 BOM이없는 UTF- 8 ) 또는 Newline 문자 ( Wind
요약하면, MD5_File () 에 의해 반환 된 해시 값이 매번 다른 경우, 먼저 읽기 파일 컨텐츠가 안정적인지 확인하고, 읽기 경로가 동일한 고정 리소스를 가리키고, 네트워크 및 권한 문제를 확인하고, 파일 콘텐츠의 인코딩 및 형식이 일관되는지 여부에주의를 기울입니다.