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
Форумы портала PHP.SU :: Версия для печати :: объясните код подробно, спасибо
Форумы портала PHP.SU » » Работа с файловой системой и файлами » объясните код подробно, спасибо

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

1. rainer - 30 Января, 2012 - 09:37:58 - перейти к сообщению
объясните код подробно пожалуйста. можно ли этот код уменшить?

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. ?>
2. ugin_root - 01 Февраля, 2012 - 09:07:27 - перейти к сообщению
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(".", "");


И нет, код уменьшить нельзя, нету ничего лишнего.
3. illy - 01 Февраля, 2012 - 11:20:08 - перейти к сообщению
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. ?>
4. Slesher - 01 Февраля, 2012 - 11:35:30 - перейти к сообщению
illy, вы что просто пустые строки повырезали
5. Okula - 01 Февраля, 2012 - 12:27:40 - перейти к сообщению
Функции opendir() readdir() и closedir() заменяются одной функцией: scandir()
Или можно использовать рекурсивные итераторы, там ещё меньше кода будет.
6. illy - 01 Февраля, 2012 - 12:35:29 - перейти к сообщению
Slesher пишет:
Slesher

и заменил " на ' и лишние переводы строки убрал Хорошо
7. snikers987 - 01 Февраля, 2012 - 14:06:38 - перейти к сообщению
illy и превратили код в нечитабельную кашу.
8. DlTA - 01 Февраля, 2012 - 15:33:07 - перейти к сообщению
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. ?>

как то так
9. illy - 01 Февраля, 2012 - 16:12:36 - перейти к сообщению
snikers987 пишет:
превратили код в нечитабельную кашу

мне всё читаемо Ха-ха
10. Bio man - 01 Февраля, 2012 - 16:34:21 - перейти к сообщению
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, блин, твой код скопировал)) не читал прежде чем написать
11. Okula - 01 Февраля, 2012 - 19:20:50 - перейти к сообщению
Нужно задать аргументам функции дифолтные значения, если они передаются пустые (или корневой каталог как в первом аргументе).
PHP:
скопировать код в буфер обмена
  1. function dirs($dir='.', $tab='') { ... }
12. Al_Capone - 06 Апреля, 2012 - 10:45:42 - перейти к сообщению
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 ?
Однако

 

Powered by ExBB FM 1.0 RC1