Solved

Read file names in directory and compare to table

Posted on 2013-01-24
3
218 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
3 Comments
 
LVL 42

Accepted Solution

by:
sedgwick earned 250 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 109

Assisted Solution

by:Ray Paseur
Ray Paseur earned 250 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

The Eight Noble Truths of Backup and Recovery

How can IT departments tackle the challenges of a Big Data world? This white paper provides a roadmap to success and helps companies ensure that all their data is safe and secure, no matter if it resides on-premise with physical or virtual machines or in the cloud.

Question has a verified solution.

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

I imagine that there are some, like me, who require a way of getting currency exchange rates for implementation in web project from time to time, so I thought I would share a solution that I have developed for this purpose. It turns out that Yaho…
Introduction Since I wrote the original article about Handling Date and Time in PHP and MySQL (http://www.experts-exchange.com/articles/201/Handling-Date-and-Time-in-PHP-and-MySQL.html) several years ago, it seemed like now was a good time to updat…
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.

770 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