PHP에서 파일의 MD5 값을 가져와야 할 때 일반적으로 사용되는 두 기능은 MD5_File () 및 Hash_File ( 'MD5') 입니다. 이 두 기능은 기능이 매우 유사하며 둘 다 지정된 파일의 MD5 해시 값을 반환합니다. 그러나 성능 측면에서, 그것들은 실제로 정확히 일관성이 있습니까? 이 문제는 파일 중복 제거, 파일 무결성 확인 및 CDN (Content Distribution Network)의 캐시 확인과 같은 많은 파일 해시 계산과 관련된 시스템을 개발하는 경우 특히 중요합니다.
파일의 MD5 값을 직접 계산하기 위해 PHP의 내장 단축키 기능입니다.
$md5 = md5_file('/var/www/m66.net/uploads/sample.jpg');
PHP의 내장 MD5 구현을 사용하며 캡슐화 된 단일 기능 기능입니다.
이것은 PHP의 해시 확장에서 제공하는 기능 중 하나이며 해시 알고리즘을 유연하게 지정할 수 있습니다. 'md5'를 매개 변수로 사용하면 함수가 md5_file () 과 동일합니다.
$md5 = hash_file('md5', '/var/www/m66.net/uploads/sample.jpg');
MD5_File () 과 비교하여 Hash_File ()은 SHA1 , SHA256 등과 같은 더 많은 알고리즘을 지원하므로 더 일반적입니다.
두 기능 사이의 성능 차이를 정확하게 평가하기 위해 다음 테스트 스크립트를 작성했습니다.
$filepath = '/var/www/m66.net/uploads/bigfile.zip';
$start = microtime(true);
for ($i = 0; $i < 100; $i++) {
md5_file($filepath);
}
$end = microtime(true);
echo "md5_file(): " . ($end - $start) . " seconds\n";
$start = microtime(true);
for ($i = 0; $i < 100; $i++) {
hash_file('md5', $filepath);
}
$end = microtime(true);
echo "hash_file('md5'): " . ($end - $start) . " seconds\n";
중간 성능 서버에서 약 100MB 파일에서 위의 코드를 실행했으며 결과는 다음과 같습니다.
md5_file(): 4.32 seconds
hash_file('md5'): 4.38 seconds
테스트 결과에서 판단하면 둘 사이의 성능 차이는 매우 작습니다. MD5_File () 은 약간 빠르지 만 차이는 2%미만입니다. 네트워크 및 디스크 캐시와 같은 다양한 요소의 변동을 고려하면 대부분의 응용 분야 에서이 차이를 무시할 수 있습니다.
그러나 hash_file ()은 알고리즘 선택의 유연성을 제공합니다. 향후 해시 알고리즘을 전환 할 수있는 경우 (예 : SHA-256을 대신 사용) Hash_File ()을 사용하는 것은 더욱 확장 가능합니다.
MD5_FILE ()을 선호합니다 () : MD5 만 필요하고 궁극적 인 코드 단순성을 추구하는 경우.
Hash_File () 의 우선 순위 : 프로젝트가 여러 해시 알고리즘을 지원하거나 향후 확장을 계획 해야하는 경우.
일부 극단적 인 환경에서는 특정 PHP 버전 또는 시스템 컴파일 매개 변수가 두 기능의 실행 효율에 영향을 줄 수 있습니다. 응용 프로그램 시나리오가 성능에 매우 민감한 경우 대상 환경에서 자신을 벤치마킹하는 것이 좋습니다.