Я пытаюсь использовать пример функции на веб-сайте руководства по PHP (опубликовано пользователем). Предполагается, что функция возвращает вложенный массив всех файлов и / или папок в указанном каталоге вашего сервера.
Я просто изучаю php, поэтому я думаю, что более вероятно, что я делаю что-то не так, и менее вероятно, что функция не работает. Но если есть более простой метод, чем приведенная ниже функция, пожалуйста, дайте мне знать.
Я могу перебирать и выводить все файлы в базовом пути, но не файлы в моей подпапке с примерами. Индекс, в котором должна быть подпапка, является пустым или просто именем папки, а не массивом в зависимости от параметров, которые я использую. Когда мне удалось получить имя папки, я протестировал его с помощью is_array, который вернул false.
Вот функция:
list_array: вернуть массив, содержащий необязательно все файлы, только каталоги или только файлы по пути файловой системы
@ param $ base_path строка либо абсолютный, либо относительный путь
@ param $ filter_dir boolean Фильтровать каталоги из результата (игнорируется, кроме последнего каталога, если $ recursive - true)
@ param $ filter_files логический Фильтр файлов из результата
@ 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;
}