在Windows,Linux和Mac上为同一图像创build不同的哈希值

我正在用下面的代码创build哈希值,现在发生什么事情是,当我testingWindows本地Xampp服务器上的哈希值我得到的散列值是不同的相同的代码在Linux上运行。

move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $newname); "Stored in: " . "upload/" . $_FILES["file"]["name"]; $image = "upload/" . $newname; $sign = md5(file_get_contents($image)); 

现在我不知道为什么会发生这种情况。 对于我刚刚粘贴的代码。

编辑 :再次打开问题。 我发现的解决scheme只适用于Linux,这意味着Linux和Windows现在给我相同的哈希,但是当从Mac(IOS)上传图像时,它仍然生成不同的哈希。

好吧,我找到了我的问题的答案,我仍然不知道为什么有两个不同的哈希已经生成相同的代码在Windows和Linux

 move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $newname); "Stored in: " . "upload/" . $_FILES["file"]["name"]; $image = "upload/" . $newname; $sign = md5(file_get_contents($image));//This is code block that i was implmenting before solution 

我在这里试过的是我用下面的代码替换了我的上面的代码

  move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $newname); "Stored in: " . "upload/" . $_FILES["file"]["name"]; $image = "upload/" . $newname; $sign = md5_file($image);// Changed here 

从这我觉得哈希值可能是相同的,当生成的md5()但如果这个函数接受文件作为输入,然后哈希值计算不同,我不知道这是一个PHP边问题或真正的操作系统级别的问题,但如果我去与使用md5_file()生成散列的文件我没有得到不同的散列。

Windows和Linux有不同的行结尾, \ r \ n\ n 。 所以当文件被读取时,文件的内容是不同的。

尝试上传没有新行或二进制文件的文本文件。 还要检查读取的字节差异。 它应该等于下一个文件中的新行数。

可能看fopen()有关如何避免行结束问题的页面,但基本上归结为在写和读文件时使用“wb”和“rb”。 这里是fopen页面的链接。

意思是可能不能使用file_get_content(),因为似乎没有选项来设置读取模式。