Надо мне было скрипт написать который по заданному пути папки вывел бы все названия файлов и папок в иерархической виде. Для реализации использовал рекурсию. Но что - то там ошибка. Думаю ошибка в синтаксисе. Для реализации рекурсии я использовал static $переменная или надо global $переменная?
спасибо за ссылку, но хотелось бы узнать о том как обьявлять переменную которую хочешь использовать во всех итерациях рекурсии.
Я бы делал global... Дурной тон - задавать вопрос и не показывать код... У телепатов отпуск... А что там думать - там же явно написано в чем ошибка...
Код (Text): static $nbsp = 1; function print_dir($d) { // открываем файл if( $dir = opendir($d) ) { $nbsp = $nbsp + 4; // счиытываем файл while($file = readdir($dir)) { for($i = 0; $i < $nbsp; $i++) { echo "здесь выводим пробелы "; } // если существует файл "папка/файл" if(is_file("$d/$file")) { echo "<font color='blue'>Файл: </font>".$file."<br>"; } elseif(is_dir("$d/$file") && $file != '.' && $file != '..') { echo "<font color='red'>Папка: </font>".$file."<br>"; print_dir("$d/$file"); } } } $nbsp = $nbsp - 4; return; } алгоритм по -моему правильный...
PHP: global $nbsp; $nbsp = 1; function print_dir($d) { global $nbsp; // открываем файл if( $dir = opendir($d) ) { $nbsp = $nbsp + 4; // счиытываем файл while($file = readdir($dir)) { $left = $nbsp*5; // если существует файл "папка/файл" if(is_file("$d/$file")) { echo "<font color='blue' style='padding-left:{$left}px;'>Файл: </font>".$file."<br>"; } elseif(is_dir("$d/$file") && $file != '.' && $file != '..') { echo "<font color='red' style='padding-left:{$left}px;'>Папка: </font>".$file."<br>"; print_dir("$d/$file"); } } } $nbsp = $nbsp - 4; return; } P.S. Сколько бы ты не лепил &nbsр; в браузер он всегда выводит только 1! т.е. "1 &nbsр;&nbsр;&nbsр;&nbsр; 2" отобразится как "1 2"
Нифига!   он переводит в пробелы. Это сами пробелы " " он учитывает как 1 пробел. Т.е. " " выведет как " ". Вот мой вариант: PHP: <?php function scaner($addr, $list) { $result = scandir($addr); echo '+'.$addr.'<br>'; for ($i = 0; $i < sizeof($result); $i++) { if ($result[$i] == '.' or $result[$i] == '..') { continue; } if (is_dir($addr.'/'.$result[$i])) { echo $list.'+'.$result[$i].'<br>'; scaner($addr.'/'.$result[$i], $list.'-'); } else { echo $list.'-'.$result[$i].'<br>'; } } } echo '<pre>'; scaner('.', '-'); ?>
интрерпретируется как символ пробела (пустой символ), хотя он пустой, он есть. Поэтому браузер словосочетание Йа креведко! воспримерт как одно слово и не будет переносить, если оно не входит напримпер я вчейку таблицы. Кстати, длина пробела $nbsp; немного короче обычного пробела, если не выставлен моноширный стиль текста.