[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Написал скрипт, которой выводит все поддериктории
Bill47
Здравствуйте

Хочу для опыта написать скрипт который выведет все файлы во всех директориях, любой вложенности.
Работает рекурсивно.

Написал, работает нормально. НО ! Не читает папки дальше второго уровня вложенности.

Т.е. если есть такая папка:

cars
...bmw
...mersedes
...lada


То всё что в cars - скрипт считает файлами, т.е. is_dir - возвращает false.

Помогите понять что не так.
Возможно есть какая нибудь настройка апача или php.ini ?
Вроде бы с точки зрения кода всё верно.
Тестирую на денвере, пробовал заливать на хост - и так и там, дальше второго уровня не распечатывает =(


<?php
function
dirs($dir, $tab) {
$d = opendir($dir);

while( $name = readdir($d) ) {
if( $name == "." or $name == ".." ) continue;

if( is_dir($name) ) {
echo "<b>".$tab."[$name]</b><br>";
dirs($dir."/$name", $tab. "-");
} else
echo "$tab$name<br>";
}
closedir($d);
}

dirs( ".", "" );

?>
Игорь_Vasinsky
потому что по ходу нужно применять

is_dir() или is_file() - и если это директория - то делать рекурсию.

почитай про рекурсивные пользовательские функции php

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Bill47
Игорь_Vasinsky

так я применяю is_dir() и про рекурсивные функция и прочитал - с рекурсией все нормально.

Не могли бы вы чуть более конкретно указать на ошибку?
Bill47
Я чуть изменил код:


header("Cache-Control: no-store");
header("Expires: ". date("r") );


function dirs($dir, $tab) {
@$d = opendir($dir);
if( !$d ) return;

while( $name = readdir($d) ) {
if( $name == "." or $name == ".." ) continue;

if( !is_file($name) ) {
echo "<b>".$tab."[$name]</b><br>";
dirs($dir."/$name", $tab. "-");
} else
echo "$tab$name<br>";
}
closedir($d);
}

dirs( ".", "" );



Он начал выводить все файлы во скех папках, хотя файлы с папками путает.
Но это скорее хак а не решение.
Bill47
Я нашел ошибку!

Если кому интересно - ошибка была в условии.
Скрипт не верно отличал папку от файла, потому что условие в 9 строке было не верным.

Нужно так:
if( is_dir( $dir."/".$name ) ) {
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.