簡體   English   中英

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

問題是它只解析一個目錄中的文件,而完全忽略另一個目錄。 有什么想法可以使其解析所有目錄中的所有文件嗎?

這是glob的用途:

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

您的腳本有很多問題,主要是在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;    
}

暫無
暫無

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

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