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

noo*_*php 9 php linux windows hash ios

我正在使用以下代码创建哈希值,现在发生的情况是,当我在Windows本地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));
Run Code Online (Sandbox Code Playgroud)

现在我不知道为什么会这样.对于我上面粘贴的相同代码.

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

noo*_*php 8

好的,我找到了回答我的问题,我仍然不知道为什么在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
Run Code Online (Sandbox Code Playgroud)

我在这里尝试的是用以下代码替换上面的代码

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

从这个我认为哈希值可能在生成时相同,md5()但如果此函数接受文件作为输入,则哈希值的计算方式不同,我不知道这是一个PHP方面问题还是真正的操作系统级别问题,但如果我继续使用md5_file()for生成文件的哈希我没有得到不同的哈希.


Sha*_*d D 6

Windows和Linux具有不同的行结尾,\ r \n\n.因此,当读取文件时,文件的内容是不同的.

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