使用 PHP 你怎么知道图像是否已经存在于你的服务器上而不考虑名称?

Using PHP how can you tell if the image already exists on your server regardless of name?

我见过几个网站,如果您上传图片并且服务器上已经存在相同的图片,他们将拒绝提交。使用 PNG 有没有一种简单的方法可以根据大量图像文件夹检查一张图像?

http://www.imagemagick.org/discourse-server/viewtopic.php?t=12618

我确实用 imagemagick 找到了这个,但我正在寻找一对多而不是百万分之一

图像的详细信息可能保存在数据库中;而图像存储在文件系统中。该数据库可能有一个哈希列,用于存储图像文件本身的 md5 哈希值,该哈希值是在首次上传图像时计算的。上传新图像时,它会计算该图像的哈希值,然后检查数据库中是否有任何其他图像细节具有匹配的哈希值。如果不是,它将使用该哈希值存储新上传的图像;否则它可以用之前上传的详细信息进行响应。如果散列列在 table 中编制索引,那么此检查非常快。

您可以将文件内容转换为 sha1。这将为您提供一种方法来识别两张图片严格相同。

http://php.net/manual/fr/function.sha1-file.php

然后将其保存到 NFS 中,或使用某种数据库来测试哈希是否已经存在。

如果我没有正确理解你的问题。 你想知道一个特定的图像是否存在于一个有这么多图像的目录中,对吧?如果是这样,请查看解决方案:

    <?php

        // CREATE A FUNCTION WHICH RETURNS AN ARRAY OF ALL IMAGES IN A SPECIFIC FOLDER
        function getAllImagesInFolder($dir_full_path){
            $returnable     = array();
            $files_in_dir   = scandir($dir_full_path);
            $reg_fx         = '#(\.png|\.jpg|\.bmp|\.gif|\.jpeg)#';
            foreach($files_in_dir as $key=>$val){
                $temp_file_or_dir = $dir_full_path . DIRECTORY_SEPARATOR . $val;
                if(is_file($temp_file_or_dir) && preg_match($reg_fx,  $val) ){
                    $regx_dot_wateva            = '/\.{2,4}$/';
                    $regx_dot                   = '/\./';
                    $regx_array                 = array($regx_dot_wateva, $regx_dot);
                    $replace_array              = array("", "_");
                    $return_val                 = preg_replace($regx_array, $replace_array, $val);
                    $returnable[$return_val]    = $temp_file_or_dir ;
                }else if(is_dir($temp_file_or_dir) && !preg_match('/^\..*/', $val) ){
                    getFilesInFolder($temp_file_or_dir);
                }
            }
            return $returnable;
        }

        // CREATE ANOTHER FUNCTION TO CHECK IF THE SPECIFIED IMAGE EXISTS IN THE GIVEN DIRECTORY.
        // THE FIRST PARAMETER SHOULD BE THE RESULT OF CALLING THE PREVIOUS FUNCTION: getAllImagesInFolder(...)
        // THE SECOND PARAMETER IS THE IMAGE YOU WANT TO SEARCH WHETHER IT EXISTS IN THE SAID FOLDER OR NOT
        function imageExistsInFolder($arrImagesInFolder, $searchedImage){
            if(!is_array($arrImagesInFolder) && count($arrImagesInFolder) < 1){
                return false;
            }
            foreach($arrImagesInFolder as $strKey=>$imgPath){
                if(stristr($imgPath, $searchedImage)){
                    return true;
                }
            }
            return false;
        }

        // NOW GET ALL THE IMAGES IN A SPECIFIED FOLDER AND ASSIGN THE RESULTING ARRAY TO A VARIABLE: $imgFiles
        $imgFolder      = "/path/to/directory/where/there/are/images";
        $arrImgFiles    = getAllImagesInFolder($imgFolder);
        $searchedImage  = "sandwich.jpg";       //<== OR EVEN WITHOUT THE EXTENSION, JUST "sandwich"

        // ASSUMING THE SPECIFIC IMAGE YOU WANT TO MATCH IS CALLED sandwich.jpg
        // YOU CAN USE THE imageExistsInFolder(...) FUNCTION TO RETURN A BOOLEAN FLAG OF true OR false
        // DEPENDING ON IF IT DOES OR NOT.

        var_dump($arrImgFiles);
        var_dump( imageExistsInFolder($arrImgFiles, $searchedImage) );