使用php搜索和删除文章中未使用的图像

时间:2014-02-20 17:11:24

标签: php mysql image directory

我一直在研究一些项目,随着时间的推移它弄乱了我测试它的图像,所以现在我想制作一个脚本,它将搜索文章img标签并找到img名称(artiles存储在mysql中使用属性'text')扫描存储图像的文件夹后,如果它们不在任何文章中,则删除这些图像(未使用的图像)。有没有人这样做过,所以我可以看到一个关于这个案例的例子或任何好方法?

3 个答案:

答案 0 :(得分:2)

以下是您需要做的事情:

  1. 遍历您的文件目录(如果它们在文件系统上):

    if ($handle = opendir('/path/to/files')) {
    echo "Directory handle: $handle\n";
    echo "Entries:\n";
    
    /* This is the correct way to loop over the directory. */
    while (false !== ($entry = readdir($handle))) {
        echo "$entry\n";
    }
    
    /* This is the WRONG way to loop over the directory. */
    while ($entry = readdir($handle)) {
        echo "$entry\n";
    }
    
    closedir($handle);
    }
    

    参考。 http://php.net/readdir

  2. 循环浏览文件(如果它们在数据库中):

    参考。 http://www.php.net/manual/en/mysqli.query.php

  3. 比较文件名(在循环浏览资源时显而易见)。

  4. 删除未使用的图片,如http://www.php.net/unlink

答案 1 :(得分:1)

方法很简单

  1. 查询数据库并获取所有图片网址的列表 - 添加到数组

  2. 循环浏览包含图像的每个文件夹,并在网站上制作每个图像的数组/

  3. here是如何查找一个数组中的所有项目而不是另一个数组中的项目(可能是更具针对您的更好答案 - array_Intesect就是您所需要的。

  4. 使用新数组只需遍历列表并删除文件。

  5. 以上所有内容都可以单独搜索,然后将它们串在一起。

    我建议在尝试之前先备份所有内容!!!!

答案 2 :(得分:0)

我最近遇到了这样的问题:我想删除用户留下的未使用文件/更改个人资料图片但是它们存储在网络服务器上。为了解决这个问题,我使用了这个:

$ images = scandir("上传",1);

foreach ($images as $itemlc) 
{
    $res=mysql_query("SELECT * FROM company WHERE c_logo='$itemlc'"); 
    $count = mysql_num_rows($res); 
    $res2=mysql_query("SELECT * FROM users WHERE u_logo='$itemlc'");
    $count2 = mysql_num_rows($res2); 
    if($count == 1)
    {
    echo $itemlc; echo " exists <br><br>"; 
    }
    else if ($count2 == 1)
    {
    echo $itemlc; echo " exists <br><br>"; 
    }
    else{ $file_path = 'uploads/'; $src=$file_path.$itemlc; @unlink($src); }
}

希望如果有人需要这个,这会有所帮助!