I have a .bat file that encodes an mp3 file on the server side, and I also have a php function that checks if the file exists, and then adds it as an HTML list item. The problem I’m running into – sometimes the mp3 file isn’t done encoding on the server side. If somebody were to try downloading the file while it’s in the process of encoding it will crash the browser.
Can I check to make sure the filesize is finished increasing before listing the item?
Here’s the function that checks if the file exists:
function ListDir($dir_handle,$path) {
global $listing;
echo "<ul>";
while (false !== ($file = readdir($dir_handle))) {
$dir =$path . $file;
if(is_dir($dir) && $file != '.' && $file !='..' && filesize($file) {
$handle = @opendir($dir) or die("Unable to open file $file");
echo "<li>".$dir;
ListDir($handle, $dir);
echo "</li>";
} elseif($file != '.' && $file !='..' && $file !='.htaccess') {
$new_string = ereg_replace("[^A-Za-z.]", "", $file);
echo '<li><a href="'. str_replace('wav', 'mp3', $dir) .'">'.str_replace('wav', 'mp3', $new_string).'</a></li>';
}
}
echo "</ul>";
closedir($dir_handle);
}
Have the bat encode, then move to a final location for a “finished” state, if it doesn’t exist there – it’s not done. This is similar to drew010’s answer except it utilizes the same file, from a working directory to a production directory.
This also prevents it being accessible by any resources until it’s ready which could potentially cause problems.