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]   

> Описание: очень нужно
rainer
Отправлено: 30 Января, 2012 - 09:37:58
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2012  


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




объясните код подробно пожалуйста. можно ли этот код уменшить?

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. function dirs($dir, $tab) {
  4.         $d = opendir($dir);
  5.                 while ( $name = readdir($d) ) {
  6.                         if ( $name == "." or $name == ".." ) continue;
  7.                         if ( is_dir($name) ) {
  8.                                 echo "<b>" . $tab . "[$name]</b><br>";
  9.  
  10.                                 $tab2 = $tab. "-----------";
  11.                                 dirs($dir . "/$name", $tab2);
  12.                         }
  13.                         else {
  14.                                 echo "$tab$name<br>";
  15.                         }
  16.                 }
  17.         closedir($d);
  18. }
  19.  
  20. dirs(".", "");
  21.  
  22. ?>
 
 Top
ugin_root
Отправлено: 01 Февраля, 2012 - 09:07:27
Post Id


Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Май 2011  
Откуда: Киргизия


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




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. //Объявляем функцию с двумя параметрами
  3. //первый коталог который нужно отрисовать
  4. //второй то что нужно добавить перед именем подкаталогов и файлов внутри
  5. function dirs($dir, $tab) {
  6.         //Получаем дескриптор каталога
  7.         $d = opendir($dir);
  8.         while($name = readdir($d)){//читаем следующую запись о содержимом каталога, пока записи не закончатся
  9.                 //Если это указатель на текущую папку '.'
  10.                 //или указатель на родителиский каталог '..' пропускаем
  11.                 if ( $name == "." or $name == ".." ) continue;
  12.                 //Если текущий элемент это папка то
  13.                 if ( is_dir($name) ) {
  14.                         //выводим её имя
  15.                         echo "<b>" . $tab . "[$name]</b><br>";
  16.                         $tab2 = $tab. "-----------";
  17.                         //и отображаем её содержимое (вызываем эту-же функцию в простонародьё рекурсия)
  18.                         dirs($dir . "/$name", $tab2);
  19.                 }
  20.                 //если это не папка то
  21.                 else {
  22.                         //просто отображаем имя
  23.                         echo "$tab$name<br>";
  24.                 }
  25.         }
  26.         // Освободить дескриптор каталога
  27.         closedir($d);
  28. }
  29.  
  30. //Построить дерево подкаталогов и файлив
  31. //находящихся в текущей дериктории '.'
  32. //и добавить перед каждыи именем пустую строку ""
  33. dirs(".", "");


И нет, код уменьшить нельзя, нету ничего лишнего.

(Отредактировано автором: 01 Февраля, 2012 - 09:09:46)

 
 Top
illy
Отправлено: 01 Февраля, 2012 - 11:20:08
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


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




rainer пишет:
можно ли этот код уменшить?

нет ничего невозможного
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function dirs($dir, $tab){
  3. $d=opendir($dir);
  4. while($name=readdir($d)){
  5. if($name=='.' or $name=='..') continue;
  6. if(is_dir($name)){
  7. echo '<b>'.$tab.'[$name]</b><br>';
  8. $tab2=$tab.'-----------';
  9. dirs($dir.'/$name', $tab2);
  10. }
  11. else{
  12. echo '$tab$name<br>';
  13. }}
  14. }
  15. dirs('.','');
  16. ?>


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
Slesher
Отправлено: 01 Февраля, 2012 - 11:35:30
Post Id


Гость


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


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




illy, вы что просто пустые строки повырезали
 
 Top
Okula
Отправлено: 01 Февраля, 2012 - 12:27:40
Post Id



Участник


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


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




Функции opendir() readdir() и closedir() заменяются одной функцией: scandir()
Или можно использовать рекурсивные итераторы, там ещё меньше кода будет.
 
 Top
illy
Отправлено: 01 Февраля, 2012 - 12:35:29
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


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




Slesher пишет:
Slesher

и заменил " на ' и лишние переводы строки убрал Хорошо


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
snikers987
Отправлено: 01 Февраля, 2012 - 14:06:38
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


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




illy и превратили код в нечитабельную кашу.


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
DlTA
Отправлено: 01 Февраля, 2012 - 15:33:07
Post Id



Постоянный участник


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


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




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function dirs($dir, $tab) {
  3.   $d = scandir($dir);
  4.   foreach($d as $name){
  5.     if ( $name == "." or $name == ".." ) continue;
  6.     if ( is_dir($name) ) {
  7.       echo "<b>$tab[$name]</b><br>";
  8.       dirs($dir . "/$name", $tab."-----------");
  9.     }
  10.     else echo "$tab{$name}<br>";
  11.   }
  12. }
  13. ?>

как то так

(Отредактировано автором: 01 Февраля, 2012 - 15:34:08)

 
 Top
illy
Отправлено: 01 Февраля, 2012 - 16:12:36
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


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




snikers987 пишет:
превратили код в нечитабельную кашу

мне всё читаемо Ха-ха


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
Bio man
Отправлено: 01 Февраля, 2012 - 16:34:21
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




illy пишет:
и заменил " на '
зачем? в одинарных переменные не читаются!!!
(Добавление)
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function dirs($dir, $tab) {
  3.         foreach(scandir($dir) as $name){
  4.                 if($name == '.' or $name == '..') continue;
  5.                 if (is_dir($name)){
  6.                         echo '<b>' . $tab . "[$name]</b><br>";
  7.                         dirs("$dir/$name", $tab."-----------");
  8.                 }
  9.                 else echo "$tab$name<br>";
  10.         }
  11. }
  12. dirs(".", "");
  13. ?>

(Добавление)
DlTA, блин, твой код скопировал)) не читал прежде чем написать

(Отредактировано автором: 01 Февраля, 2012 - 16:40:52)

 
 Top
Okula
Отправлено: 01 Февраля, 2012 - 19:20:50
Post Id



Участник


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


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




Нужно задать аргументам функции дифолтные значения, если они передаются пустые (или корневой каталог как в первом аргументе).
PHP:
скопировать код в буфер обмена
  1. function dirs($dir='.', $tab='') { ... }
 
 Top
Al_Capone
Отправлено: 06 Апреля, 2012 - 10:45:42
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Апр. 2012  


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




privet vsem ne mojna eta skripta <?PHP

function dirs($dir, $tab) {
$d = opendir($dir);
while ( $name = readdir($d) ) {
if ( $name == "." or $name == ".." ) continue;
if ( is_dir($name) ) {
echo "<b>" . $tab . "[$name]</b><br>";

$tab2 = $tab. "-----------";
dirs($dir . "/$name", $tab2);
}
else {
echo "$tab$name<br>";
}
}
closedir($d);
}

dirs(".", "");

?> rabotaet v saite ?
Однако
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB