2011-04-04 33 views
1

我正在使用一个数组,它允许我阻止特定的子文件夹被包含在生成音频播放列表的脚本中。它看起来像这样:将空的文件夹添加到不允许的数组中

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

我想找个不允许它们是空的,或者也许是更好的任何文件夹的方式,禁止没有在他们的任何MP3音乐文件夹(如果脚本解释如果文件夹包含自动生成的系统文件,则它们不为空)。

我包括下面,这样就可以看到不允许的数组如何结合使用。

会有人能够帮助这个完整的脚本?

感谢,

尼克

<?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); 
    } 

    //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; 
} 

?> 
+0

当然可以。我会再看一遍。上次我看,虽然没有工作的答案!但现在可能还有一两个接受...... – Nick 2011-04-04 10:35:21

回答

0

使用glob('somefolder/*.mp3')测试,如果有一个文件夹中的MP3。该函数将返回一个数组,所以如果它是空的,该文件夹不包含任何mp3文件。

+0

谢谢,但我不知道我将如何包含这是我的脚本,我现在已经在我原来的帖子中包含了这些脚本。 – Nick 2011-04-04 10:40:41

0

你可以尝试glob(),因为它比建立“有效数组”更加灵活和安全一点点。

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

谢谢,但我不知道我将如何包括这是我的脚本,我现在已经包含在我的原始文章中。 – Nick 2011-04-04 10:40:13

+0

@Nick从'$ dir = opendir('...到结尾处删除整个目录的阅读部分。你需要的只是实际的ID3阅读片段。试试我的片段到一个目录中,然后你就会知道你得到了什么。在我的代码片段中,'$ filename'等于你的'$ read'变量,如果我是对的。 – fabrik 2011-04-04 10:46:25

+0

谢谢。我尝试删除从'$ dir = opendir('through到'closedir($ dir);'的所有内容,将你的代码片段放入它的位置,将'$ filename'改为'$ read',但是没有出现文件夹。我对PHP的知识非常有限(其他人写了大部分我发布的脚本),所以很可能我显示了我的无知! – Nick 2011-04-04 10:56:03

相关问题