?
Solved

Read file names in directory and compare to table

Posted on 2013-01-24
3
Medium Priority
?
222 Views
Last Modified: 2013-02-03
Hi,
In my application a user may upload a series of audio files and I need to ensure before they are put to use all of them are actually in the directory and are named appropriately. The user may have additional files in the directory which doesn't matter. I just need to ensure the required ones are there. Also the user may upload one of 2 different formats ie: .wav or .mp3

So if I had a table with the required names in my db ie: 'audio_table'
In that table I have the following names of audio files:
hello
goodbye
thanks

Any idea of the code required to check each filename in the directory and compare it to the filenames in the table, see if there is a match and see that the file extension in the directory is either .mp3 or .wav

Kind of like:
foreach audio file in the db table, read directory file names, find if match, check if .wav or .mp3
if all there return true
if missing return missing filenames array so I can echo back missing files

Thanks for any help.
0
Comment
Question by:tjyoung
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 42

Accepted Solution

by:
sedgwick earned 1000 total points
ID: 38813732
check this code:

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
$filenames= array();


if ($handle = opendir('/path/to/audio_files')) {
  while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
array_push($filenames, $entry);            
        }
    }
    closedir($handle);
}

$arrNames = join(',',$filenames);
$extensions = "mp3, wav"

$result = mysql_query("SELECT * FROM audio_table WHERE filename IN ($arrNames) and   SUBSTRING_INDEX(filename,'.',-1) in ($extensions) ");

if (!$result) {
    echo 'Could not run query: ' . mysql_error();
    exit;
}

echo 'Connected successfully';
mysql_close($link);

while($row = mysql_fetch_array($result))
  {
  echo $row['filename'];
  echo "<br />";
  }

Open in new window

0
 
LVL 111

Assisted Solution

by:Ray Paseur
Ray Paseur earned 1000 total points
ID: 38814128
When you refer to having a "table" I would understand that you mean you have a PHP array. You can use these functions to make the comparison.
http://php.net/manual/en/function.scandir.php
http://php.net/manual/en/function.array-intersect.php
0
 
LVL 9

Expert Comment

by:crazedsanity
ID: 38818822
It might be useful to store a hash (e.g. MD5) of the file in the database to ensure it hasn't been tampered with.  Once you've performed the steps Ray_Paseur gave, I'd add a "foreach" loop to test the file for their MD5 value, and do something intelligent if there's a mismatch (e.g. delete the file).
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

By, Vadim Tkachenko. In this article we’ll look at ClickHouse on its one year anniversary.
In this article, I’ll talk about multi-threaded slave statistics printed in MySQL error log file.
The viewer will learn how to count occurrences of each item in an array.
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…
Suggested Courses

800 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question