Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Нужна помощь с каталогами

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Andruxa
Отправлено: 15 Марта, 2010 - 09:39:19
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




Доброго всем здравия
Нужна помощь в работе с каталогами.

Проблема заключается в следующем.
Имеется каталог например kartinki в это каталоге имеются свои подкаталоги, например природа, спорт, жизнь и т.д.

Задача в следующем:
1) вывести список из каталога kartinki
2) вывести число файлов в подкаталогах.

С первой задачей я справился:
PHP:
скопировать код в буфер обмена
  1. <?
  2.  $dir = opendir ("kartinki");
  3.  while ( $file = readdir ($dir))
  4.  {
  5.    if (( $file != ".") && ($file != ".."))
  6.    {
  7.      echo "$file<br>";
  8.    }
  9.  }
  10.  closedir ($dir);
  11. ?>


результат выводит то что нужно:
природа
спорт
жизнь
и т.д.

Но хотелосьбы отображение и количества файлов в подкаталогах, вида:
природа (2)
спорт (0)
жизнь (55)

Подскажите как можно подсчитать кол-во файлов, пробовал еще один opendir ("$file") в цикле , не без результатно Недовольство, огорчение

(Отредактировано автором: 15 Марта, 2010 - 15:11:21)

 
 Top
JustUserR
Отправлено: 15 Марта, 2010 - 11:25:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Andruxa пишет:
одскажите как можно подсчитать кол-во файлов
Вас интересует рекурсивное число файлов в подкаталогах или число файлов в корне подкаталога? В принципе подход одинаковый только в первом случае нужна рекурсия а во втором можно просто сделать вложенный цикл - при этом при указании readdir внутри подкаталогов используйте относительный/полный путь до них потому что chdir автоматически не происходит и файлы будут читаться не те - то есть именно вы читатет readdir("kartinki/$file") при условии isdir($file)


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Andruxa
Отправлено: 15 Марта, 2010 - 15:03:52
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




Да, мне нужно узнать кол-во файлов в подкаталогах.

JustUserR если можно поподробнее, как в моем случае использовать is_dir ($file)
.....
природа (2) <- кол-во файлов в подкаталоге
.....

(Отредактировано автором: 15 Марта, 2010 - 15:12:40)

 
 Top
JustUserR
Отправлено: 15 Марта, 2010 - 15:35:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Andruxa пишет:
Да, мне нужно узнать кол-во файлов в подкаталогах. JustUserR если можно поподробнее, как в моем случае использовать is_dir ($file)
Попробуйте использовать следующий код
PHP:
скопировать код в буфер обмена
  1. <? $subdir_list=array();
  2. $dir=opendir("kartinki");
  3. while($file=readdir($dir))
  4. {if(($file!=".")&&($file != "..")&&(is_dir($file)))
  5. {$v_dir=opendir("kartinki/$file");
  6. $nm=0; while($x=readdir($dir)) {
  7. if(($file!=".")&&($file != "..")&&(!is_dir($file))) {$nm++;}
  8. else {}}
  9. closedir($v_dir);
  10. $subdir_list["$file"]=$nm;}
  11. }
  12. closedir ($dir);
  13. ?>
В результате в хеш-массиве $subdir_list будут имена подкаталогов и количетсво файлов в них - при этом подкаталоги 2 уровня и файлы в них не учитваются - если вы хотите учитывать и их то нужен рекурсивных подход


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
jfr
Отправлено: 15 Марта, 2010 - 18:45:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 332
Дата рег-ции: Март 2010  
Откуда: Таджикистан, Худжанд


Помог: 0 раз(а)

[+]


PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4.  $dir = opendir ("kartinki");
  5.  while ( $folder = readdir ($dir))
  6.  {
  7.    if (( $folder != ".") && ($folder != ".."))
  8.    {
  9.  
  10.      $dir2=opendir("kartinki/$folder");
  11.      while ($file=readdir($dir2))
  12.      {
  13.      if (($file !=".") && ($file != ".."))
  14.      { $count++;} }
  15.      closedir($dir2);
  16.  
  17.     echo $folder." $count<br>";
  18.     $count=0;
  19.    }
  20.  }
  21.  closedir ($dir);
  22.  
  23.  
  24.  
  25. ?>
  26.  
 
 Top
Andruxa
Отправлено: 15 Марта, 2010 - 19:33:50
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




jfr Спасибо большое, то что нужно, все работает!!!

Если можно попутно по скрипту задам пару вопросов.
(стр. 14) тут понятно, count увеличивается на +1 до окончания цикла.
(стр. 18) вот тут я не совсем понял почему count=0 ?

И еще, если делать ссылки на каталоги
echo "<a href='$folder'>$folder</a> (<b>$count</b>)<br>";
то русские названия каталогов отображаются нечитабельно. Можно этого как то избежать или всетаки не стоит выбирать в названии каталогов русское написание ?

P.S. Пока единственный форум на котором я смог получить реальный ответ на свой вопрос, а не посыл на поиск Улыбка Всем спасибо!
 
 Top
jfr
Отправлено: 15 Марта, 2010 - 19:47:13
Post Id



Посетитель


Покинул форум
Сообщений всего: 332
Дата рег-ции: Март 2010  
Откуда: Таджикистан, Худжанд


Помог: 0 раз(а)

[+]


пожалуйста Улыбка , допустим у тебя в первой папке 1 рисунок во второй 2, а в третей 3, когда считаем то у нас выйдет например первая папка 1, вторая папка 1+2, третья папка 1+2+3, чтобы избежать этого мы обнуляем счетчик, тоесть $count=0; и после этого у нас должен выйти первая папка 1, вторая папка 2, третья папка 3, что и правильно Улыбка ; Что касается названия файлов, и каталогов лучше всего исползовать латинские буквы. Улыбка

(Отредактировано автором: 15 Марта, 2010 - 19:48:23)

 
 Top
Andruxa
Отправлено: 10 Апреля, 2010 - 20:56:16
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




Не хочется плодить еще одну тему, поэтому задам еще вопросик по каталогам тут.
Очень нужна ваша помощь.
Как вывести из каталога постранично картинки (скажем меленькие аватарки 100х100px)

Сейчас я все в куче вывожу из каталога вот так:
PHP:
скопировать код в буфер обмена
  1. if ($action=="wiev_cat")
  2. {
  3.         $iii=0;
  4.         $dir = opendir ("../avatars/$cat");
  5.         echo"<table border=1 ><tr>";
  6.  while ( $file = readdir ($dir))
  7.  {
  8.    if (( $file != ".") && ($file != ".."))
  9.    {
  10.        echo "<td><img src=../avatars/$cat/$file  border=0><a href=?do=avatarki&action=dell_av&cat=$cat&avik=$file>
  11.       <br /><img src=../img/delete.gif border=0></a> </td>";
  12.    $iii++;
  13.    if( $iii==5) { echo "</tr>"; $iii=0;}
  14.    }
  15.  }
  16.  echo"</table>";
  17.  closedir ($dir);
  18. }

Выводит все нормально но массово, а как вывести постранично по 25 аватарок? (5 столбцов, 5 строчек)?
 
 Top
jfr
Отправлено: 11 Апреля, 2010 - 00:03:42
Post Id



Посетитель


Покинул форум
Сообщений всего: 332
Дата рег-ции: Март 2010  
Откуда: Таджикистан, Худжанд


Помог: 0 раз(а)

[+]


PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  $dir = opendir ("kartinki");
  3.  while ( $folder = readdir ($dir))
  4.  {
  5.    if (( $folder != ".") && ($folder != ".."))
  6.    {
  7.  
  8.      $dir2=opendir("kartinki/$folder");
  9.      while ($file=readdir($dir2))
  10.      {
  11.      if (($file !=".") && ($file != ".."))
  12.      { $count++;
  13.  
  14. $string = $file;
  15. $im     = imagecreatefrompng("kartinki/$folder/$file");
  16. $orange = imagecolorallocate($im, 220, 210, 60);
  17. $px     = (imagesx($im) - 7.5 * strlen($string)) / 2;
  18. imagestring($im, 3, $px, 8, $string, $orange);
  19. imagepng($im);
  20.  
  21.      } }
  22.      closedir($dir2);
  23.  
  24.     echo $folder." $count<br>";
  25.     $count=0;
  26.    }
  27.  }
  28.  closedir ($dir);
  29.  
  30. ?>
в папках изобрахения должны быть в формате png
 
 Top
JustUserR
Отправлено: 11 Апреля, 2010 - 14:23:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Andruxa пишет:
Выводит все нормально но массово, а как вывести постранично по 25 аватарок? (5 столбцов, 5 строчек)?
Вообще уменьшенные копии изображений лучше хранить в отдельной папке а не обрабатывать каждый раз - накладные расходы на хранение уменьшенных копий меньше чем на их создание при каждой загрузке PHP-скрипта
А для ограничения числа картинкок при выводе можете просто использовать порядковые номера - как они идут по очереди в списке файлов readdir (Если в момент показа добавлятся новые картинки то произойдет сдвиг - но это в общем нормальная ситуация и главное проверять чтобы они не вышли за предел Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Andruxa
Отправлено: 11 Апреля, 2010 - 20:47:44
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




jfr А как быть если у меня в папках картинки в jpg и gif форматах ?

JustUserR
Возможно я неправильно выразился, мне не нужны превью, мне нужно просто вывести аватарки из каталога постранично.

Да, еще такой вопрос. Может есть смысл сделать добавление аватарки через форму и имя файла хранить в БД и потом его от туда подставлять при отображении картинок ?

Что быстрее по выполнению? Считывание всех файлов из деректории или имена файлов из БД ?
 
 Top
JustUserR
Отправлено: 13 Апреля, 2010 - 13:27:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Andruxa пишет:
Что быстрее по выполнению? Считывание всех файлов из деректории или имена файлов из БД ?
Все-таки получение набора данных с именами файлов из БД как правило быстрее чем запрос списка файлов (Если они конечно не проиндексированы заранее Можно вообще зранить сами двоичные данные картинок в БД Улыбка
Andruxa пишет:
JustUserR Возможно я неправильно выразился, мне не нужны превью, мне нужно просто вывести аватарки из каталога постранично.
Я помню вам требовался постраничный вывод что можно считть агрументов в пользу БД - там проще сделать LIMIT чем при прямом получении списка файлов - хотя все зависит от ситуации ведь существует выборка файлов по маске и по количеству


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB