Jump to content

adding folders that are empty to disallowed array


nickharambee

Recommended Posts

Hi,

 

I am using an array which allows me to prevent particular subfolders from being included in a script that generates an audio playlist.  It looks like this:

 

$disallowed=array('..', '.', 'simon', 'steve');

 

I would like to find a way of disallowing any folders which are empty, or, perhaps, better still, disallowing folders that do not have any MP3s in them (in case the script interprets folders as not empty if they contain system files which are automatically generated).

 

Would someone be able to help with this?

 

Thanks,

 

Nick

Link to comment
Share on other sites

I have an allowed array too, which specifies filetypes, i.e.

 

$allowedfiletypes=array('mp3');

 

but this still adds empty folders to the folder list that is generated.

 

Here is the full script:

 


<?php

/*
* =====================
* FUNctions
* =====================
*/

/*
* array subvalue sort -- from: http://www.firsttube.com/read/sorting-a-multi-dimensional-array-with-php/
*
* this function lets me sort the multidimensional array containing song/artist information by the file modified time, a subvalue
*/
function subval_sort($a,$subkey) {
foreach($a as $k=>$v) {
	$b[$k] = strtolower($v[$subkey]);
}
arsort($b); //change this to 'asort' for ascending
foreach($b as $key=>$val) {
	$c[] = $a[$key];
}
return $c;
}

/*
* function written to clean up my messy code (too many slashes ... display '/' as '&raquo' (>>) for user friendliness )
*/
function clean($dirty, $type='general', $debug=false){

//debug
if($debug==true)
	echo'<br />value before clean: '.$dirty.' (first character: '.substr($dirty, 0, 1).')';

/*
* General cleaning -- remove '/' at front and end
*/
if(substr($dirty, 0, 1)=='/'){
	//echo'<br />found leading /';
	$dirty=substr($dirty, 1, strlen($dirty)-1);
}

if(substr($dirty, -1)=='/')
	$dirty=substr($dirty, 0, strlen($dirty)-1);


//prepare the subfolder display information by type
if($type=='link')
	$dirty=str_replace(array('//','»'), array('/', '/'), $dirty);	

else if($type=='display')
	$dirty=str_replace(array('///','//','/'), array('»','»', '»'), $dirty);	

else
	$dirty=str_replace('»', '/', $dirty);


if($debug==true)echo' | after clean: '.$dirty;

//return
return $dirty;
}

function makelink($linkme, $debug=false){
$link=str_replace('»', '/', $linkme);
$link=str_replace('//', '/', $link);
return $link;

}

function recursiveGetSongs($directory, $fileinfo, $useID3, $getID3, $parent=null, $debug, $filtered=null){

/*
* configure function here:
*
* _usage_
*	> the disallowed array should include any folders or files you explicitely don't want displayed
*	> the allowedfiletypes array should include any file extentions you want to play
*/
$disallowed=array('..', '.', 'simon', 'steve');
$allowedfiletypes=array('mp3');

if($filtered!=null){
	$disallowed=array_merge((array)$filtered, (array)$disallowed);
}

//simple error fix
if($directory=='./')
	$directory='.';

//debug
if ($debug==true)echo'Dir to open: '.$directory;

//open directory
$dir = opendir($directory); 

while ($read = readdir($dir)) 
{

	//if ( !in_array($read, $disallowed) AND ( $filter!=null AND in_array($read, $filter) ) )
	if ( !in_array($read, $disallowed) )
	{ 
		if($debug==true)echo $read.'<br />';
		//if is not dir, handle file
		if ( !is_dir($directory.'/'.$read) ){

			if($debug==true)echo '^^ not dir | dir: '.$directory.'<br />';

			if( in_array(substr($read, -3, 3), $allowedfiletypes) ){

				if($useID3==TRUE){

				//store id3 info
				$FullFileName = realpath($directory.'/'.$read);
				if($debug==TRUE)echo'<br />FFN » '.$FullFileName;
				$ThisFileInfo = $getID3->analyze($FullFileName);
				getid3_lib::CopyTagsToComments($ThisFileInfo);
				$fileinfo[$read]['artist']=$ThisFileInfo['comments_html']['artist'][0];
				$fileinfo[$read]['title']=$ThisFileInfo['comments_html']['title'][0];
				$fileinfo[$read]['album']=$ThisFileInfo['comments_html']['album'][0];
				$fileinfo[$read]['filename']=$ThisFileInfo['filename'];
				$fileinfo[$read]['modified']=date ("YmdHis", filemtime($directory.'/'.$read));

				if($debug==true)
					echo "<br />$read was last modified: " . date ("YmdHis", filemtime($directory.'/'.$read));

				$fileinfo[$read]['path']=$directory.'/'.$read;
				if($debug==true)echo'<span style="margin-left: 10px;">path:'.$fileinfo[$read]['path'].' > fn: '.$fileinfo[$read]['filename'].'</span><br /><br />';

				if($parent!=null)
					$fileinfo[$read]['from']=str_replace(array('./', '//', '/'), array('', '»', '»'), $directory); // was =$parent

				else
					$fileinfo[$read]['from']='root'; //testing this

				if($debug==true)echo'<br />'.$fileinfo[$read]['from'].'<br />';

				//debug
				//echo$ThisFileInfo['filename'].'<br />';
				}
				else{
					//store filename
					$fileinfo[$fileinfo['count']]['path']=$directory.'/'.$read;
					$fileinfo[$fileinfo['count']]['fn']=$read;
					if($parent!=null)
						$fileinfo[$fileinfo['count']]['from']=str_replace(array('./', '//', '/'), array('', '»', '»'), $directory);

					$fileinfo[$fileinfo['count']]['modified']=date ("YmdHis", filemtime($directory.'/'.$read));
					//$fileinfo[$fileinfo['count']]=date ("YmdHis", filemtime($directory.'/'.$read));
				}

				//inc counter
				$fileinfo['count']=$fileinfo['count']+1; // had ++ and it didn't work
			}
			else
				;//do nothing
		}

		//else, must be a folder (as determined above), recurse folder
		else{

			//debug
			if($debug==true)echo '^^ DIR<br />';

			//capture subfolders in case they are needed
			if($parent!='')$fileinfo['folders'].=$parent.'»'.$read.'|';
			else $fileinfo['folders'].=$read.'|';
			$fileinfo['folderpaths'].=$directory.'/|';

			$fileinfo=recursiveGetSongs($directory.'/'.$read, $fileinfo, $useID3, $getID3, $parent.'/'.$read, $debug, $filtered);

		}

	}

}
closedir($dir); 

return $fileinfo;
}

?>

 

 

 

Link to comment
Share on other sites

Mmmh.  I am not too clever with PHP (the script was written mostly by another).

 

Would the allowed folder array just allow folders that have mp3s in?  Because the folders that have MP3s in could be named anything (every user who logs in to the site gets a folder which is generated by their login), I couldn't include folders by name.

 

The issue is that, because folders are generated on login, empty folders are getting added to the folder list array, and I only want them to show up once users have uploaded MP3 files to them.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.