[英]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
周圍。
if(is_dir($folderName))
:變量$folderName
不存在。 我認為您應該在那里有$file
。 ScanFiles::calculateEAXML($dir);
:您將再次掃描同一目錄,並且對響應不執行任何操作。 $df = opendir($dir . $file);
:如果文件不是目錄,則嘗試將其作為目錄打開。 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.