За последние 24 часа нас посетили 57652 программиста и 1849 роботов. Сейчас ищут 880 программистов ...

Помогите понять в чём дело.

Тема в разделе "PHP для новичков", создана пользователем gambini, 23 мар 2013.

  1. gambini

    gambini Активный пользователь

    С нами с:
    23 июл 2012
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте! Просматривал урок по php и делал всё в точности как было показано в уроке. Полностью скопировал код как говорится от точки до точки. Только вот проблема в том, что на видео уроке список содержимого директории выводится с прочерками перед название, а названия папок жирным начертанием и в квадратных скобках. А у меня выводится просто список без чёрточек, жирности и т.д. Помогите понять почему это так. Вот код:
    Код (PHP):
    1. <?php
    2.  
    3. function dirs($dir, $tab) {
    4.   $d = opendir($dir);
    5.   while ($name = readdir($d)) {
    6.     if ($name == "." or $name == "..")
    7.       continue;
    8.     if (is_dir($name)) {
    9.       echo "<b>" . $tab . "[$name]</b><br>";
    10.       $tab .= '-';
    11.       dirs($dir . "/$name", $tab);
    12.     }
    13.     else
    14.       echo "$tab$name<br>";
    15.   }
    16.   closedir($d);
    17. }
    18.  
    19. dirs("C:/Windows/", "");
    20. ?>
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Функция is_dir проверяет короткое имя, что получили с помощью opendir, в текущей директории. Либо нужно ей давать имя с путём. Чтобы сделать директорию текущей, нужно вызвать chdir.
    Попробуй так
    Код (PHP):
    1. <?php
    2. function dirs($dir, $lvl=0) {
    3.     $d = opendir($dir);
    4.     chdir($dir);
    5.     while (false !== ($name=readdir($d))) {
    6.         if ($name == "." or $name == "..")
    7.             continue;
    8.         if (is_dir($name)) {
    9.             echo str_repeat("-",$lvl),"<b>[$name]</b><br>\n";
    10.             $lvl++;
    11.             dirs($dir."/$name", $lvl);
    12.             $lvl--;
    13.         }else
    14.             echo str_repeat("-",$lvl),"$name<br>\n";
    15.     }
    16.     chdir("..");
    17.     closedir($d);
    18. }
    19. dirs("g:/папка", 0);
    Не рекомендую экспериментировать с директорией C:/Windows/
    Возможно, это особенность работы opendir под Виндовс. Надо проверить на nix-ах.
     
  3. r3l0c

    r3l0c Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    Владелец у каталогов, либо прав нету). На никсах аналогично будет. Опять же смотря какой софт стоит и как настроен веб-стек. Если стоит jailkit то opendir нормально сработает.
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. function dirs($dir,$path=false) {
    2.     foreach(glob($dir.'*') as $key => $val) {
    3.         $name=$path?$val:str_replace($dir,'',$val);
    4.         if(is_dir($val)) {
    5.             echo nl2br('<strong>'.$name.'</strong>
    6.             ');
    7.             dir($val);
    8.         } else {
    9.             echo nl2br($name.'
    10.             ');
    11.         }
    12.     }
    13. } 
    Код (PHP):
    1. dirs('C:/Windows/');
    FaxSetup.log
    Fonts
    Help
    Installer

    IsUninst.exe
    Код (PHP):
    1. dirs('C:/Windows/',true);
    C:/Windows/FaxSetup.log
    C:/Windows/Fonts
    C:/Windows/Help
    C:/Windows/Installer

    C:/Windows/IsUninst.exe