0

我有一个 PHP 脚本,可以将文件上传到我的文件系统上的目录。同时,我将文件名存储在 MYSQL DB 的字段中。

我已经看到我的文件比数据库中的记录多。

找出并删除所有未链接到数据库记录的文件的最短方法是什么?我的想法是从目录中读取每个文件名,使用从步骤 1 获取的文件名在 db 上运行查询,以防查询返回 0 结果以删除文件。

提前感谢您的任何建议。

莱利奥

4

1 回答 1

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}");
}
于 2013-09-01T18:13:02.020 回答