2014-06-15 97 views
1

我想列出所有文件目錄和排除子目錄(newfiles)排除子目錄PHP

我試圖用(如果($文件!=「newfiles」)) 但沒有一點變化

foreach (ListFiles("/data") as $key=>$file){ 

if($file != "newfiles"){ 
$files=array_pop(explode('/',$file)); 
$lfile[]=$files; 
} 

} 


function ListFiles($dir) { 

    if($dh = opendir($dir)) { 

     $files = Array(); 
     $inner_files = Array(); 

     while($file = readdir($dh)) { 
      if($file != "." && $file != ".." && $file[0] != '.') { 
       if(is_dir($dir . "/" . $file)) { 
        $inner_files = ListFiles($dir . "/" . $file); 
        if(is_array($inner_files)) $files = array_merge($files, $inner_files); 
       } else { 
        array_push($files, $dir . "/" . $file); 
       } 
      } 
     } 

     closedir($dh); 
     return $files; 
    } 
} 
+0

能否請您提供的目錄樹的例子嗎? – Subin

+0

文件(1-2-3 -....-新聞文件) – user221288

+2

新聞文件或新文件? –

回答

-1

您可以使用以下功能,以排除目錄你想

function glob_deep($pattern, $exclude = array(), $flags = 0) 
    { 
    $files = glob($pattern, $flags); 
    foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) 
    { 
     if(!in_array($dir, $exclude)) { 
      $files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags)); 
     } 
    } 
    return $files; 
    } 

,並調用它像

$files = glob_deep('data', array('newfiles')); 
var_dump($files); 

希望這有助於

+0

這是如何回答這個問題的?它既不像他的例子遞歸,也不排除他想排除的目錄 –

+0

目錄有很多其他子目錄,我想排除一個 – user221288

+0

更新我的答案@Dagon – Saqueib

0

你應該檢查它是否是/data/newfiles,而不是僅僅/newfiles因爲$文件變量返回的整個位置,而不只是文件名。

我們檢查$file變量是否包含字符串data/newfiles。如果匹配,則表示該文件位於子目錄中。

我們只將它添加到$lfile數組中,如果它不匹配,這意味着文件不在newfiles子目錄中。

foreach (ListFiles("/data") as $key=>$file){ 
    /* Only continue if the $file variable doesn't have the string "data/newfiles" */ 
    if(!preg_match("/data\/newfiles/", $file)){ 
     $files=array_pop(explode('/', $file)); 
     $lfile[]=$files; 
    } 
} 

/data指向在文件系統根目錄中的文件夾data。我想你的意思是./data

1

如果要列出所有文件使用此

`find /data -type f` 
如果要列出所有文件,並排除名爲如果你也想排除目錄「newfiles」使用

`find /data/!(newfiles) -type f` 

目錄

「badfiles」

`find /data/!(newfiles|badfiles) -type f` 

如果你想要文件和目錄

`find /data/!(newfiles)` 

等待不降級我。它當然是一個解釋器可執行程序, 在PHP中,你可以像這樣運行shell腳本:

$output = shell_exec('find /data/!(newfiles|badfiles) -type f'); 
print_r($output); 

樂趣