使用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
}
?>
答案 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的答案!