X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Функция для вывода всех директорий и файлов внутри заданной директории
Sasha_1988
Sasha_1988
Topic Starter сообщение 14.1.2015, 22:03; Ответить: Sasha_1988
Сообщение #1


Добрый вечер, прошу помочь разобраться .

Ниже код функции для вывода всех файлов и директорий внутри директории, также когда внутри заданной директории находятся еще какие-либо вложенные директории, функция с помощью рекурсии вызывает саму себя и 
должна вывести все вложенные файлы. В результате все должно выводиться в виде дерева, где с помощь "-" черточек будет отображаться уровень вложенности.

Однако функция неправильно работает, не понимаю почему
Ниже код.

<?
function direct ($dir,$tab){
$d=opendir($dir);
while ($name= readdir($d)){
if ($name=="." or $name=="..")
continue;
if (is_dir($name)){
echo "<b>".$tab."[$name]</b><br>";
$tab.= '-';
direct($dir."/$name",$tab);
}
else{
echo "$tab$name<br>";
}
}
closedir($d);
}
direct(".","");
?>

0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 15.1.2015, 12:26; Ответить: matroskin8
Сообщение #2


(Sasha_1988 @ 15.1.2015, 00:03) *
Однако функция неправильно работает, не понимаю почему

Функция работает не совсем корректно из-за вот этой вот строки кода:

$tab .= '-';

Получается, что переменная перезаписывается с новым значением, как только мы дойдем до каталога... правильно же не перезаписывать переменную, а приклеивать к ней разделитель, тогда значение переменной останется исходным, но склеенная строка попадет в рекурсивно вызванную функцию. Соответственно, проблемную строку из кода нужно убрать, а рекурсивный вызов заменить таким:

direct($dir . "/$name", $tab . '-');

И чтение каталога правильно производить несколько иначе, во избежание проблем с каталогами, имена которых можно преобразовать в FALSE (подробнее см. документацию к функции readdir). Итоговый код функции на всякий случай:

function direct ($dir,$tab){
$d = opendir($dir);
while ( false !== ($name = readdir($d)) ){
if ($name == "." or $name == "..") continue;

if ( is_dir($dir . '/' . $name) ){
echo "<b>". $tab . "[$name]</b><br>";
direct($dir . "/$name", $tab . '-');
}else{
echo "$tab$name<br>";
}
}
closedir($d);
}
direct(".","");
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Sasha_1988
Sasha_1988
Topic Starter сообщение 15.1.2015, 21:54; Ответить: Sasha_1988
Сообщение #3


Большое спасибо!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 16.1.2015, 11:45; Ответить: matroskin8
Сообщение #4


Пожалуйста.


Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Betatransfer.net - прием платежей для HIGH RISK проектов, интернет эквайринг и мерчант онлайн оплат
55 arendator 35089 Сегодня, 2:12
автор: arendator
Открытая тема (нет новых ответов) Rebex.io – Ваша инновационная платформа для обмена криптовалюты!
3 Rebex 968 Вчера, 20:50
автор: Rebex
Открытая тема (нет новых ответов) Посоветуйте массажер для спины и шеи
10 Boymaster 901 Вчера, 18:02
автор: Boymaster
Открытая тема (нет новых ответов) Обучение Email Рассылкам + Софт Для Автоматизации (100к в сутки с сервера)
10 zennoboss 4661 Вчера, 5:20
автор: Skyworker
Открытая тема (нет новых ответов) Какой % отказов нормален для сайта?
14 Aloof 3384 23.4.2024, 13:50
автор: Vmir


 



RSS Текстовая версия Сейчас: 25.4.2024, 10:57
Дизайн