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

Check images on server folder against images on database

提问人:Australopythecus 提问时间:12/15/2021 更新时间:1/23/2022 访问量:169

问:

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

足够比较图像文件名,但如果带有 thumnbnails/dates 就很棒了。

谢谢

PHP MySQL Image 文件 比较

评论

1赞 Akina 12/15/2021
执行表中注册的所有文件名并将其保存到文本文件中。然后使用任何 shell 脚本处理此文件并删除未列出的文件。我怀疑是否有任何预制的仪器可以完成这项任务,看起来像是异国情调的仪器。SELECT .. INTO OUTFILE
0赞 Koala Yeung 12/15/2021
请更具体地说,“比较”是什么意思。是否要比较二进制数据?还是只是文件名和文件大小?另外,您的数据库表中有什么?
1赞 Sundar 12/15/2021
分享您的代码片段,您尝试过的内容
0赞 Australopythecus 1/23/2022
@Sundar snnipet 添加了...

答:

0赞 Australopythecus 12/15/2021 #1

文件顶部

   if (isset($_GET['delete'])) {
        unlink($_GET['delete']);
         header('Location: ' . $_SERVER['HTTP_REFERER']);
    }
    
  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;
}

自定义表单,用于选择mysql TABLE和FIELD名称以及SERVER FOLDERS

 <form action="<?php echo $_SERVER['PHP_SELF']; ?>">
      <div class="form-group">
      <select name="tablename">
  <option value="<?php if (isset($_GET['tablename'])) { echo $_GET['tablename']; } ?>"><?php if (isset($_GET['tablename'])) { echo $_GET['tablename']; } ?></option>          
        <option value="TABLENAME1">TABLENAME1</option>
        <option value="TABLENAME2">TABLENAME2</option>
      </select>
      <select name="fieldname">
  <option value="<?php if (isset($_GET['fieldname'])) { echo $_GET['fieldname']; } ?>"><?php if (isset($_GET['fieldname'])) { echo $_GET['fieldname']; } ?></option>          
        <option value="FIELDNAME1">FIELDNAME1</option>
        <option value="FIELDNAME2">FIELDNAME2</option>
      </select>
       <select name="folder">
  <option value="<?php if (isset($_GET['folder'])) { echo $_GET['folder']; } ?>"><?php if (isset($_GET['folder'])) { echo $_GET['folder']; } ?></option>          
        <option value="RELATIVE_PATH_1"</option>
        <option value="RELATIVE_PATH_2"</option>
      </select>                 
      <input type="submit" value="Send" class="btn btn-primary">
      </div>
      </form>

现在,让我们根据表单上的请求,从数据库表上不存在的 FOLDER 中检索图像:

<?php if ((isset($_GET['tablename'])) && (isset($_GET['fieldname'])) && (isset($_GET['folder'])) ) {

    $pdo = new PDO("mysql:host=$servername;dbname=$database", $username, $password, array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ));
    if (isset($_GET['tablename'])) { 
                $table = $_GET['tablename'];
            } 
    $query = $pdo->prepare("SELECT * FROM $table");
    $query->execute();
     $dbimages = $query->fetchAll(PDO::FETCH_ASSOC);
     if ((!$query->rowCount() == 0)) {  
     $arraydbimg = array();
     foreach ($dbimages as $row => $result) {   
     $arraydbimg[] = $result['img'];
                } 
        } 

    if (isset($_GET['folder'])) { 
                $path = $_GET['folder'];
            } else {
                $path = '/your-default/images-folder/'; 
            }
                        $imgList = getImagesFromDir($path);                         
                        $i=0;
                        foreach ($imgList as &$img) {   
                        if (!in_array($img, $arraydbimg)) { ?>
                                <br clear="all">                            
                                <a href="admin.php?delete=<?php echo urlencode($_SERVER['DOCUMENT_ROOT']. $path . $img); ?>">
                            <img src="<?php echo $path . $img ?>" width="150px" height="auto" style="border-radius:0; margin:10px; border:1px #333 solid" /> 
                                </a><?php echo $img; ?>
                        <?  }   } } ?>

点击图片,只是如果你想擦除!

评论

0赞 Australopythecus 12/15/2021
我知道这很脏,但目前已经完成了这项工作。