根据数据库上的图像检查服务器文件夹上的图像

Posted

技术标签:

【中文标题】根据数据库上的图像检查服务器文件夹上的图像【英文标题】:Check images on server folder against images on database 【发布时间】:2022-01-18 08:48:46 【问题描述】:

我想知道是否有任何预先制作的东西可以将服务器上的单个图像文件夹与 mysql 数据库上的字段进行比较,以从服务器上取消链接/删除不需要的文件并保持干净。

足够比较图像文件名,但如果带有缩略图/日期,那就太好了。

谢谢

【问题讨论】:

执行SELECT .. INTO OUTFILE,将表中注册的所有文件名保存到文本文件中。然后使用任何 shell 脚本处理此文件并删除未列出的文件。 PS。我怀疑是否存在任何看起来像异国情调的任务的预制仪器。 请更具体地说明“比较”是什么意思。你想比较二进制数据吗?或者只是文件名和文件大小?另外,您的数据库表中有什么? 分享你的代码 sn-p 你尝试了什么 【参考方案1】:

函数

 if (isset($_GET['delete'])) 
    unlink($_GET['delete']);




 function getImagesFromDir($path) 
    $images = array();
    if ( $img_dir = @opendir($_SERVER['DOCUMENT_ROOT'].$path) ) 
        while ( false !== ($img_file = readdir($img_dir)) ) 
            // checks for gif, jpg, png
            if ( preg_match("/(\.gif|\.jpg|\.png)$/", $img_file) ) 
                $images[] = $img_file;
            
        
        closedir($img_dir);
    
    return $images;

剩下的代码

<?php  
$servername = "localhost";
$db_name="DATABASE";
$username = "USER";
$password = "PASS";
    $pdo = new PDO("mysql:host=$servername;dbname=$db_name", $username, $password, array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ));
    $query = $pdo->prepare("SELECT * FROM `tweets`");
    $query->execute();
    
      $images = $query->fetchAll(PDO::FETCH_ASSOC);
      if ((!$query->rowCount() == 0))  

                        $path = '/path-to-images/'; 
                        $imgList = getImagesFromDir($path);                         
                        $i=0;
                        foreach ($imgList as &$img)                        
                        ?>                            
                         <div>                            
    <a href="admin.php?delete=<?php echo $_SERVER['DOCUMENT_ROOT']. $path . $img; ?>">
    <img src="<?php echo $path . $img ?>"   style="border-radius:0; margin:10px; border:1px #333 solid" /> 
    </a>
                         <?php foreach ($images as $row => $result)                                                             
                             if ($result['img']===$img)  ?>        
                        <?php echo '<b>'.$result['img'].'</b><br>'; ?>
                            <?php   else  ?>                            
                    
                    <?php    ?>                        
                    <?php     ?>
                    <?php    ?>
                         
                         
                          </div>                                                
                                                                                                                                        
                         
                                                                    
                             <?php $i++;
                                ?> 

enter code here

【讨论】:

我知道它很脏,但现在可以胜任了。

以上是关于根据数据库上的图像检查服务器文件夹上的图像的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 上的文件中存储更多数量的图像

Django Rest Framework - 提交的数据不是文件。检查表单上的编码类型

身体上的动态背景图像 (ASP.NET)

重命名服务器目录上的图像文件

使用 Python 检查远程 SSH 服务器上的文件是不是存在

使用 nginx 和流星上传和访问服务器上的图像