我有一个数据库文件,用于保存不同文件夹中的文件的详细信息,字段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
答案 0 :(得分:2)
您可以通过执行以下操作列出目录中的所有文件:
$files = scandir($path);
然后在数据库中查询所需的文件信息,然后遍历它并比较当前的迭代并在$ files中找到该值。
答案 1 :(得分:1)
是的,这是可能的。
由于您的问题中缺乏具体细节,我的回答将同样不具体。
您需要使用glob
,scandir
或类似内容编译文件夹中的文件列表。同样,您需要编译数据库中的文件列表。
比较两者以识别文件夹中的那些,但不在数据库中。
修改强>
您获得.
和..
的输出是因为文件系统具有指向当前(.
)和父(..
)目录的链接。通常,您编写代码来跳过这些值。
例如,拿你的代码:
$files1 = scandir($directory)
if ($files1) {
foreach ($files1 as $value) {
if (in_array($value, ['.', '..'])) continue;
// Your other code...
}
}