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

Форум PHP

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

 

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

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

тема: rabota s katalogami
 
 автор: behrad   (27.07.2005 в 21:48)   письмо автору
 
 

privet vsem
mne nujna poluchit spisok katalogov i pod katalogov ?
tipa deriva kataloga.
i formirovat massiv s imenami filov i katalogov !

   
 
 автор: cheops   (27.07.2005 в 21:56)   письмо автору
 
   для: behrad   (27.07.2005 в 21:48)
 

Вы можете воспользоваться следующим скриптом
<?php 
  scan_dir
("."); 
  
////////////////////////////////////////////////////////// 
  // Рекурсивная функция - спускаемся вниз по каталогу 
  ////////////////////////////////////////////////////////// 
  
function scan_dir($dirname
  { 
    
// Открываем текущую директорию 
    
$dir opendir($dirname); 
    
// Читаем в цикле директорию 
    
while (($file readdir($dir)) !== false
    { 
      
// Если файл обрабатываем его содержимое 
      
if($file != "." && $file != ".."
      { 
        
// Если перед нами директория, вызываем рекурсивно 
        // функцию 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=1718

   
 
 автор: behrad   (27.07.2005 в 22:00)   письмо автору
 
   для: cheops   (27.07.2005 в 21:56)
 

mne nado eshe dliya kajdogo kataloga nado stavit chekbox i po najatie knopki vivesti vse fili ili katalogi katorie bila vibrana

   
 
 автор: cheops   (27.07.2005 в 22:21)   письмо автору
 
   для: behrad   (27.07.2005 в 22:00)
 

Хм... тогда следует выводить и файлы, но скрывать их при помощи тэга <div>, а потом, по нажатию на checkbox отображать их http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=3508
<?php 
  scan_dir
("scripts"); 
  
$i 0;
  
////////////////////////////////////////////////////////// 
  // Рекурсивная функция - спускаемся вниз по каталогу 
  ////////////////////////////////////////////////////////// 
  
function scan_dir($dirname
  { 
    
// Открываем текущую директорию 
    
$dir opendir($dirname); 
    
// Читаем в цикле директорию 
    
while (($file readdir($dir)) !== false
    { 
      
// Если файл обрабатываем его содержимое 
      
if($file != "." && $file != ".."
      { 
        
// Если это файл - выводим его скрытым
        
if(is_file($dirname."/".$file)) 
        { 
          echo 
"<div style='display:none'>".$dirname."/".$file."</div>"
        }
        
// Если перед нами директория, вызываем рекурсивно 
        // функцию scan_dir 
        
if(is_dir($dirname."/".$file)) 
        { 
          echo 
"<input type='checkbox' onclick='showhide($i)'>".$dirname."/".$file."<br>"
          
scan_dir($dirname."/".$file); 
        } 
      } 
    } 
    
// Закрываем директорию 
    
closedir($dir); 
  } 
?>

Задача большая и требует привлечения JavaScript http://www.softtime.ru/forum/index.php?id_forum=4

   
 
 автор: [CHOL]Scorpion   (27.07.2005 в 22:21)   письмо автору
 
   для: behrad   (27.07.2005 в 22:00)
 

2 cheops

Что-то я замечаю народ приходит всё чаще не за советом, а за тем чтоб им по заказу написали нахаляву скрипт. Печально :(

2 behrad

Тебе дали код как прочитать содержимое каталога. Подумай немного и доделай как тебе нужно. Не писать же за тебя всю программу. А ключевой алгоритм тебе дали. Теперь только воспользоваться мозгами и рекурсией нужно.

   
 
 автор: cheops   (27.07.2005 в 22:31)   письмо автору
 
   для: [CHOL]Scorpion   (27.07.2005 в 22:21)
 

>Что-то я замечаю народ приходит всё чаще не за советом, а за
>тем чтоб им по заказу написали нахаляву скрипт. Печально :(
Если скрипт небольшой, его написать нетрудно и полезно - это по аналогии со спортом, хорошая тренировка для отвечающего, позволяющая держаться в тонусе. Кроме того, многим нужен работающий скрипт, чтобы действительно разобраться в проблеме и решать остальные задачи по аналогии.
Большой скрипт в рамках форума разработать практически невозможно - поэтому такие темы здесь либо просто игнорируются, либо ведётся дискуссия по алгоритму и идеям.

   
 
 автор: behrad   (27.07.2005 в 22:32)   письмо автору
 
   для: [CHOL]Scorpion   (27.07.2005 в 22:21)
 

a mojna li reshit etot vapros bez rekursi ?
esli znaite daite silku ili primer kak eta sdelat!
zarane sposiba

   
 
 автор: cheops   (27.07.2005 в 22:36)   письмо автору
 
   для: behrad   (27.07.2005 в 22:32)
 

Если нужно обходить вложенные директории, то без рекурсии обойтись нельзя, вернее можно, но получится ещё хуже - деревья - это единственный вид задач, где целесообразно применение рекурсии.

   
 
 автор: behrad   (27.07.2005 в 22:42)   письмо автору
 
   для: cheops   (27.07.2005 в 22:36)
 

ya ponimau shto tak omijna !
mne nado sdelat tak shtobi vivolilos vse imena filov i pod katalogov i ikh saderjimoe.
i dliya kajdovo iz nikh sushestvoval check box .
polzovatel doljen vibrat kakie nebud fili i posle najatie knopki zapisivalos v file imena filov katorie polzovatel vibral

   
 
 автор: cheops   (27.07.2005 в 22:54)   письмо автору
 
   для: behrad   (27.07.2005 в 22:42)
 

А обязателен ли checkbox - просто код с использованием сплава JavaScript+HTTP+PHP очень сложно отлаживать. Может просто каждая директория будет ссылкой, при нажатии на которую выводится её содержимое (поддиректории и файлы), а при нажатии на ссылку поддиректории будет выводится содержимое поддиректории?

   
 
 автор: behrad   (27.07.2005 в 22:58)   письмо автору
 
   для: cheops   (27.07.2005 в 22:54)
 

obizatelen checkbox , shtobi polzovatel mog odnavremeno vibrat neskolka filov !!
voi i vsa problema

   
 
 автор: cheops   (27.07.2005 в 23:00)   письмо автору
 
   для: behrad   (27.07.2005 в 22:58)
 

Так checkbox-ы должны быть только у файлов или у файлов и директорий?

   
 
 автор: behrad   (27.07.2005 в 23:15)   письмо автору
 
   для: cheops   (27.07.2005 в 23:00)
 

u filov i katalogov .
na primer vibran glavni katalog to vse ego pod katalog i fili i toje doljnio bit vibrani

   
 
 автор: [CHOL]Scorpion   (28.07.2005 в 06:22)   письмо автору
 
   для: behrad   (27.07.2005 в 23:15)
 

Нехилый скриптик получится.

Это во первых нужно прочитать дирректорию, и выдав HTML код прописать в чекбокс как идентификатор объекта его индекс в массиве файлов. Тогда при выводе в цикле можно отфильтровывать мусор. А вот учитывая что тут ещё и подкаталоги ... У меня пока ступор по вопросу применения сего алгоритма для вложеных дирректорий. Еслиб их был один уровень внутри каталога, можно было бы ввести двухмерный массив в качестве имени чекбокса. А когда вложеных уровней больше одного, этот способ непреемлим.

   
 
 автор: [CHOL]Scorpion   (28.07.2005 в 07:03)   письмо автору
 
   для: behrad   (27.07.2005 в 23:15)
 

Дубль два.

Я тут посидел, подумал, и за завтраком родилась такая идея. Прочитать все файлы и папки из каталога в виде одного массива. Для никсовых систем это команда find.

После этого каждый из каталогов формируем командой ls (это на мой взгляд лучше чем парсить результат выполнения find). И когда формируется файловое древо, записывать в checkbox индекс соответствующиего файла/каталока из массива возвращённого find. Таким образом мы избегаем многоуровневой системы идентификаторов.

Я надеюсь сама идея ясна ... При реализации конечно нужно учесть специфику проверок путей.

   
 
 автор: behrad   (28.07.2005 в 16:34)   письмо автору
 
   для: [CHOL]Scorpion   (28.07.2005 в 07:03)
 

ideya khorosha
nu est problema !
ya ne mogu zagnat imena filov i katalogov v massiv potomu shto idet rekursiya !!!
kak mne pro indeksivovat checkbox .
i eshe vapros kak mne vivesti viprannie checkbox-i .
vot cod katori ispolzou

if (isset($_POST['checkBox']))
{
  print_r($_POST);
 echo $Files = $_POST[checkBox'];
}
echo '<form method="post" action="">';

  scan_dir(".");
  //$i=0;
  function scan_dir($dirname)
  {
    $dir = opendir($dirname);
    while (($file = readdir($dir)) != false)
    {
      if($file != "." && $file != "..")
      {
        if(is_file($dirname."/".$file))
        {
                $STR=$dirname."/".$file;
                $arr=split('/',$STR);
                while(list($key,$value)= each ($arr))
                {
                echo '&nbsp;&nbsp; ';
                }
                echo '<input type="checkbox" name="checkBox" value="Che|'.$dirname."/".$file.'">'.$STR." - "."<br>";
        }
        if(is_dir($dirname."/".$file))
        {
                $STR=$dirname."/".$file;
                $arr=split('/',$STR);
                while(list($key,$value)= each ($arr))
                {
                echo '&nbsp;&nbsp;   ';

                }
         echo '<input type="checkbox" name="checkBox"  value="Che|'.$dirname."/".$file.'">'.$STR."<br>";

          scan_dir($dirname."/".$file,$fd,$fb);
        }
      }

    }
    closedir($dir);
  }
 echo '<input type="submit" value="Push">';
echo '</form>';

   
 
 автор: [CHOL]Scorpion   (28.07.2005 в 17:31)   письмо автору
 
   для: behrad   (28.07.2005 в 16:34)
 

По поводу рекурсии, я тебе предложил вариант, ты им не воспользовался. Других вариантов у меня нет.

   
 
 автор: behrad   (28.07.2005 в 18:58)   письмо автору
 
   для: [CHOL]Scorpion   (28.07.2005 в 17:31)
 

u mniya vot problema shto ne mogu formirovat massiv iz imen filov i katalogov!
pri rekursi chetchik zbivaetsa !
a pro vash variant mojna po padrobne !
P.S. zaranee sposiba

   
 
 автор: [CHOL]Scorpion   (29.07.2005 в 09:55)   письмо автору
 
   для: behrad   (28.07.2005 в 18:58)
 

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


мой вариант состоял в том, что:


$dir = "arhiv/";  // корневая папка в которой лежат остальные
exec ("ls ".$dir,$files); // теперь в массиве files лежат названия всех файлов и каталогов включая . и ..

for ($i=0; $i<count($files); $i++){
       if ($files[$i] != "." && $files[$i] != ".."){
           выполняем то что нужно
       }
}


Это я привёл пример получения содержимого дирректории.

Для твоих целей его можно модернизировать. Для начала ввести exec("find ".$dir,$allfiles); Массив $allfiles будет содержать индексы и названия всех файлов в указаной дирректории. Причём не одного уровня, а всех.

теперь. обходя локализованый массив $files нужно сапоставлять значение элемента с массивом $allfiles. Допустим тождество найдено. Теперь задача взять ключ элемента массива $allfiles и записать его в чекбокс.

Потом, когда наживаешь кнопочку для вывода только отмеченых файлов, выполнить команду find как показано выше, и во время обхода массива через while вывести только те элементы, ключь которых есть в массиве, образованом чекбоксами. (А можно и точно также через find и ls выводить, просто принтить опятьже только совпадения с содержимым чекбоксов)

----
Есть и другой способ, исключающий использование ls и всецело построеные на find. Но он гораздо сложнее с точки зрения реализации.

   
Rambler's Top100
вверх

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