我们有Magento的进口产品供应商表。
问题:
供应商工作表中的图像位于不同的文件夹中但具有相同的图像
喜欢:
folder1/image.jpg
folder2/image.jpg
现在,当我们在Magento中导入时,所有图像都在同一个文件夹中。每个产品都有相同的图像。
我怎样才能解决这个问题?
答案 0 :(得分:0)
如果图像的名称总是相同(如在您的示例中),那么您可以简单地存储您处理的所有图像名称(不包括目录),并检查它是否在该数组中
否则,您将不得不比较图像,如下所示。此代码假定您有一个名为$filenames
的每个图像的文件名数组。
$imageHashes = []; //Define an array where hash of each image will be stored
$uniqueFiles = []; //The array which will contain only image files that are unique.
for ($i=0;$i<count($filenames);$i++) { //Loop through the filenames
$hash = md5_file($filenames[$i]); //Get the hash of the image
if (!in_array($hash,$imageHashes)) { //If the imageHashes array does not contain the hash, then this is a new image
$imageHashes[] = $hash; //Add the hash to the imageHashes array
$uniqueFiles[] = $filenames[$i]; //Add the filename to the list of filenames for unique images.
}
}
这是有效的,因为散列算法应该为放入其中的任何内容生成不同的散列。虽然 md5
对于长时间存储密码一直不安全 ,但在此上下文中使用它仍然完全没问题。
因此,每次循环运行时,它都会获取当前文件名的文件哈希值,然后检查数组中是否已存在该哈希值。如果确实如此,则没有任何反应(请记住,同一个文件应始终具有相同的散列,因此图像的相同克隆也应共享相同的散列),因为已经找到并处理了该图像。否则,我们将哈希添加到$imageHashes
表中(以便我们可以在下一次传递中与它进行比较),并将文件名添加到$uniqueFiles
数组中,以便我们以后可以使用它。 / p>
在此过程结束时,我们应该有一个数组,其中只包含每个图像第一次出现的文件名。
您可以在PHP Manual中找到有关md5_file
的更多信息;
有一篇很棒的StackOverflow帖子here,讨论了使用PHP比较两个图像文件的其他方法。