Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод структуры
 
 автор: mistersmak   (10.11.2005 в 08:10)   письмо автору
 
 

Допустим есть папка Folder в ней еще две папки 1 и 2 и файлы 1.txt, 2.txt, 3.txt. В папке 1 лежат файлы 4.txt и 5.txt. В папке 2 папка 3. В папке 3 файл 6.txt. (Извините за длинное описание)

Значит в файлменеджере это должно выглядеть примерно так:

[dir]Folder
|----[dir]1
|   |----[file]4.txt
|   |----[file]5.txt
|----[dir]2
|   |----[dir]3
|      |----[file]6.txt
|----[file]1.txt
|----[file]2.txt
|----[file]3.txt

Вопрос в том как это сделать при помоши ПХП - т.е. как вывести этот список используя readdir. Проблема в том чтобы прочитав до конца всю 1-ую ветвь, перейти ко второй, при этом надо заранее прочитать все ветви, а не делать ссылки типа: ?currentdir=folder/1/.
Все мои потуги окончились 2-мя вариантами:
1. Выводился только верхний уровень
2. Выводилась только первая ветвь (Folder/1/)
Помогите плиз!!!

   
 
 автор: cheops   (10.11.2005 в 13:03)   письмо автору
 
   для: mistersmak   (10.11.2005 в 08:10)
 

Для этого обычно используется рекурсивная функция вроде
<?php 
  scan_dir
("."); 
  
////////////////////////////////////////////////////////// 
  // Рекурсивная функция - спускаемся вниз по каталогу 
  ////////////////////////////////////////////////////////// 
  
function scan_dir($dirname
  { 
    
// Открываем текущую директорию 
    
$dir opendir($dirname); 
    
// Читаем в цикле директорию 
    
while (($file readdir($dir)) !== false
    { 
      
// Если файл обрабатываем его содержимое 
      
if($file != "." && $file != ".."
      { 
        
// Если имеем дело с файлом - регистрируем его 
        
if(is_file($dirname."/".$file)) 
        { 
          echo 
$dirname."/".$file." - "
               
date("m.d.y",filemtime($dirname."/".$file))." - "
               
filesize($dirname."/".$file)."<br>"
        } 
        
// Если перед нами директория, вызываем рекурсивно 
        // функцию scan_dir 
        
if(is_dir($dirname."/".$file)) 
        { 
          echo 
$dirname."/".$file."<br>"
          
scan_dir($dirname."/".$file); 
        } 
      } 
    } 
    
// Закрываем директорию 
    
closedir($dir); 
  } 
?> 

Вот ещё ссылка на обход дерева каталогов
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=7610

   
 
 автор: mistersmak   (11.11.2005 в 01:23)   письмо автору
 
   для: cheops   (10.11.2005 в 13:03)
 

Да, примерно то я и сделал, только(как всегда) немного напортачил.
Вот еще вопросик:

var TREE_ITEMS = [
    ['folder', 'folder/',
        ['abc', 'folder/abc/',
            ['asd', 'folder/abc/asd/',
                ['klio.txt','folder/abc/asd/klio.txt'],
                ['mega.txt','folder/abc/asd/mega.txt'],
            ],
            ['1.txt','folder/abc/1.txt'],
            ['2.txt','folder/abc/2.txt'],
        ],
        ['def', 'folder/def/',
            ['folder', 'folder/def/folder/',
                ['irr.txt','folder/def/folder/irr.txt'],
                ['melf.txt','folder/def/folder/melf.txt'],
            ],
        ],
        ['Documentation.txt','folder/Documentation.txt'],
        ['fs1.txt','folder/fs1.txt'],
        ['lamers.txt','folder/lamers.txt'],
        ['text1.txt','folder/text1.txt'],
    ]
];

Кто-то когда-то давал ссылку на файловое дерево на яваскрипте, я его стыбрил =)
Пхп должен формировать такой файл(выше).

<?
 
function scan_dir($dirname,$content
  {
   
$dir opendir($dirname);
   while ((
$file readdir($dir)) !== false)
    {
     if(
$file != "." && $file != ".."
      {
       if(
is_file($dirname."/".$file)) 
        {
         
$content $content."['$file','$dirname/$file'],";
         
//echo "$dirname/$file<br>";
        
}
       if(
is_dir($dirname."/".$file))
        {
         
//echo "$dirname/$file<br>";
         
$content2 scan_dir("$dirname/$file",$content);
         
$content $content2."],['$dirname','$dirname/$file',";
        }
      }
    }
   
closedir($dir);
   return 
$content;
  }
 
$paths "var TREE_ITEMS = [".scan_dir("folder",$content)."];";
 
$tree fopen("tree_items.js","w");
 
fwrite($tree,$paths);
 
fclose($tree);
?>

я опять что-то попутал =( Помогите мне плиз!!!

   
 
 автор: cheops   (11.11.2005 в 02:05)   письмо автору
 
   для: mistersmak   (11.11.2005 в 01:23)
 

А в чём ошибка заключается, что не правильно?

   
 
 автор: mistersmak   (11.11.2005 в 02:24)   письмо автору
 
   для: cheops   (11.11.2005 в 02:05)
 

Вроде где-то что-то куда-то =) не туда поставлено, непойму что
Вот файл сгенерированный скриптом:

var TREE_ITEMS = [['1.txt','folder/abc/1.txt'],['2.txt','folder/abc/2.txt'],['klio.txt','folder/abc/asd/klio.txt'],['mega.txt','folder/abc/asd/mega.txt'],],['folder/abc','folder/abc/asd',],['folder','folder/abc',['irr.txt','folder/def/folder/irr.txt'],['melf.txt','folder/def/folder/melf.txt'],],['folder/def','folder/def/folder',],['folder','folder/def',['Documentation.txt','folder/Documentation.txt'],['fs1.txt','folder/fs1.txt'],['lamers.txt','folder/lamers.txt'],['text1.txt','folder/text1.txt'],];

Вот файл написанный вручную:

var TREE_ITEMS = [
    ['folder', 'folder/',
        ['abc', 'folder/abc/',
            ['asd', 'folder/abc/asd/',
                ['klio.txt','folder/abc/asd/klio.txt'],
                ['mega.txt','folder/abc/asd/mega.txt'],
            ],
            ['1.txt','folder/abc/1.txt'],
            ['2.txt','folder/abc/2.txt'],
        ],
        ['def', 'folder/def/',
            ['folder', 'folder/def/folder/',
                ['irr.txt','folder/def/folder/irr.txt'],
                ['melf.txt','folder/def/folder/melf.txt'],
            ],
        ],
        ['Documentation.txt','folder/Documentation.txt'],
        ['fs1.txt','folder/fs1.txt'],
        ['lamers.txt','folder/lamers.txt'],
        ['text1.txt','folder/text1.txt'],
    ]
];

Если использовать сгенерированный пишет это:
Предполагается наличие идентификатора (строка 2 символ 157)
"TREE ITEMS" - определение отсутствует (строка 24 символ 3)
Вот все это в архиве (может поможет =)

   
 
 автор: cheops   (11.11.2005 в 15:10)   письмо автору
 
   для: mistersmak   (11.11.2005 в 02:24)
 

Может из-за того, что с самого начала идут файлы, а не директория? Попробуйте подняться на директорию выше...

   
 
 автор: mistersmak   (11.11.2005 в 12:53)   письмо автору
 
   для: cheops   (11.11.2005 в 02:05)
 

Всеми забытый, плачу в углу... =)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования