我写了一个名为getContents()的函数:
// Get contents of specific DIR. Will recur through all directories.
function getContents($path, $skip_dir = FALSE, $skip_files = "", $dir_only = FALSE, $recurse = TRUE)
{ if($skip_files == "") $skip_files = array();
$getContentsTmp = array();
foreach(scandir($path, 1) as $file)
{
if(($file != ".") && ($file != ".."))
{ if((is_file($path . "/" . $file)) && (!in_array(pathinfo($path . "/" . $file,PATHINFO_EXTENSION),$skip_files)) && (!$dir_only)) {
array_push($getContentsTmp, $file);
}
if((is_dir($path . "/" . $file)) && (!$skip_dir)) {
if($recurse) {
$getContentsTmp[$file] = getContents($path . "/" . $file, $skip_files, $dir_only, $recurse);
} else {
array_push($getContentsTmp,$file);
// or $getContentsTmp[$file] = "";
}
}
}
}
ksort($getContentsTmp);
return $getContentsTmp;
}
很长一段时间以来一直很好。但由于某种原因,我今天在另一个目录上使用它,并且它没有返回预期的结果。我已将其缩小到$dir_only
变量。出于某种原因,即使我没有设置它也是如此。我不会在任何地方更改变量,所以我不知道为什么会这样。
对函数的调用是这样的:
$e = getContents("my_dir");
如果我在函数中回显结果,它会正确地看到所有文件和文件夹,但是当它从内部再次调用该函数时,(在if($recurse)
之后),它通过$ dir_only但似乎被解释为真。我无法弄清楚原因。
答案 0 :(得分:4)
查看您传入的参数数量:
getContents($path . "/" . $file, $skip_files, $dir_only, $recurse);
^ ^ ^ ^
1 2 3 4
查看您的函数接受的数量:
getContents($path, $skip_dir = FALSE, $skip_files = "", $dir_only = FALSE, $recurse = TRUE)
^ ^ ^ ^ ^
1 2 3 4 5
因此,在这种情况下,您正在调用该函数并错过$skip_dir
,因此$recurse
的值将应用于参数$dir_only
。