在PHP中从远程位置散列图像

时间:2015-09-15 13:49:27

标签: php

使用PHP脚本,我想比较两个图像。其中一个图像位于我的服务器上,一个位于外部网站上。我试图将两个图像的哈希值相互比较。不幸的是,这仅在两个图像保存在我的服务器上时才有效。我怎样才能做到这一点?

<?php

$localimage = sha1_file('image.jpg');

$imagelink = file_get_contents('http://www.google.com/image.jpg');  
$ext_image = sha1_file($imagelink);

if($localimage == $ext_image){
    //Do something
}

?>

2 个答案:

答案 0 :(得分:6)

如果您使用的是php 5.1 + (我希望如此),您可以写一下:

<?php

$localimage = sha1_file('image.jpg');
$ext_image = sha1_file('http://www.google.com/image.jpg');

if($localimage == $ext_image){
    //Do something
}

?>

因为sha1_file可以在远程包装器上运行。

https://secure.php.net/manual/en/function.sha1-file.php

的PHP文档中引用
  

5.1.0更改了使用streams API的功能。这意味着您可以将它与包装一起使用,例如sha1_file(&#39; http://example.com/ ..&#39;)

答案 1 :(得分:4)

您没有在第二次通话中正确使用sha1_file()

sha1_file()期望参数为文件名,并且您正在使用内存缓冲区。所以你有两个选择。

首先使用当前代码,将文件保存到临时位置并使用sha1_file()

<?php
   $localimage = sha1_file('image.jpg');

   $imagelink = file_get_contents('http://www.google.com/image.jpg');  
   file_put_contents('temp.jpg', $imagelink);
   $ext_image = sha1_file('temp.jpg');

   if($localimage == $ext_image){
      //Do something
   }
?>

或使用sha1()代替sha1_file() $imagelink

的内容
<?php
   $localimage = sha1_file('image.jpg');

   $imagelink = file_get_contents('http://www.google.com/image.jpg');  
   $ext_image = sha1($imagelink);

   if($localimage == $ext_image){
      //Do something
   }
?>

实际上可能有3个选项,请参阅@ Flunch的答案!