Webmaster общности: Predpriemach.com | SearchEngines.bg

    Function dirsize или размер на папката

    Автор: skatebord

    Наскоро ми се наложи да изкарам размера на една папка.
    Търсих в гугъл и намерих това. Надявам се да ви е полезно Smile
    function.dirsize.php
    <?php
    /**
    * Смята рамера на директорията
    *
    * @author Aidan Lister <aidan@php.net>
    * @version 1.2.0
    * @link http://aidanlister.com/repos/v/function.dirsize.php
    * @translator skatebord
    * @param string $directory Path to directory
    */
    function dirsize($path)
    {
    $size = 0;
    
    if (substr($path, -1, 1) !== DIRECTORY_SEPARATOR) {
    $path .= DIRECTORY_SEPARATOR;
    }
    
    // Проверка
    if (is_file($path)) {
    return filesize($path);
    } elseif (!is_dir($path)) {
    return false;
    }
    
    $queue = array($path);
    for ($i = 0, $j = count($queue); $i < $j; ++$i)
    {
    // Отваряне на директорията
    $parent = $i;
    if (is_dir($queue[$i]) && $dir = @dir($queue[$i])) {
    $subdirs = array();
    while (false !== ($entry = $dir->read())) {
    // Не четем "." и ".."
    if ($entry == '.' || $entry == '..') {
    continue;
    }
    
    // Взимане на листата с директории или рамера на файла
    $path = $queue[$i] . $entry;
    if (is_dir($path)) {
    $path .= DIRECTORY_SEPARATOR;
    $subdirs[] = $path;
    } elseif (is_file($path)) {
    $size += filesize($path);
    }
    }
    
    // Добавяне на суб-директориите за да започне четенето
    unset($queue[0]);
    $queue = array_merge($subdirs, $queue);
    
    // Пресмятане
    $i = -1;
    $j = count($queue);
    
    // Изчистване
    $dir->close();
    unset($dir);
    }
    }
    
    return $size;
    }
    
    ?>

    И после:

    <?php
    require_once 'function.dirsize.php';
    
    // Взимане на размера за конкретната директория
    echo dirsize('.');
    echo "\n";
    
    ?>

    Където echo dirsize(‘. ‘); е директорията.

    Резултатa ще е:

    2645326

    За по-добър резултат можем да използваме функцията size_readable.

    function.size_readable.php

    <?php
    /**
    * Покзване на размера, така че да може да се прочете
    *
    * @author Aidan Lister <aidan@php.net>
    * @version 1.1.0
    * @link http://aidanlister.com/repos/v/function.size_readable.php
    * @translator skatebord
    * @param int $size Size
    * @param int $unit The maximum unit
    * @param int $retstring The return string format
    * @param int $si Whether to use SI prefixes
    */
    function size_readable($size, $unit = null, $retstring = null, $si = true)
    {
    // Мерки
    if ($si === true) {
    $sizes = array('B', 'kB', 'MB', 'GB', 'TB', 'PB');
    $mod = 1000;
    } else {
    $sizes = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB');
    $mod = 1024;
    }
    $ii = count($sizes) - 1;
    
    // Максимални мерки
    $unit = array_search((string) $unit, $sizes);
    if ($unit === null || $unit === false) {
    $unit = $ii;
    }
    
    // Връщане на стринга
    if ($retstring === null) {
    $retstring = '%01.2f %s';
    }
    
    // Обхождане
    $i = 0;
    while ($unit != $i && $size >= 1024 && $i < $ii) {
    $size /= $mod;
    $i++;
    }
    
    return sprintf($retstring, $size, $sizes[$i]);
    }
    
    ?>

    И после:

    <?php
    require_once 'function.dirsize.php';
    require_once 'function.size_readable.php';
    
    // Взимане на размера за конкретната директория
    echo size_readable(dirsize('.'));
    ?>

    Където size_readable(dirsize(‘. ‘)); е директорията.

    Резултата ще е:

    2.65 MB

    Надявам се да съм бил полезен Smile

    Оставете коментар