Я пытаюсь использовать функцию примера на веб-сайте руководства PHP (размещен пользователем). Предполагается, что функция вернет вложенный массив всех файлов и/или папок в указанном каталоге вашего сервера.Код для создания вложенного массива всех файлов в каталоге и подкаталогах с PHP не работает
Я просто изучаю php, поэтому я думаю, что более вероятно, что я делаю что-то неправильно и менее вероятно, что функция не работает. Но если есть более простой способ, чем функция ниже, пожалуйста, дайте мне знать.
Я могу выполнять итерацию всех файлов в базовом пути, но не файлы в моей подкатегории. Индекс, в котором должна находиться подпапка, либо пуста, либо просто имя папки, а не массив, в зависимости от параметров, которые я использую. Когда мне удалось получить имя папки, я протестировал ее с помощью is_array, которая вернула false.
Вот функция:
list_array: возвращает массив, содержащий все файлы, необязательно, только каталоги или файлы только на пути файловой системы
@param $ базовый_путь строка абсолютный или относительный путь
@param $ filter_dir булева фильтр каталоги из результата (игнорируются, за исключением последнего каталога, если $ рекурсивного верно)
@param $ filter_files булев фильтр файлы из результата
@param $ исключить строку Pipe разделителей строки файлов, чтобы всегда игнорировать
@param $ рекурсивной булева каталог Descend на дно?
@return $ result_list массив Вложенный массив или ложные
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 из них отображаются. Echoing $ 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;
}
Хорошо, спасибо. Теперь отлично. – Baa