Размер директории (рекурсивно) и время работы скрипта

Тема в разделе "PHP", создана пользователем bugargen, 10 ноя 2009.

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

    bugargen

    Регистр.:
    24 апр 2008
    Сообщения:
    232
    Симпатии:
    19
    Может есть у кого-нибудь решения сабжа?
    Нужно, чтобы:
    1. Выводился размер указанной директории (со всеми поддиректориями и файлами, т.е. - рекурсивный подсчёт). Размер должен быть ОБЯЗАТЕЛЬНО в человеческом виде, а именно: XXX МБ XXX КБ XXX Б (как в Винде короче).
    2. Выводилось время работы скрипта вида XX дней XX часов XX минут XX секунд.

    Спасибо заранее! :)
     
  2. potuga

    potuga

    Регистр.:
    22 сен 2009
    Сообщения:
    376
    Симпатии:
    91
    Значит вы не под виндой? Может лучше тогда использовать `ls -R -1` и после просуммировать размеры всех файлов? Ну а потом уже целочисленным делением считать мб, кб и байты

    Имхо: будет намного быстрее будет, чем скриптом гулять по каталогам.
     
    bugargen нравится это.
  3. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    под виндой отпарсить вывоод `dir /S` bg jkyjcnm. согласен - ходить скриптом - гемор. все равно придется обходить стандартные ограничения на работу php скрипта ( по времени ). Так уж лучше системные команды использовать.
     
    bugargen нравится это.
  4. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    Вот уж извращение. В никсах есть специальная утилита для определения размера папок - du. В любой вид переведет.
    И в самом начале скрипта все равно придется прописывать set_time_limit(0);
    А по сути это все реализуется обычным рекурсивным обходом каталогов.

    Вот примерный код как должно быть. Для времени работы, надо перед началом работы скрипта и его завершением поставить функцию getmicrotime а затем вычислить разницу и заформатить в нужный вид.

    PHP:
    set_time_limit(0);

    $size dirlen('./joomla/');
    $size view_size($size);

    echo(
    $size);
    function 
    dirlen($dir) {
        static 
    $length;
        
    $handle = @opendir($dir);
        while(
    false !== ($file readdir($handle))) {
            if (
    is_file($dir.$file)) {
                
    $length += filesize($dir.$file);
            } elseif (
    is_dir($dir.$file) && $file != '.' && $file != '..') {
                
    dirlen($dir.$file.'/');
            }
        }
        
    closedir($handle);
        return 
    $length;
    }


    function 
    view_size($size) {
        if (
    $size >= 1073741824) {
            
    $size round($size/1073741824*100)/100 ." GB";
        } elseif (
    $size >= 1048576) {
            
    $size round($size/1048576*100)/100 ." MB";
        } elseif (
    $size >= 1024) {
            
    $size round($size/1024*100)/100 ." KB";
        } else {
            
    $size $size " B";}
        return 
    $size;
    }

    Ну как-то так.
     
    bugargen нравится это.
Статус темы:
Закрыта.