簡體   English   中英

排除子目錄php

[英]exclude sub directory php

我想列出目錄中的所有文件並排除子目錄(newfiles)

我試圖使用(if($ file!=“ 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; 
    } 
}  

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

`find /data -type f`

如果要列出所有文件並排除名為“ newfiles”的目錄,請使用此

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

如果您還想排除目錄“ badfiles”

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

如果您想要文件和目錄

`find /data/!(newfiles)`

等待 ,不要降級我。 當然,它是一個shell可執行文件,在php中,您可以運行如下的shell腳本:

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

玩得開心

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

我們檢查$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

您可以使用以下功能排除所需的目錄

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

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM