phpforeach循环一个文件夹获取其';子文件夹


php foreach loop a folder get files in its' subfolder

我有一些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

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

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.
  }
}
$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 />';
  }
}

使用以下

$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
}

也可以使用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 />';
    }
  }
}