我有一个PHP脚本,可以将文件上传到我的文件系统上的目录。同时我将文件名存储在MYSQL数据库的字段中。
我看到我的文件比db中的记录多。
查找和删除未链接到数据库记录的所有文件的最短方法是什么?我的想法是从目录中读取每个文件名,在db上运行查询,文件名取自步骤1,如果查询返回0结果,则删除文件。
提前感谢任何建议。
Lelio
答案 0 :(得分:1)
使用scandir
获取文件夹中的所有文件,并使用NOT IN
子句删除不在文件夹中的文件。
$files = implode(scandir('files/'), "', '");
$db->query("DELETE FROM files WHERE file_name NOT IN('{$files}')");
如果要执行相反操作并删除未链接到数据库中记录的文件,可以使用名为unlink
的函数。这将删除该文件。可能有更多优化版本,但这就是我要做的:
$files = implode(scandir('files/'), "', '");
$sth = $db->query("SELECT * FROM files WHERE file_name NOT IN('{$files')");
foreach($sth->fetchAll(PDO::FETCH_OBJ) as $file) {
unlink("files/{$file_name}");
}