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

Форум PHP

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

 

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

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

тема: Помогите, ошибка в коде.
 
 автор: totx   (04.08.2005 в 15:04)   письмо автору
 
 

Вообщем Я тут наваял скриптик просмотра дирректорий и субдирректорий, но почему-то при чтении поддиректорий с каждым разом новые прибавляются к уже ранее прочитанным. Помогите со скриптом, вот он:

<?php
$folder 
'temp';
$dir opendir($folder);
while(
$line readdir($dir))
{
  if(
is_dir($folder."/".$line) && $line!="." && $line!="..")
  {
              
$dirs[] = $line;
              
$i++;
  }
}
sort($dirs);
for (
$i=0;$i<sizeof($dirs);$i++)
    {
    
$name $dirs[$i];
 print 
"".$name."<br>";
//начало считывания поддиректорий
$sfolder ''.$folder.'/'.$name.'';
$sdir opendir($sfolder);
while(
$sline readdir($sdir))
{
  if(
is_dir($sfolder."/".$sline) && $sline!="." && $sline!="..")
  {
              
$sdirs[] = $sline;
              
$i2++;
  }
}
sort($sdirs);
for (
$i2=0;$i2<sizeof($sdirs);$i2++)
    {
    
$sname $sdirs[$i2];
 print 
"&nbsp;&nbsp;".$sname."<br>";
}
//заканчиваем 2-ой блок
 
print "-----<br>";
}
?>

   
 
 автор: cheops   (04.08.2005 в 15:45)   письмо автору
 
   для: totx   (04.08.2005 в 15:04)
 

У вас не происходит обнуление временного массива перед использованием и он замусоривается предыдущими значениями. Ваш скрипт следует переписать следующим образом
<?php 
$folder 
'scripts'
$dir opendir($folder); 
while(
$line readdir($dir)) 

  if(
is_dir($folder."/".$line) && $line!="." && $line!=".."
  { 
              
$dirs[] = $line
              
$i++; 
  } 

sort($dirs); 
for (
$i=0;$i<sizeof($dirs);$i++) 

  
$name $dirs[$i]; 
  print 
"".$name."<br>"
  
//начало считывания поддиректорий 
  
$sfolder ''.$folder.'/'.$name.''
  
// Обнуляем массив $sdirs
  
unset($sdirs);
  
$sdir opendir($sfolder); 
  while(
$sline readdir($sdir)) 
  { 
    if(
is_dir($sfolder."/".$sline) && $sline!="." && $sline!=".."
    { 
      
$sdirs[] = $sline
      
$i2++; 
    } 
  } 
  
// Если массив $sdirs не пуст - сортируем его
  
if(!empty($sdirs)) sort($sdirs); 
  for (
$i2=0;$i2<sizeof($sdirs);$i2++) 
  { 
    
$sname $sdirs[$i2]; 
    print 
"&nbsp;&nbsp;".$sname."<br>"
  } 
  
//заканчиваем 2-ой блок 
  
print "-----<br>"

?>

   
 
 автор: totx   (04.08.2005 в 17:44)   письмо автору
 
   для: cheops   (04.08.2005 в 15:45)
 

Большое спасибо, не думал, что так быстро ответят, и ответят вообще. Еще раз большое спасибо.

   
 
 автор: totx   (04.08.2005 в 19:17)   письмо автору
 
   для: totx   (04.08.2005 в 17:44)
 

Подскажите код со следующими правилами:
А, если при чтении в диреектории - поддирректории есть, то нужно при выведении на страницу стирать последних 2 символа(буквы) названия дирректории.
тоесть:

  print "дирректория"<br>"; 
//а как оказалось есть и поддиректории, то нужно вывести "дирректор"
  print "есть поддиректории"<br>";
//а уже после  "есть поддиректории"

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

Здесь логика такая же как и в случае с сортировкой
<?php
 
if(!empty($sdirs)) sort($sdirs);
?>

Если массив $sdirs содержит хоть один элемент, значит имеются поддиректории
<?php
 
if(!empty($sdirs))
 {
   echo 
"дирректор<br>";
   echo 
"есть поддиректории"<br>";
 }
 else
 {
   echo "
дирректория"<br>";
 }
?>

   
 
 автор: totx   (04.08.2005 в 23:51)   письмо автору
 
   для: cheops   (04.08.2005 в 22:11)
 

Вы класно и правильно ответили на мой вопрос, но не до конца поняли чего Я хочу, к сожалению мне сложно объяснить, сейчас объясню попроще.
Т.к. функция readdir($dir) читает каталог, а если читать больше нечего то возвращает false, то нужно чтобы когда она возвращала false она делала заданное мной действие(типа print "".$name."<br> - минус 2 символа от имени последней прочитанной дирректории";)
Желательно если Вы хоть немного поможите с этим кодом, но можете и свой:

<?php
$folder 
'temp';
$dir opendir($folder);
while(
$line readdir($dir))
{
  if(
is_dir($folder."/".$line) && $line!="." && $line!="..")
  {
              
$dirs[] = $line;
              
$i++;
  }
}
sort($dirs);
for (
$i=0;$i<sizeof($dirs);$i++)
{
  
$name $dirs[$i];
  print 
"".$name."<br>";
}
?>

   
Rambler's Top100
вверх

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