列出不在数据库中的文件

时间:2017-07-09 01:16:53

标签: php mysql

我有一个数据库文件,用于保存不同文件夹中的文件的详细信息,字段flink保存文件的路径。现在我想在文件夹和数据库中运行搜索,并找到未列在文件夹中的文件数据库。这可能使用PHP MYSQL。我编写了一个示例代码,但它似乎没有用。请注意,files文件夹也包含多个子目录。

<?php

include("dbfiles.php");
$directory='files/';
// Query database
$query = 'SELECT `flink` FROM `files`';
$result = mysqli_query($fmysqli, $query);
$db = []; // create empty array
while ($row = mysqli_fetch_row($result))
    array_push($db, $row[0]);
// Check files
$files1 = scandir($directory);
if ( $files1 !== false ) {
    foreach ($files1 as $i => $value) {
        if (in_array($value, $db)) {
            // File exists in both
            echo '   Exists   '.$value;
        } else {
            // File doesn't exist in database
            echo '  Not Exists  '.$value;
        }
    }
} else {
    echo 0;
}
?>

结果是意外的事情BT363文件夹中有一个文件路径如下files/BT363/BT363-Metabolic Engineering and Synthetic Biology-Class Slide--Module 4-admin-admin.pptx

但我得到的输出为

不存在。不存在..不存在BT363

2 个答案:

答案 0 :(得分:2)

您可以通过执行以下操作列出目录中的所有文件:

$files = scandir($path);

然后在数据库中查询所需的文件信息,然后遍历它并比较当前的迭代并在$ files中找到该值。

答案 1 :(得分:1)

是的,这是可能的。

由于您的问题中缺乏具体细节,我的回答将同样不具体。

您需要使用globscandir或类似内容编译文件夹中的文件列表。同样,您需要编译数据库中的文件列表。

比较两者以识别文件夹中的那些,但不在数据库中。

修改

您获得...的输出是因为文件系统具有指向当前(.)和父(..)目录的链接。通常,您编写代码来跳过这些值。

例如,拿你的代码:

$files1 = scandir($directory)

if ($files1) {
    foreach ($files1 as $value) {
        if (in_array($value, ['.', '..'])) continue;

        // Your other code...
    }
}