[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: вывод всех файлов с каталога и подкаталогов
quickxyan
надо сделать навигатор. типа мы находимся в каталоге, а в нем есть подкаталоги. выводим список подкаталогов, а ниже например вывести все файлы которые есть во всех подкаталогах.

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


<?php
function
nav($dir){
//$d = = './';

if(is_dir($dir)) { //проверяем наличие директории
//echo $dir.' - директория существует;<br>';

$files = scandir($dir); //сканируем (получаем массив файлов)
array_shift($files); // удаляем из массива '.'
array_shift($files); // удаляем из массива '..'
for($i=0; $i<sizeof($files); $i++){
$len = strlen($files[$i]);
$x = $files[$i];
$ext = $x[$len-4].$x[$len-3].$x[$len-2].$x[$len-1];
if($ext=='.php'){
echo $files[$i].'<br>'; //выводим все файлы
}
if(is_dir($files[$i])){ //проверяем наличие директории)
echo '<a href="playlist.php?dir='.$files[$i].'">'.$files[$i].'</a><br>'; //выводим каталог
//$d .= $files[$i];

nav($file[$i]); //11111
}
}
}

else echo $dir.' -такой директории нет;<br>';
}

$dir='./';
nav($dir);
?>


nav($file[$i]); //11111 - вот тут вызываю рекурсивно эту же функцию, чтобы она искала дальше, но работает только один раз, потому что дальше получаеться неправиьлный путь.

например есть структура: ./111/222/333/
скрипт покажет только содержимое каталогов 111 и 222, а потом выходит путь типа такого ./333 - а его нет.

пробовал сделать сессионную переменную и прибавлять к ней путь, но выходит бред.

может кто сталкивался с такой проблемой? буду признателен любой помощи!



Спустя 38 минут, 2 секунды (23.06.2011 - 19:36) nugle написал(а):
так не устроит
$files = scandir('./');
array_shift($files);
array_shift($files);

foreach($files as $key => $val)
{
if(count(explode('.', $val)) == 1)
{
$files_next = scandir($val);
array_shift($files_next);
array_shift($files_next);

foreach($files_next as $k => $v)
echo $v .'<br />';
}
}

Спустя 4 минуты, 58 секунд (23.06.2011 - 19:41) quickxyan написал(а):
nugle
так идет вывод только файлов с подкаталога основного каталога.

дело в том, что точной структуры каталогов я не знаю, то есть юзер будет сам создавать её под себя.

Спустя 2 минуты, 38 секунд (23.06.2011 - 19:44) walerus написал(а):
Где то я уже тут выкладывал функцию...
function parseDir_file($directory, $includePath = false, $recurce = false)
{
$result = array();
if (substr($directory, -1)=="/")
$directory = substr($directory, 0, -1);
if ($dh = opendir($directory))
{
while (($file=readdir($dh))!==false)
{
if (($file=='.') || ($file=='..')) continue;
if (is_dir($directory."/".$file))
{
if ($recurce)
$result = array_values(array_merge($result, parseDir($directory."/".$file, $includePath, $recurce)));
}
else
array_push($result, ($includePath)? $directory."/".$file : $file);
}
}

closedir($dh);
return $result;
}


Вот, с флагами думаю разберешься )

Спустя 12 минут, 3 секунды (23.06.2011 - 19:56) quickxyan написал(а):
walerus
да это именно, то что надо. спасибо большое тебе уже не первый раз очень помог :)

и nugle, тоже большое спасибо!

правда позволю себе немного поправить твой код :)


function parseDir_file($directory, $includePath = false, $recurce = false)
{
$result = array();
if (substr($directory, -1)=="/")
$directory = substr($directory, 0, -1);
if ($dh = opendir($directory))
{
while (($file=readdir($dh))!==false)
{
if (($file=='.') || ($file=='..')) continue;
if (is_dir($directory."/".$file))
{
if ($recurce)
$result = array_values(array_merge($result, [b]parseDir_file[/b]($directory."/".$file, $includePath, $recurce)));
}
else
array_push($result, ($includePath)? $directory."/".$file : $file);
}
}

closedir($dh);
return $result;
}

Спустя 4 минуты, 41 секунда (23.06.2011 - 20:01) nugle написал(а):
не за что, сидел голову ломал)

Спустя 27 минут, 11 секунд (23.06.2011 - 20:28) walerus написал(а):
quickxyan Вэлкам ), аська в инфе есть если чего вдруг срочно )

Спустя 30 минут, 12 секунд (23.06.2011 - 20:58) quickxyan написал(а):
walerus
ты у меня есть в аське, когда-то помогал с получением инфы от webmoney.

Спустя 31 минута (23.06.2011 - 21:29) quickxyan написал(а):
вот возник еще вопрос.

теперь пытаюсь как-то написать под это дело навигатор. вот скрипт показывает все файлы и где-то в другой части экрана показывает подпапки, только те которые в нашей папке, а не ниже.


if ($recurce)
{
$result = array_values(array_merge($result, parseDir_file($directory."/".$file, $includePath, $recurce)));
$_SESSION['dir'] = $directory."/".$file;
echo '<a href='.$directory."/".$file.'>'.$directory."/".$file.'111</a><br>';
}


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

сейчас пробую записать все в сессионные переменные, а потом сравнивать количество слэшэв в переменных и откидать лишние подкаталоги.



_____________
печатаю со скоростью 320 минут в знак...

плюсуем карму не стесняемся
Быстрый ответ:

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