1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Скрипт для обработки всех файлов файлов и папок в папке.

Тема в разделе "Web Coding", создана пользователем roland76, 4 янв 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. roland76

    roland76 Постоялец

    Регистр.:
    9 ноя 2007
    Сообщения:
    124
    Симпатии:
    13
    Добрый день всем.

    Я начинающий php программер, ищу скрипт который бы получал на входе имя фолдера и потом в цикле сканировал все вложенные в него папки и обрабатывал в них файлы (на жестком диске локального компа).

    Нутром чую что тут нужна рекурсия, но воплотить своими силами пока в жизнь не могу.

    Может есть у кого готовый скриптик?

    Заранее спасибо.

    P.S. в идеале мне потом нужно будет парсить найденные файлы....:thenks:
     
  2. Jeurey

    Jeurey

    Регистр.:
    13 сен 2006
    Сообщения:
    419
    Симпатии:
    576
    Только сейчас попался на глаза какой-то код. В приниципе - должен работать (не проверял). Из этого сможешь собрать file-сканер ;)

    PHP:
    <?php 
    function printTree($level=1) {

      
    $d = @opendir("."); 
      if (!
    $d) return;

      while ((
    $e=readdir($d)) !== false) {

        if (
    $e=='.' || $e=='..') continue;

        if (!@
    is_dir($e)) continue;

        for (
    $i=0$i<$level$i++) echo "  ";

        echo 
    "$e\n";

        if (!
    chdir($e)) continue;

        
    printTree($level+1);

        
    chdir("..");

        
    flush();

      }

      
    closedir($d);

    }



    echo 
    "<pre>";

    echo 
    "/\n";

    chdir($_SERVER['DOCUMENT_ROOT']);

    PrintTree();

    echo 
    "</pre>";

    ?>
     
    ParanoIA и roland76 нравится это.
  3. roland76

    roland76 Постоялец

    Регистр.:
    9 ноя 2007
    Сообщения:
    124
    Симпатии:
    13
    Спасибо, скрипт отлично выводит файловую структуру, сейчас буду думать куда всунуть поиск всех файлов в каждой папке.
    Еще раз спасибо, приятно обрадован, что на этом форуме можно так оперативно получить помощь!
     
  4. zavulon

    zavulon Постоялец

    Регистр.:
    9 май 2007
    Сообщения:
    79
    Симпатии:
    34
    Пользовался бы CakePHP, написал бы просто
    $folder = new Folder('/usr/home/test');
    pr($folder->findRecursive());

    А можно даже так:
    pr($folder->findRecursive('.*\.html?', true)); // найти все html-файлы и отсортировать.

    pr($s) - это <pre><?=print_r($s)?></pre> (чтобы удобнее читать было)
     
  5. roland76

    roland76 Постоялец

    Регистр.:
    9 ноя 2007
    Сообщения:
    124
    Симпатии:
    13
    А это чего за зверь такой CakePHP?
    findRecursive('.*\.html?', true) - вернет массив с именами файлов?
    а если их будет скажем 200 000, это нормально отработает?
     
  6. ConstNW

    ConstNW Постоялец

    Регистр.:
    30 июн 2007
    Сообщения:
    132
    Симпатии:
    39
    PHP:
    function processDir$sDirname ""$sPattern ""$isRecursion true )
    {
        
    $sDirname = ($sDirname == "") ? "." $sDirname;
        
    $sDirname = (substr($sDirname, -1) == "/" ) ? $sDirname $sDirname."/";
        
    $sPattern = ($sPattern == "") ? "*" $sPattern;
        
        
    $aList glob($sDirname.$sPatternGLOB_BRACE);
        foreach( 
    $aList as $uri )
        {
            if( 
    is_dir($uri) )
            {
                continue;
            }
            else
            {
                
    processFile($uri);
            }
            
        }
        
        if( !
    $isRecursion )
        {
            return;
        }
        
        
    $aList glob($sDirname."*"GLOB_ONLYDIR);
        foreach( 
    $aList as $uri )
        {    
            if( 
    $uri == "." || $uri == ".." )
            {
                continue;
            }
            else
            {
                
    processDir($uri$sPattern);
            }
        }
    }
    function 
    processFile$sFilePath )
    {
        
    //Вполняем действия над файлом
        
    echo $sFilePath."<br />";
    }

    processDir("""{*.php, *.js}");     //Поиск файлов с расширением .php и .js
    processDir("images""*.jpg");         //Поиск файлов в директории images с расширением .jpg
    processDir("content""*"false);    //Поиск всех файлов только в директории content

     
    roland76 нравится это.
  7. vizard-06

    vizard-06 Создатель

    Регистр.:
    9 фев 2007
    Сообщения:
    11
    Симпатии:
    2
    чтож ещё раз выложу
    PHP:
    <?
    function 
    ReadDirectory($dir$offs) {
        if (
    $d=opendir($dir)) {
            while (
    $file=readdir($d)) {
                if ((
    $file=='.') or ($file=='..')) {
                    continue;
                }
                if (
    is_dir($dir."/".$file)) {
                print(
    "<BR>$offs <B>$dir/$file</B>");
                    
    ReadDirectory($dir."/".$file$offs."-");
                }
                else {
                    print(
    "<BR> $offs $dir/$file") ;
                }
            }
        }
        
    closedir($d);
    }
    echo 
    ReadDirectory ("."$offs="");
    ?>
     
  8. zavulon

    zavulon Постоялец

    Регистр.:
    9 май 2007
    Сообщения:
    79
    Симпатии:
    34
    Перейти по ссылке - фреймворк для обленившихся программистов вроде меня.
    Если будет 200 000, то будет кушать много памяти. Если памяти хватит, но нормально отработает.

    Но если столько файлов и памяти мало, но надо писать свою функцию. Абсолютно универсальных решений не бывает.
     
  9. rknic

    rknic Читатель

    Заблокирован
    Регистр.:
    25 окт 2007
    Сообщения:
    8
    Симпатии:
    0
    CakePHP не плохая вещь! работает нормально но как сказанно выше кушает много памяти.
    Может кто подскажет альтернативу ей, что брабатывало при меньшей нагрузке на память?
     
  10. zavulon

    zavulon Постоялец

    Регистр.:
    9 май 2007
    Сообщения:
    79
    Симпатии:
    34
    Если грамотно использовать unbindModel, то можно сэкономить много памяти.
     
Статус темы:
Закрыта.