PHP获取子目录下的所有文件


PHP getting all files in subdirectories

我试图在我的10个子文件夹中获得所有XML文件并解析它们。要做到这一点,我有以下代码:

public static function calculateEAXML ($dir) {
$dh  = opendir($dir);
$folderNames = array();
$arr = array();
while (false !== ($folderName = readdir($dh))) {
  if ( $folderName[0] == "." || (substr($folderName, -3) == "zip") ) {continue;}
  $folderNames[] = $folderName; 
  $dom = new DOMDocument;
  $dom->validateOnParse = true;
  foreach ($folderNames as $file) 
{
    if(is_dir($folderName)){ScanFiles::calculateEAXML($dir);}
    else{
    $df  = opendir($dir . $file);
    while (false !== ($file = readdir($df))) 
    {
        if ($file == "." || $file == ".."  ) {continue;}
        $dom->Load($dir . $folderName . "/" . $file);
        $arr[] = XML2Array::createArray($dom);
    }
  }
}
  return $arr;    
}
}

问题是它只解析一个目录中的文件,完全忽略另一个目录。有什么想法如何使它解析所有目录中的所有文件?

您的脚本存在许多问题,主要围绕foreach

  1. if(is_dir($folderName)):变量$folderName不存在。我认为你应该有$file在那里。
  2. ScanFiles::calculateEAXML($dir);:您正在再次扫描同一目录,并且对响应不做任何操作。
  3. $df = opendir($dir . $file);:如果文件不是目录,您试图将其作为目录打开。
  4. 你的foreach循环在while循环内。

下面是解决这些问题的尝试:

public static function calculateEAXML($dir) {
    $dh  = opendir($dir);
    $folderNames = array();
    $arr = array();
    // Get all files and folders in the current directory
    while (false !== ($folderName = readdir($dh))) {
        if ($folderName[0] == "." || (substr($folderName, -3) == "zip")) {
            continue;
        }
        $folderNames[] = $folderName;
    }
    foreach ($folderNames as $file) {
        $filename = $dir . '/' . $file;
        if(is_dir($filename)){
            $arr = array_merge($arr, ScanFiles::calculateEAXML($filename));
        } else {
            $dom = new DOMDocument;
            $dom->validateOnParse = true;
            $dom->Load($filename);
            $arr[] = XML2Array::createArray($dom);
        }
    }
    return $arr;    
}

这就是glob的作用:

foreach (glob("*.xml") as $filename) {
    // do sth with the file, $filename holds the current file
}