开发者

adding folders that are empty to disallowed array

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).

I included the full script below so that you can see how the disallowed array fits in.

Would someone be able to help with this?

Thanks,

Nick

<?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('//','&raquo;'), array('/', '/'), $dirty); 

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

    else
        $dirty=str_replace('&raquo;', '/', $dirty);


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

    //return
    return $dirty;
}

function makelink($linkme, $debug=false){
    $link=str_replace('&raquo;', '/', $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开发者_Python百科);
    }

    //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 &raquo; '.$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('', '&raquo;', '&raquo;'), $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('', '&raquo;', '&raquo;'), $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.'&raquo;'.$read.'|';
                else $fileinfo['folders'].=$read.'|';
                $fileinfo['folderpaths'].=$directory.'/|';

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

            }

        }

    }
    closedir($dir); 

    return $fileinfo;
}

?>


Use glob('somefolder/*.mp3') to test if there are mp3s in a folder. The function will return an array, so if it's empty the folder does not contain any mp3 files.


You could try glob() since it's flexible and a little bit more secure than building up a 'valid array'.

foreach (glob($dir . "/*.mp3") as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜