如何获取不在数据库中的文件

时间:2013-12-08 12:25:18

标签: php mysql

让我尽可能清楚地描述我的问题。 1。我的数据库中有以下表格

 ------------------
 | id |    url    |
 ------------------
 | 1  | file1.mp3 |
 ------------------
 | 2  | file2.mp3 |
 ------------------
 | 3  | file3.mp3 |
 ------------------

第二。我的目录中有以下文件(名为“datas”)

 file1.mp3
 file2.mp3
 file3.mp3
 file4.mp3
 file5.mp3

第三。现在我的问题 我怎么能得到不在数据库中的文件(file4.mp3和file5.mp3)。从数据目录获取所有文件我正在使用以下代码

 $dir = "datas/";
 $files = glob($dir . "*.mp3");
 foreach($files as $file)
   {
     echo $file."<br />";
   }

希望你得到它,我正在寻找...而且提前为你提供帮助。

3 个答案:

答案 0 :(得分:1)

将SQL的结果转换为数组

从glob到数组的结果

比较两个数组并存储array SQLarray glob缺少的内容,反之亦然

答案 1 :(得分:1)

这是一个你可以采用的想法(我正在使用程序mysqli

$con = mysqli_connect("localhost","root","yourpassword","database_name");
$result = mysqli_query($con,"select url from table_name");
$db_files = array();
while($row = mysqli_fetch_array($result))
{
    $db_files[] = 'datas/' . $row['image'];
}
mysqli_close($con);
print_r($db_files);

输出$db_files

Array
(
    [0] => datas/file1.mp3
    [1] => datas/file2.mp3
    [2] => datas/file3.mp3
)

现在是glob

$dir = "datas/";
$files = glob($dir . "*.mp3");
print_r($files);

输出$files

Array
(
    [0] => datas/file1.mp3
    [1] => datas/file2.mp3
    [2] => datas/file3.mp3
    [3] => datas/file4.mp3
    [4] => datas/file5.mp3
)

现在,您可以使用

$missing = array_diff($files, $db_files);
print_r($missing);

输出$missing

Array ( 
    [3] => datas/file4.mp3
    [4] => datas/file5.mp3
)

所以,你可以像

一样循环它
foreach($missing as $missing_file) {
    echo "$missing_file is not in database<br />";
}

<强>输出:

datas/file4.mp3 is not in database
datas/file5.mp3 is not in database

答案 2 :(得分:0)

  1. 首先执行sql连接,查询并使用文件名填充数组$ dbfiles。
  2. 然后将代码的循环修改为:

    foreach($files as $file) { if(!in_array($file,$dbfiles)) { echo $file."<br>; } }

  3. 了解有关 in_array 的更多信息,请参阅参考资料:

    http://www.php.net/manual/en/function.in-array