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

Форум PHP

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

 

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

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

тема: Заваруха со считыванием дирректорий и поддиректорий
 
 автор: totx   (10.08.2005 в 23:02)   письмо автору
 
 

Вобщем код таков:

<?php
$folder 
'name_directory';
unset(
$dirs);
$dir opendir($folder);
while(
$line readdir($dir))
{ if(
is_dir($folder."/".$line) && $line!="." && $line!="..")
    { 
$dirs[] = $line$i++; }
}
//Делаем проверку
if(!empty($dirs))
sort($dirs);
 for (
$i=0;$i<sizeof($dirs);$i++)
 { 
$name $dirs[$i];
 echo 
"<b>".$name."</b> существует<br>";
  if(
$open_dir2 opendir($folder.'/'.$name))
  {
  echo 
"Продолжаем читать дирректорию <b>".$name."</b><br>";
        
$folder2 ''.$folder.'/'.$name.'';
        unset(
$dirs2);
        
$dir2 opendir($folder2);
        while(
$r_dir2 readdir($dir2))
        { if(
is_dir($folder2."/".$r_dir2) && $r_dir2!="." && $r_dir2!="..")
        { 
$dirs2[] = $r_dir2$i2++; }
        }
        if(!empty(
$dirs2)) {
        
sort($dirs2);
        for (
$i2=0;$i2<sizeof($dirs2);$i2++)
        {
        
$name2 $dirs2[$i2];
        echo 
"Еще Продолжаем читать дирректорию <b>".$name2."</b><br>";
            
$folder3 ''.$folder.'/'.$name.'/'.$name2.'';
            unset(
$dirs3);
            
$dir3 opendir($folder3);
            while(
$r_dir3 readdir($dir3))
            { if(
is_dir($folder3."/".$r_dir3) && $r_dir3!="." && $r_dir3!="..")
              { 
$dirs3[] = $r_dir3$i3++; }
            }
            if(!empty(
$dirs3)) {
            
sort($dirs3);
            for (
$i3=0;$i3<sizeof($dirs3);$i3++)
            {
            
$name3 $dirs3[$i3];
            echo 
"Еще Продолжаем читать дирректорию <b>".$name3."</b><br>";
               
$folder4 ''.$folder.'/'.$name.'/'.$name2.'/'.$name3.'';
               unset(
$dirs4);
               
$dir4 opendir($folder4);
               while(
$r_dir4 readdir($dir4))
               { if(
is_dir($folder4."/".$r_dir4) && $r_dir4!="." && $r_dir4!="..")
                 { 
$dirs4[] = $r_dir4$i4++; }
               }
               if(!empty(
$dirs4)) {
               
sort($dirs4);
               for (
$i4=0;$i4<sizeof($dirs4);$i4++)
               {
               
$name4 $dirs4[$i4];
               echo 
"Еще Продолжаем читать дирректорию <b>".$name4."</b><br>";
                  
$folder5 ''.$folder.'/'.$name.'/'.$name2.'/'.$name3.'/'.$name4.'';
                  unset(
$dirs5);
                  
$dir5 opendir($folder5);
                  while(
$r_dir5 readdir($dir5))
                  { if(
is_dir($folder5."/".$r_dir5) && $r_dir5!="." && $r_dir5!="..")
                    { 
$dirs5[] = $r_dir5$i5++; }
                  }
                  if(!empty(
$dirs5)) {
                  
sort($dirs5);
                  for (
$i5=0;$i5<sizeof($dirs5);$i5++)
                  {
                  
$name5 $dirs5[$i5];
                  echo 
"Еще Продолжаем читать дирректорию <b>".$name5."</b><br>";
                  }
                  }
                  else {
                  print 
"В дирректории ".$name4." нет папок.<br>";
                  }
               }
               }
               else {
               print 
"В дирректории ".$name3." нет папок.<br>";
               }
            }
            }
            else {
            print 
"В дирректории ".$name2." нет папок.<br>";
            }
//**прочитаем субдирректории
        
}

        }
        else {
        print 
"В дирректории ".$name." нет папок.<br>";
        }
//**прочитаем субдирректории
  
}
  else {
  print 
"В дирректории ".$folder." нет папок.<br>";
  }
 }
}
else { print 
"[null, 'Дирректория ".$folder." пуста', 'links', 'price', 1], <br>"; }
?>

Выдает (у меня):

1dir существует
Продолжаем читать дирректорию 1dir
Еще Продолжаем читать дирректорию name2
Еще Продолжаем читать дирректорию name3
В дирректории name3 нет папок.
Еще Продолжаем читать дирректорию name3_p
Еще Продолжаем читать дирректорию name4
Еще Продолжаем читать дирректорию name5
2dir существует
Продолжаем читать дирректорию 2dir
Еще Продолжаем читать дирректорию name2
В дирректории name2 нет папок.
3dir существует
Продолжаем читать дирректорию 3dir
В дирректории 3dir нет папок.

а надо чтобы выдавал

1dir существует
Продолжаем читать дирректорию 1dir
Еще Продолжаем читать дирректорию name2
В дирректории name3 нет папок.
Еще Продолжаем читать дирректорию name3_p
Еще Продолжаем читать дирректорию name4
В дирректории name5 нет папок.
2dir существует
Продолжаем читать дирректорию 2dir
В дирректории name2 нет папок.
3dir существует
В дирректории 3dir нет папок.

Может, кто-нить подскажет, что Я тут неверно делаю, можно с примерами :)

   
 
 автор: cheops   (11.08.2005 в 00:53)   письмо автору
 
   для: totx   (10.08.2005 в 23:02)
 

Вообще-то достаточно сложно уловить логику изменений, а исходная цель манипуляций?

   
 
 автор: totx   (11.08.2005 в 09:02)   письмо автору
 
   для: cheops   (11.08.2005 в 00:53)
 

Немножко урезал код, для наглядности:

<?php
$folder 
'name_dir';
unset(
$dirs);
$dir opendir($folder);
while(
$line readdir($dir))
{ if(
is_dir($folder."/".$line) && $line!="." && $line!="..")
    { 
$dirs[] = $line$i++; }
}
//Делаем проверку
if(!empty($dirs))
sort($dirs);
 for (
$i=0;$i<sizeof($dirs);$i++)
 { 
$name $dirs[$i];
 
//Делаем проверку
 
$r_dir_2 readdir(opendir($folder.'/'.$name));
 if(!empty(
$r_dir_2))
 {
 echo 
"Т.к. дирректория <b>".$name."</b> есть, проверим нет ли в ней папок ?<br>";
        
$folder2 ''.$folder.'/'.$name.'';
        unset(
$dirs2);
        
$dir2 opendir($folder2);
        while(
$r_dir2 readdir($dir2))
        { if(
is_dir($folder2."/".$r_dir2) && $r_dir2!="." && $r_dir2!="..")
        { 
$dirs2[] = $r_dir2$i2++; }
        }
        
sort($dirs2);
        for (
$i2=0;$i2<sizeof($dirs2);$i2++)
        {
        
$name2 $dirs2[$i2];
        
//Делаем проверку
        
$r_dir_3 readdir(opendir($folder.'/'.$name.'/'.$name2));
        if(!empty(
$r_dir_3)) {
        echo 
"Т.к. дирректория <b>".$name2."</b> точно пустая (да и скрипт не может читать поддиректории), то это сообщения не должно выдаваться, а должно выдаваться <h4>else</h4></b><br>";
        }
        else {
        print 
"В дирректории ".$name2." нет папок.<br>";
        }
        }

 }
 else {
        print 
"В дирректории ".$name." нет папок.<br>";
        }
 }
}
else { print 
"Дирректория ".$folder." пуста"; }
?>

Вложенность каталогов такова:
name_dir
-1dir
--2dir

Так вот по идее должно выдавать:

Т.к. дирректория 1dir есть, проверим нет ли в ней папок ?
В дирректории 2dir нет папок.

А выдает:

Т.к. дирректория 1dir есть, проверим нет ли в ней папок ?
Т.к. дирректория 2dir точно пустая (да и скрипт не может читать поддиректории), то это сообщения не должно выдаваться, а должно выдаваться 
else

Это я для наглядности сделал.
Если, что не ясно, я поясню.

   
 
 автор: totx   (11.08.2005 в 12:47)   письмо автору
 
   для: cheops   (11.08.2005 в 00:53)
 

Короче Я понял, у меня не получаеться проверить прочитана ли конечная дирректори, как сделать не подскажите ???

   
 
 автор: totx   (11.08.2005 в 16:35)   письмо автору
 
   для: totx   (11.08.2005 в 12:47)
 

Неужели никто не знает ?

   
 
 автор: cheops   (11.08.2005 в 19:06)   письмо автору
 
   для: totx   (11.08.2005 в 12:47)
 

Конечная это какая 2dir?

   
 
 автор: totx   (11.08.2005 в 19:35)   письмо автору
 
   для: cheops   (11.08.2005 в 19:06)
 

Конечная это там где делаем проверку if(!empty($dirs)) дальше if(!empty($r_dir_2)) и еще дальше if(!empty($r_dir_3))

   
 
 автор: totx   (12.08.2005 в 10:04)   письмо автору
 
   для: totx   (11.08.2005 в 19:35)
 

Че-то опять тишина, люди, здесь кто-нить кроме cheops-a разбирается в PHP ?

   
 
 автор: cheops   (12.08.2005 в 12:20)   письмо автору
 
   для: totx   (12.08.2005 в 10:04)
 

Вероятно тема не вызывает ажиотажа, так как очень сложно разобраться в коде... как-то очень сложно организован - требуется длительное время что-бы понять что откуда растёт, поэтому все на него смотрят минут 10, чешут голову и идут к следующей теме :))) Обычно такой код составляют из универсальной функции которая читает содержимое директории и возвращает массив. Тогда код обхода становится более компактным и понятным - такая организация кода поможет разобоаться и вам в проблеме и нам помочь будет гораздо проще.

   
 
 автор: Андрюха.   (12.08.2005 в 12:56)   письмо автору
 
   для: cheops   (12.08.2005 в 12:20)
 


<?php
//        sort($dirs2);
        
for ($i2=0;$i2<sizeof($dirs2);$i2++)
        {
        
$name2 $dirs2[$i2];
        
//&Auml;&aring;&euml;&agrave;&aring;&igrave; &iuml;&eth;&icirc;&acirc;&aring;&eth;&ecirc;&oacute;
        
$r_dir_3 readdir(opendir($folder.'/'.$name.'/'.$name2));
        if(empty(
$r_dir_3)) {
?>

А если поизмыватся над условием???
выдает
Т.к. дирректория 1 есть, проверим нет ли в ней папок ?
В дирректории 11 нет папок.
Т.к. дирректория 2 есть, проверим нет ли в ней папок ?
Т.к. дирректория 3 есть, проверим нет ли в ней папок ?
В дирректории 31 нет папок.
В дирректории 32 нет папок.
В дирректории 33 нет папок.
Т.к. дирректория 4 есть, проверим нет ли в ней папок ?
Т.к. дирректория 5 есть, проверим нет ли в ней папок ?
В дирректории 51 нет папок.
В дирректории 52 нет папок.
В дирректории 53 нет папок.
Т.к. дирректория 6 есть, проверим нет ли в ней папок ?

   
 
 автор: cheops   (12.08.2005 в 13:10)   письмо автору
 
   для: Андрюха.   (12.08.2005 в 12:56)
 

Хм... а структура директорий какая?

   
 
 автор: Андрюха.   (12.08.2005 в 15:22)   письмо автору
 
   для: cheops   (12.08.2005 в 13:10)
 

Это Вы меня???
1- корневая
11-подкаталог

   
 
 автор: totx   (12.08.2005 в 19:06)   письмо автору
 
   для: Андрюха.   (12.08.2005 в 15:22)
 

Да мне все-то нужно проверить пустая ли прочитанная дирректория.
-если пустая -=FALSE=-
-если не пустая -=TRUE=-
Забудте вы этот код, что сверху, напишите самый простой, свой код.А код оптимизирую, когда наведу мосты окончательно.

   
 
 автор: cheops   (12.08.2005 в 19:22)   письмо автору
 
   для: totx   (12.08.2005 в 19:06)
 

Просто для директории или нужно осуществить спуск вниз по дереву директорий?

   
 
 автор: totx   (12.08.2005 в 21:35)   письмо автору
 
   для: cheops   (12.08.2005 в 19:22)
 

Мне нужно просто для прочитанной дирректории.
А, что ты имел ввиду под:

спуск вниз по дереву директорий

Если не сложно покажи разницу.

   
 
 автор: cheops   (12.08.2005 в 22:44)   письмо автору
 
   для: totx   (12.08.2005 в 21:35)
 

Допустим скрипт для проверки пустая директория или нет может выглядеть следующим образом:
<?php
  
// Имя директории
  
$dirname=".";
  if(
is_empty_dir($dirname)) echo "В директории имеются файлы";
  else echo 
"Директория пуста";
  
// Функция, которая проверяет имеются в 
  // директории файлы или нет
  
function is_empty_dir($dirname)
  { 
    
// Открываем директорию
    
$dir opendir($dirname);
    
// Читаем директорию
    
while ($file readdir($dir))
    {
      if (
is_file($dirname."/".$file))
      {
        
// Закрываем директорию
        
closedir($dir);
        return 
true;
      }
    }
    
// Закрываем директорию
    
closedir($dir);
    return 
false;
  }
?>

Однако он проверит только одну директорию, если нужно проверить файлых всех вложенных друг в друга директорий, то прибегают к рекурсивному спуску по дереву директорий, как например в скриптах
http://www.softtime.ru/scripts/replace.php
http://www.softtime.ru/scripts/numlines.php
http://www.softtime.ru/scripts/ftpscaner.php

   
Rambler's Top100
вверх

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