Forum Webscript.Ru

Программирование => PHP => Тема начата: rush[666] от 26 Января 2005, 12:37:19

Название: Рекурсивное чтение дерикторий.
Отправлено: rush[666] от 26 Января 2005, 12:37:19
Хай, олл!
Не могли бы дать совет по сабжу?

Т.е. как находить вложеные дериктории?

Заранее спасибо!
Название: Рекурсивное чтение дерикторий.
Отправлено: 4m@t!c от 26 Января 2005, 12:57:09
В ноутах по этой линке посмотри - там есть пример.. Где-то 5-й ноут смотри.
Функции по работе с файловой системой (http://www.php.net/manual/ru/ref.filesystem.php)
Название: Рекурсивное чтение дерикторий.
Отправлено: for_i_0 от 26 Января 2005, 13:11:49
rush[666]
Могу предложить алгоритм следующего рода:
1. Считываем внутрь директории.
2. Проверяем на наличие дирикторий, тоесть ищем строки без расширений.
3. Запихиваем их в массив.
4. Выбираем из массива и добавляем к начальному пути и по новой пока их неостнится.
Название: Рекурсивное чтение дерикторий.
Отправлено: 4m@t!c от 26 Января 2005, 13:21:35
Цитировать
for_i_0:
 Проверяем на наличие дирикторий, тоесть ищем строки без расширений.

Для проверки является ли объект файлом или директорией - есть конкретная функция is_file() и is_dir() соотвественно, а не проверка имени объекта по маске.
З.Ы. То, что ты описал - это "неправильная" рекусрия... Массив нужно использовать, не для
Цитировать
for_i_0:
4. Выбираем из массива и добавляем к начальному пути и по новой пока их неостнится.

а для того, что бы организовать дерево.
Название: Рекурсивное чтение дерикторий.
Отправлено: rush[666] от 26 Января 2005, 13:22:19
2for_i_0
Буду очень признателен. Как можно получить?
Тут же вопрос. Ты выявляешь директорию по строке без расширений? А если существует файл без оннго, что будет?
Название: Рекурсивное чтение дерикторий.
Отправлено: for_i_0 от 26 Января 2005, 13:42:09
rush[666]
1. меня уже поправили.
2. Читаем предыдущий пост 4m@t!c
3. Насколько я знаю файлы без раширения не бывают.
4. опечатка "строка" - на самом деле имелось ввиду имена файлов. Как бы там не было, алгоритм предложенный мною пример неправилной рекурсии. И я это признаю.

4m@t!c
[OFF]Спасибо за правку. Будем учится на своих ошибках.[/OFF]
Название: Рекурсивное чтение дерикторий.
Отправлено: 4m@t!c от 26 Января 2005, 13:49:38
[OFF]
for_i_0, пожалуйста.
Цитировать
for_i_0:
3. Насколько я знаю файлы без раширения не бывают.

еще как бывают. Есть понятие имя файла, которое условно, (Подчеркиваю) условно делится на название файла (то, что до точки) и на расширение файла(то, что после точки). Файл можно создать без расширения и без названия. т.е. есть ФАЙЛ host, а есть ФАЙЛ .htaccess
[/OFF]
Название: Рекурсивное чтение дерикторий.
Отправлено: rush[666] от 26 Января 2005, 13:56:52
ну Бог с ними с файлами то =)
Не могу понять как действует функция is_dir.
Пример можно?
Название: Рекурсивное чтение дерикторий.
Отправлено: 4m@t!c от 26 Января 2005, 14:11:10
rush[666], КАК она действует можно только догадываться, либо почитать в сырцах. А если тебе интересно, ЧТО она делает, то глянь is_dir() (http://www.php.net/manual/ru/function.is-dir.php) в мане (http://php.net/manual/ru).
Название: Рекурсивное чтение дерикторий.
Отправлено: Меняздесьдавнонет от 26 Января 2005, 15:15:11
for_i_0
с точки чрения файловой системы различия между файлом и каталогом - нет.
просто каталог - это такой особенный файл, который содержит ссылки на другие файлы.
и уж тем более, никакого различия по именам нет и быть не может.
Название: Рекурсивное чтение дерикторий.
Отправлено: CGVictor от 26 Января 2005, 16:54:01
[off]Господа, ну хоть кто-нибудь удосужится ман прочитать? Там по одной из функций приведен работающий пример именно такой рекурсии. Специально ссылку не дам.[/off]
Название: Рекурсивное чтение дерикторий.
Отправлено: 4m@t!c от 26 Января 2005, 17:37:46
[OFF]
CGVictor, если внимательно прочесть тред, то можно увидеть, что я привел ссылку на ман и сказал, что там есть пример.
[/OFF]
Название: Рекурсивное чтение дерикторий.
Отправлено: CGVictor от 26 Января 2005, 18:33:24
4m@t!c
[off]Десяток сообщений о том, что есть в мане. Неплохо.[/off]
Название: Рекурсивное чтение дерикторий.
Отправлено: kuskin от 23 Февраля 2005, 05:17:41
Цитировать
rush[666]:
Т.е. как находить вложеные дериктории?


пример из книги:

// Функция распечатывает имена всех подкаталогов в текущем каталоге,
// выполняя рекурсивный обход. Параметр $level задает текущую
// глубину рекурсии.
function PrintTree($level=1)
{
// Открываем каталог и выходим в случае ошибки
$d=@opendir(".");
if(!$d) return;
while(($e=readdir($d))!==false) {
// Игнорируем элементы .. и .
if($e==\'.\'||$e==\'..\') continue;
// Нам нужны только подкаталоги
if(!@is_dir($e)) continue;
// Печатаем пробелы, чтобы сместить вывод
for($i=0; $i<$level; $i++) echo " ";
// Выводим текущий элемент
echo "$e\\n";
// Входим в текущий подкаталог и печатаем его
if(!chdir($e)) continue;
PrintTree($level+1);
// Возвращаемся назад
chdir("..");
// Отправляем данные в браузер, чтобы избежать видимости зависания
// для больших распечаток
flush();
}
closedir($d);
}
// Выводим остальной текст фиксированным шрифтом
echo "
";
echo "/\\n";
// Входим в корневой каталог и печатаем его
chdir("/");
PrintTree();
echo "
";
?>