Рекурсивно получить список вложенных директорий.

Discussion in 'PHP' started by Велемир, 2 Jun 2009.

  1. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Опять не пройти уровень:)

    PHP:

    <?php

    @set_time_limit(0);

    global 
    $fp;

    $fp fopen("log.txt","w");

    function 
    scan($bs '') {

    $dir opendir("C:/Program Files/VertrigoServ/www/com_clickheat");

    while ((
    $s readdir($dir)) !== false) {

    if(
    is_dir($s) and $s != "." and $s != "..") {

    fwrite($fp,$s."\r\n");

    scan($bs."\".$s);

    }

    }

    fclose(
    $fp);

    }



    scan();


    ?>

    Должна быть рекурсия...и она есть.Но почему ничего не записывается в фаил я ума не приложу).

    ЗЫ: никогда подобного ранее не делал))
     
    #1 Велемир, 2 Jun 2009
    Last edited: 3 Jun 2009
  2. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,520
    Likes Received:
    401
    Reputations:
    196
    $dir = opendir("C:\\Program Files\\VertrigoServ\\www\\com_clickheat");

    или

    $dir = opendir("C:/Program Files/VertrigoServ/www/com_clickheat");
     
    1 person likes this.
  3. NOmeR1

    NOmeR1 Everybody lies

    Joined:
    2 Jun 2006
    Messages:
    1,068
    Likes Received:
    783
    Reputations:
    213
    имхо - подправь
    Code:
    function scan($bs = '') {
    и пониже
    Code:
    $dir = opendir("C:\Program Files\VertrigoServ\www\com_clickheat\".$bs);
    и пониже
    Code:
    scan($bs.'\'.$s);
     
  4. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Мда, кульный код в первом посте =) Файл открывается при каждом вызове функции, открывается один и тот же каталог =) Рекурсией мало пахнет
     
  5. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Если использовать '',то выдаёт ошибку.Пример я частично вообще отсюда брал:

    http://articles.org.ru/cfaq/index.php?qid=1917

    Весь день убил на эту гребаную функцию...охренеть.
     
  6. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    переменную нужно объявлять глобальной в самой функции и не нужна тут рекурсия
    PHP:
    <?php

    @set_time_limit(0);

    $fp fopen("log.txt","w");

    function 
    scan($bs '') {

    global 
    $fp;

    //$dir = opendir("C:/Program Files/VertrigoServ/www/com_clickheat"); 
    $dir opendir('.'); 

    while ((
    $s readdir($dir)) !== false) {

    if(
    is_dir($s) and $s != "." and $s != "..") {

    fwrite($fp,$s."\r\n");

    }

    }

    fclose($fp);

    }



    scan();


    ?> 
    п.с. http://forum.antichat.ru/showpost.php?p=1306831&postcount=786 там нужна рекурсия

    мой вариант:

    PHP:
    <?php
    $addr 
    '.';
    $logFile 'log.txt';
    $fp fopen($logFile,'w');
    $dir opendir($addr); 
    while (
    $obj readdir($dir)) {
      if(
    is_dir($obj) && $obj != "." && $obj != ".."fputs($fp,$obj."\r\n");
    }
    fclose($fp);
    ?> 
     
    #6 Ru}{eeZ, 3 Jun 2009
    Last edited: 3 Jun 2009
    2 people like this.
  7. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Можно клоцать))Много пищи для размышлений будет )
     
    1 person likes this.
  8. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Ru}{eeZ,первый вариант не катит,ибо выдаёт листинг директорий только.
     
  9. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Вообще-то есть гугл и античат, стыдно господа
     
  10. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    У меня вопрос:

    при использовании scan($obj) в function scan($dir = '.') подставляется $obj или остаётся '.' ?
     
  11. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    эм, а что нужно?
     
  12. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    $obj
     
  13. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Да нет,второй вариант с рекурсией с выдачей листинга поддиректорий как раз то,что нужно)))Одному челу дали это при собеседовании,тык он там полдня просидел))))))))))
     
  14. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    грызи гранит Ru}{eeZ'а ^^
    пускай тоже грызёт