[英]php - Compare name files in directory with sql row
我试图创建一个脚本,将目录中文件的名称与数据库中的一行进行比较,以获取数据库列表中不存在的所有文件。
到目前为止,我拥有的脚本会打印出目录中的文件,但是当我尝试将值与sql比较时,会重复执行很多结果。
如何比较文件的名称,以便获得数据库中未列出的所有名称文件?
目录:
a.mp4
0.mp4
b.mp4
34.mp4
c.mp4
数据库行:
> Date---------------Name---------------video_path
> 01-01-01----------|jonh--------------|a.mp4
> 02-01-01----------|andrea------------|b.mp4
> 03-01-01----------|faith-------------|c.mp4
结果应该是:
0.mp4
34.mp4
脚本:
$directory = '/var/www/html/EXAMPLE/resources/';
$files1 = scandir($directory, 1);
if ( $files1 !== false )
{
//$filecount = count( $files );
foreach ($files1 as $i => $value) {
$sqlfindTmp = "SELECT * FROM `videos`";
if ($resultTmp = mysqli_query($conn,$sqlfindTmp)) {
while ($row=mysqli_fetch_row($resultTmp)) {
if ($row[3] == $value) {
}else{
echo $value . "<br/>";
}
}
}
}
}
else
{
echo 0;
}
您现在构造代码的方式是,它对每个文件进行SQL查询,并在每个查询中检索整个数据库,这可能现在不成问题,但是当数据集增长时,速度会变慢。 我建议重组代码,以便您首先在数据库中查询所有文件名,然后将其保存到数组中,然后遍历文件,检查它们是否在数据库中。
// Query database
$sqlFind = 'SELECT `video_path` FROM `videos`';
$result = mysqli_query($conn, $sqlFind);
$db = []; // create empty array
while ($row = mysqli_fetch_row($result))
array_push($db, $row[0]);
// Check files
$files1 = scandir($directory, 1);
if ( $files1 !== false ) {
foreach ($files1 as $i => $value) {
if (in_array($value, $db)) {
// File exists in both
} else {
// File doesn't exist in database
}
}
} else {
echo 0;
}
我同意Kalkran的观点,将“ video_path”值放入数组中,然后执行一次。 scandir还将所有文件名返回到数组中。 因此,您可以使用简单的array_diff来获取目录中不在“ video_path”中的文件数组。
所以我会尝试:
$sqlFind = 'SELECT `video_path` FROM `videos`';
$result = mysqli_query($conn, $sqlFind);
$db = []; // create empty array
while ($row = mysqli_fetch_row($result))
array_push($db, $row[0]);
// Check files
$files1 = scandir($directory, 1);
$filesOfInterest = $files1 ? array_diff($files1,$db) : null;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.