Привет. Вот наступил такой момент, что мне надо было подсчитать размер всех файлов которые находятся в одной папке и так же всех подпапках. Скачивать себе на ПК и СВОЙСТВА - не прокатило) Т.к. файлов много мелких. А это время. Вот и нашел на просторах Интернета вот такой небольшой класс для вывода результата размера файлов + их подпапок.
А все просто :)
Имеется небольшой класс на PHP, который легко использовать. Так же можно по добавлять свои функции, если это необходимо.
Это решение имеет несколько методов:
$zvlad->init(); - Метод исполняющий инициализацию класса (присваивает 0 счетчику найденых файлов)
$zvlad->calc_files(); - Метод для перебора файлов и директорий в текущей директории
$zvlad->show(); Метод выводящий собранные данные в виде таблицы
Вызов класса начинается с его создания:
$zvlad=new calc_dir;
Поиск файлов начинается с какой-либо директории - для примера я взял директорию \home\zvlad\mp3\.
Что бы выбрать текущую директорию:
$zvlad->calc_files(".");
После выполнения поиска результаты выводятся с помощью метода класса
$zvlad->show()
Для меня было еще важно сделать сортировку этих папок и файлов. Для реализации достаточно добавить в класс функцию:
Ну и перед вызовом $zvlad->show(); надо вставить $zvlad->sort();
Все)
Как сделать?
А все просто :)
Имеется небольшой класс на PHP, который легко использовать. Так же можно по добавлять свои функции, если это необходимо.
Класс
<?php
class calc_dir {
var $a_fname=array();
var $a_fsize=array();
var $a_fdir =array();
var $cofiles;
function init() {
$this->cofiles=0;
}
function calc_files($in_dir) {
#Так можно отсечь нежелательные имена файлов
#if (preg_match("/_vti[.]*/i",$in_dir)){return;}
if ($dir_handle = @opendir($in_dir)) {
while($file = readdir($dir_handle)) {
//Проходим по папкам
if ($file!=".." && $file!="." && is_dir($file)) {
$this->calc_files($in_dir."/".$file);
}
//Проходим по файламикам
if (is_file($in_dir."/".$file) && $file!=".." && $file!=".") {
$this->a_fname[$this->cofiles]=$file;
$this->a_fsize[$this->cofiles]=filesize ($in_dir."/".$file);
$this->a_fdir [$this->cofiles]=$in_dir;
$this->cofiles++;
}
}
}
}
function show() {
echo '<center><table border="1"><tr align="center"> <td>i</td><td>name</td><td>size</td><td>dir</td></tr>';
$a_size=0;
for ($i=0;$i<count($this->a_fname);$i++)
{
echo '<tr align="center"><td>".($i+1)."</td><td>".$this-> a_fname[$i]."</td><td>".$this->a_fsize[$i]."</td><td> ".$this->a_fdir[$i]."</td></tr>';
$a_size+=$this->a_fsize[$i];
}
echo '<tr><td colspan="2">Total:</td><td colspan="2">$a_size</td></tr>';
echo '</table></center>';
}
}
//Конец
$zvlad=new calc_dir;
$zvlad->init();
$zvlad->calc_files("homezvladmp3"); #Слеш обязательно
$zvlad->show();
?>
Пояснения
Это решение имеет несколько методов:
$zvlad->init(); - Метод исполняющий инициализацию класса (присваивает 0 счетчику найденых файлов)
$zvlad->calc_files(); - Метод для перебора файлов и директорий в текущей директории
$zvlad->show(); Метод выводящий собранные данные в виде таблицы
Вызов класса начинается с его создания:
$zvlad=new calc_dir;
Поиск файлов начинается с какой-либо директории - для примера я взял директорию \home\zvlad\mp3\.
Что бы выбрать текущую директорию:
$zvlad->calc_files(".");
После выполнения поиска результаты выводятся с помощью метода класса
$zvlad->show()
Дополнение
Для меня было еще важно сделать сортировку этих папок и файлов. Для реализации достаточно добавить в класс функцию:
function sort() {
array_multisort ( $this->a_fname, $this->a_fsize, $this->a_fdir );
}
Ну и перед вызовом $zvlad->show(); надо вставить $zvlad->sort();
Все)
Пример
- Владислав
- 8-05-2012, 19:00
- 10 186