Clarifcation - 删除不在mySQL TABLE中的文件

时间:2017-05-27 20:42:26

标签: php mysql glob

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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 />";
}