Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > просмотр директории


Автор: welt 24.9.2009, 21:28
приветствую.
нужно написать такой скрипт:
есть папка например folder1
в ней лежат разные папки.
в каждой из этих папок лежат по немкольку mp3 файлов.
периодически в папку folder1 добавляюца папки содержащие mp3 файлы.
скрипт лежит в папке folder 1.
нужно чтобы он выводил содержимое каждой папки - т.е. список музыкальый файлов с возможностью их скачивания.
у меня вот такой срипт.
Код

      function paintUndersideOfFox($c = '.', $wcwd = false) {
        if($wcwd === false)
          $wcwd = substr($wcwd = $_SERVER['REQUEST_URI'], 0, strrpos($wcwd, '/') + 1);

        echo('<ul class="dirlist">');
        $d = opendir($c);
        while($f = readdir($d)) {
          if(strpos($f, '.') === 0) continue;

          $ff = $c . '/' . $f;
          echo '<li><a href="' . $wcwd . $ff . '">' . $f . '</a>';
          if(is_dir($ff)) paintUndersideOfFox($ff, $wcwd);
          echo '</li>';
        }
        echo('</ul>');
      }

и вызываю я функцию так
Код

 paintUndersideOfFox('folder_x');

где folder_x имя папки в папке folder1.
но это неудобно, поскольку приходица каждый раз прописывать вызов этой функции для каждой новой папки.
можно ли как-то переписать функцию, чтобы она сама определяла папку, которая добавляется и отображала ее содержимое с возможностью скачать.
т.е.
чтобы была таблица состоящая из названия паки и списка имен файлов с ссылками на них.

Автор: Strilo4ka 24.9.2009, 23:23
Код

<style type="text/css">
a:hover{
background-color: #FFFF00;}
text-decoration:none}
</style>

<?php

  function showlinks()
  {
  $dir = opendir(".");
  // В цикле проходимся по всем файлам и
  // подкаталогам
  while (($file = readdir($dir)) !== false)
  {
    // Обрабатываем только подкаталоги,
    if(is_dir($file))
    {
      // Исключаем текущий ".", родительский ".."
      if($file != "." && $file != "..")
      {
       $dirs_mp3[]=$file;
      }

    }

  }
  closedir($dir);

  //находим в каждой папке файлы и заносим в масив
  foreach ($dirs_mp3 as $name_dir)
  {
  $dir=opendir($name_dir);
    while (($file = readdir($dir)) !== false)
    {
     // Обрабатываем только файлы
     if(!is_dir($file))
     {
     $links_mp3[]=$name_dir."\\".$file; // если не виндовс $name_dir."/".$file;
     }
    }
  closedir($dir);
  }

  foreach ($links_mp3 as $our_link)
  {
  echo "<ul><li><a href='$our_link'>".basename($our_link)."</a><li></ul>";
  }
 }

 showlinks()
?>

Автор: Ипатьев 25.9.2009, 11:06
Код

Options +Indexes 

в .htaccess

Автор: welt 25.9.2009, 19:38
функция выводит список всех вайлов из всех папок.
это почти то что нужно.
подскажите, а как сделать чтобы еще и название каждой папки выводилось ?
т.е. чтобы выводило таблицу :

название папки | список файлов в ней

спасибо.

Автор: Strilo4ka 25.9.2009, 22:57
можно так:
Код

<style type="text/css">
a:hover{
background-color: #FFFF00;}
text-decoration:none}
</style>

<?php

  function showlinks()
  {
  $dir = opendir(".");
  // В цикле проходимся по всем файлам и
  // подкаталогам
  while (($file = readdir($dir)) !== false)
  {
    // Обрабатываем только подкаталоги,
    if(is_dir($file))
    {
      // Исключаем текущий ".", родительский ".."
      if($file != "." && $file != "..")
      {
       $dirs_mp3[]=$file;
      }

    }

  }
  closedir($dir);

  //находим в каждой папке файлы и заносим в масив
  foreach ($dirs_mp3 as $name_dir)
  {
  $dir=opendir($name_dir);
    while (($file = readdir($dir)) !== false)
    {
     // Обрабатываем только файлы
     if(!is_dir($file))
     {
     //формируем двомерный масив ключом есть названия папки ...
     $links_mp3[$name_dir][]=$name_dir."\\".$file; // если не виндовс $name_dir."/".$file;
     }
    }
  closedir($dir);
  }


  // виводим названия каталогов
  foreach ($links_mp3 as $dir_name => $value)
  {
  echo "<b>".$dir_name."</b>";
  //выводим нашы ссилки
   foreach ($links_mp3[$dir_name] as $our_link)
    {
    echo "<ul><li><a href='$our_link'>".basename($our_link)."</a><li></ul>";
    }
  }

 }

 showlinks()


?>


Добавлено через 3 минуты и 13 секунд
вот такой у меня результат в браузере получился (только я брал txt файлы но неважно только что написал ):

1
  *1.txt
  *2.txt
  *3.txt
2
  *22222.txt
3
  *4.txt

Автор: skyboy 26.9.2009, 01:50
замечание на будущее: вместо opendir+readdir лучше использовать http://php.net/glob.
лаконичнее будет.

Автор: Strilo4ka 26.9.2009, 01:56
согласен!!! Быстрее работать будет (наверно) и кода меньше!

Добавлено @ 02:01
хорошая функция, помню такую (ее использовал). Надо было фотки удалять когда их с базы вытаскивал в временную папку ! При последующем просмотре надо было все удалять . Только щас я задумался а что если много сразу на сайт зайдет...повлияет на роботу интересно?!, но ладно суть не в это этого поста!!!!

Код

function clear_f()
{

    if (strpos($_SERVER['PHP_SELF'],"admin")) $files=glob("../temp_photo/*.jpeg");
    else $files=glob("temp_photo/*.jpeg");
    if ($files==true)
    {

    //удаляем коли масив не пустий
    foreach($files as $val)
                {
                unlink($val);
                }
    }
}



Автор: Ипатьев 26.9.2009, 08:52
В самой первой версии операционной системы MS-DOS не было каталогов. Все файлы лежали прямо в корне диска.
Интересно, зачем потом придумали каталоги, если их содержимое можно вывалить на одной странице...

Автор: Strilo4ka 27.9.2009, 00:09
наверно чтоб разбить на категории(тематики), упорядочить... а то так мусорка получаэться!!!

Автор: welt 28.9.2009, 10:31
спасибо.
а еще подскажите, как сделать чтобы скрипт задавал для каждого файла в каждой папке свое имя ?
т.е. например в первой паке файлы:
wer.mp3
zxc.mp3
tyu.mp3
т.е. в каждой папке будет xml файл в котором
будет название папки и файлов, которые должны отображаться.
Код

<title>новое название папки</title>
<files>
<filename>ivanov.mp3</filename>
<filename>petrov.mp3</filename>
<filename>sidorov.mp3</filename>

</files>

Автор: Ипатьев 28.9.2009, 10:55
С таким XML файлом - никак. в нем нет соответствия старых имен и новых.И, непонятно, зачем XML файлом задавать. Сразу переименовать файлы будет значительно проще.

Автор: welt 28.9.2009, 12:16
а если использовать txt файл, то как ?

Автор: Ипатьев 28.9.2009, 12:17
так же

Автор: welt 28.9.2009, 17:07
ну все-таки подскажите как это можно сделать ?

Автор: welt 29.9.2009, 16:35
помогите вывести результат в таблицу.
как я понимаю для этого надо знать кол-во файлов в каждой папке.
чтобы таблица была такая:


Код

______________________________
|              |  abc.mp3    |
|              |  dfg.mp3    |
| werwrr       |  ghjg.mp3   |
|              |  fbnm.mp3   |
|              | ..........  |
|______________|_____________|
|              |  qwe.mp3    |
|              |  nmb.mp3    |
| gfhfgh       |  rty.mp3    |
|              |  uioo.mp3   |
|              | ........    |
|______________|_____________|
                и т.д.


Автор: WolfAlone 31.3.2011, 12:40
что старые файлы отображать под другим именем, как уже верно подметил Ипатьев, нужно сопоставить реальное имя файла с отображаемым. То есть, XML файл должен выглядеть примерно так:
Код

<title>новое название папки</title>
<files>
<filename oldname="file1.mp3">ivanov.mp3</filename>
<filename oldname="file2.mp3">petrov.mp3</filename>
<filename oldname="file3.mp3">sidorov.mp3</filename>
</files>


Где "file*.mp3" - старое имя файла.

P.S. Это не единственно правильный, наиболее полный и лучший вариант, это просто вариант.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)