我一直在研究一些项目,随着时间的推移它弄乱了我测试它的图像,所以现在我想制作一个脚本,它将搜索文章img标签并找到img名称(artiles存储在mysql中使用属性'text')扫描存储图像的文件夹后,如果它们不在任何文章中,则删除这些图像(未使用的图像)。有没有人这样做过,所以我可以看到一个关于这个案例的例子或任何好方法?
答案 0 :(得分:2)
以下是您需要做的事情:
遍历您的文件目录(如果它们在文件系统上):
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://www.php.net/unlink
答案 1 :(得分:1)
方法很简单
查询数据库并获取所有图片网址的列表 - 添加到数组
循环浏览包含图像的每个文件夹,并在网站上制作每个图像的数组/
here是如何查找一个数组中的所有项目而不是另一个数组中的项目(可能是更具针对您的更好答案 - array_Intesect
就是您所需要的。
使用新数组只需遍历列表并删除文件。
以上所有内容都可以单独搜索,然后将它们串在一起。
我建议在尝试之前先备份所有内容!!!!
答案 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); }
}
希望如果有人需要这个,这会有所帮助!