【问题标题】:Clarifcation - Delete files which are not in a mySQL TABLE澄清 - 删除不在 mySQL TABLE 中的文件
【发布时间】:2017-05-27 20:42:25
【问题描述】:

Delete files which are not in a mySQL TABLE

上面的链接指向一个 Stack Overflow 问题,其答案(我相信)非常接近我正在寻找的答案。我实际上只是在寻求进一步澄清给出的答案。


问题

我正在尝试删除文件夹中的文件(图片文件),前提是它们 不存在于特定的数据库表中。

就像检查文件名以及它们是否存在于表中一样 没关系,但如果不删除它们。

有什么想法吗?

接受的答案

$result = mysql_query("SELECT filename FROM no_delete"); 
while($row = mysql_fetch_assoc($result)) {    
    $do_not_delete[] = $row['filename']; }

foreach(glob("*") as $filename) {
    if (!in_array($filename, $do_not_delete)) {
        //delete them
    }
}

我对 PHP 不太了解,但我不相信他们在这里指定了服务器上的文件夹路径,是吗?我希望能够查看特定文件夹并检查该文件夹中的任何图像是否在任何数据库表中。如果没有,请删除该图像。

【问题讨论】:

    标签: php mysql glob


    【解决方案1】:

    在调用 glob("*") 之前,只需添加一行 chdir("")。然后,您可以搜索要查看的任何目录。我只是在下面的电话中提高了一级。您可以指定您想要的任何目录。在执行删除之前,只需在 $filename 中添加一条 echo 语句,以验证是否正在删除正确的文件。

    chdir("../");
    foreach(glob("*") as $filename) {
    if (!in_array($filename, $do_not_delete)) {
        //delete them
    }
    

    【讨论】:

      【解决方案2】:

      this answer 中所述,第一个参数,即pattern,可以包含相对于脚本当前工作目录的目录路径(可以使用chdir() 更改)或绝对路径。

      考虑this tutorial page的这个例子:

      $dir = "/etc/php5/*";
      
      // Open a known directory, and proceed to read its contents
      foreach(glob($dir) as $file) 
      {
          echo "filename: $file : filetype: " . filetype($file) . "<br />";
      }
      

      【讨论】:

        猜你喜欢
        • 2015-12-20
        • 2019-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多