我正在尝试在 PHP 手册网站(由用户发布)上使用示例函数。该函数应该返回服务器指定目录中所有文件和/或文件夹的嵌套数组。
我只是在学习php,所以我认为我做错了什么的可能性更大,而功能不起作用的可能性较小。但如果有比下面的函数更简单的方法,请告诉我。
我能够遍历并回显基本路径中的所有文件,但不能遍历示例子文件夹中的文件。子文件夹的索引应该是空白或只是文件夹名称而不是数组,具体取决于我使用的参数。当我能够获取文件夹名称时,我使用返回 false 的 is_array 对其进行了测试。
这是功能:
list_array:返回一个数组,包含可选的所有文件、仅目录或仅文件系统路径中的文件
@param $base_path string 绝对或相对路径
@param $filter_dir boolean 从结果中过滤目录(如果 $recursive 为真,则忽略最后一个目录除外)
@param $filter_files boolean 从结果中过滤文件
@param $exclude string 管道分隔的文件字符串总是忽略
@param $recursive boolean 将目录下降到底部?
@return $result_list array 嵌套数组或 false
function directory_list($directory_base_path, $filter_dir = false, $filter_files = false, $exclude = ".|..|.DS_Store|.svn", $recursive = true){ $directory_base_path = rtrim($directory_base_path, "/") . "/"; if (!is_dir($directory_base_path)){ error_log(__FUNCTION__ . "File at: $directory_base_path is not a directory."); return false; } $result_list = array(); $exclude_array = explode("|", $exclude); if (!$folder_handle = opendir($directory_base_path)) { error_log(__FUNCTION__ . "Could not open directory at: $directory_base_path"); return false; }else{ while(false !== ($filename = readdir($folder_handle))) { if(!in_array($filename, $exclude_array)) { if(is_dir($directory_base_path . $filename . "/")) { if($recursive && strcmp($filename, ".")!=0 && strcmp($filename, "..")!=0 ){ // prevent infinite recursion error_log($directory_base_path . $filename . "/"); $result_list[$filename] = directory_list("$directory_base_path$filename/", $filter_dir, $filter_files, $exclude, $recursive); }elseif(!$filter_dir){ $result_list[] = $filename; } }elseif(!$filter_files){ $result_list[] = $filename; } } } closedir($folder_handle); return $result_list; }
}
这是我尝试过的许多事情之一。该数组包含 5 个元素,但仅显示其中的 4 个。回显 $array[4] 是空白的。我只是想在这一点上获取嵌套数组。但是,如果有更简单的方法来迭代它,任何提示都非常感谢。
$directory_base_path = "../sandbox/";
$filter_dir = false;
$filter_files = false;
$exclude_files = ".|..|.DS_Store|dir_read_test.php";
$recursive = true;
$array = directory_list($directory_base_path, $filter_dir, $filter_files, $exclude_files, $recursive);
$array_length = count($array);
echo $array_length;
echo "<br/>";
$count = 0;
while ( $array_length >= $count ) {
echo $array[$count];
echo "<br/>";
$count = $count + 1;
}