php foreach循环文件夹获取其子文件夹中的文件

时间:2012-08-28 13:47:04

标签: php directory subdirectory file-exists

我有一些error_log.txt个文件,在/var/www/html/log/'.date(Ymd).'/error_log.txt中创建,文件夹表就像这样。

-log-
    |--20120825 -- error_log.txt
    |--20120826 -- 
    |--20120827 -- error_log.txt
    |--20120828 -- error_log.txt

如何在名称为foreach loop的文件夹中创建log,然后获取所有subfolder name并判断此error_log.txt中是否有subfolder }?

folder table展示时,20120826中没有error_log.txt,因此请勿打印folder name

最后我需要获取文件夹名称:20120825, 20120827, 20120828

$folder = dirname(__FILE__) . '/../log/';
foreach(glob($folder) as $subfolder){
  if(file_exists($subfolder.'/error_log.txt')){
    echo  $subfolder.'<br />'; //I get nothing.
  }
}

3 个答案:

答案 0 :(得分:1)

$folder = dirname(__FILE__) . '/../log/';
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folder)) as $entry) {
  if ($entry->isFile()) {
    echo $entry, '<br />';
  }
}

以这种方式使用,您将只获得实际文件。如果您不喜欢迭代器样式,请使用:

$folder = dirname(__FILE__) . '/log/*';
foreach(glob($folder) as $subfolder){
  $path = $subfolder . '/error_log.txt';
  if (file_exists($path)) {
    echo basename($subfolder), '<br />';
  }
}

答案 1 :(得分:1)

使用以下

$folder = dirname(__FILE__) . '/../log';


foreach(glob($folder.'/*') as $subfolder){
  if(file_exists($subfolder.'/error_log.txt')){
    echo  $subfolder.'<br />'; //You will get the folder name
}

答案 2 :(得分:1)

也可以使用scandir

$folder = dirname(__FILE__) . '/../log/';
$files = scandir($dir);
foreach($files as $subfolder){
  if(is_numeric($subfolder)){ // As your folder all use number, use `is_numeric` to remove sub folder '.' and '..'
    if(file_exists($folder.$subfolder.'/error_log.txt')){
      echo  $subfolder.'<br />';
    }
  }
}