md5_file 命令只是用 md5 散列文件的 内容。
如果参考旧的md5_file PHP实现(但原理还是一样)source:
function php_compat_md5_file($filename, $raw_output = false)
{
// ...
// removed protections
if ($fsize = @filesize($filename)) {
$data = fread($fh, $fsize);
} else {
$data = '';
while (!feof($fh)) {
$data .= fread($fh, 8192);
}
}
fclose($fh);
// Return
$data = md5($data);
if ($raw_output === true) {
$data = pack('H*', $data);
}
return $data;
}
因此,如果您使用md5 任何字符串或内容进行哈希处理,您将始终得到与md5_file 相同的结果(对于相同的编码和文件内容)。
在这种情况下,如果您通过 md5 对带有 file_get_content() 的文件内容进行哈希处理,或者如果您使用 md5_file 或者即使您使用与文件内容相同的 md5 命令,您将始终得到同样的结果。
例如,您可以更改一个文件的文件名,对于两个不同的文件,具有相同的内容,它们将产生相同的 md5 哈希。
例如:
考虑两个包含“stackoverflow”(不带引号)的文件,名为 1.txt 和 2.txt
md5_file("1.txt");
md5_file("2.txt");
会输出
73868cb1848a216984dca1b6b0ee37bc
md5("stackoverflow") 或md5(file_get_contents("1.txt")) 或md5(file_get_contents("1.txt")). 将得到完全相同的结果