вопрос про подсчет размера указанной директории

mcfalu

Новичок
вопрос про подсчет размера указанной директории

есть не хитрый скрипт который рекурсивно подсчитывает размер папки и всех её подпапок и возвращает результат.
PHP:
function getDirSize($path)
{
	if(is_file($path)) return filesize($path);
	$size=0;
	$dh=opendir($path);
	while(($file=readdir($dh))!==false)
	{
		if($file=='.' || $file=='..') continue;
		if(is_file($path.'/'.$file))
			$size+=filesize($path.'/'.$file);	
		else $size+=$this->getDirSize($path.'/'.$file);
	}
	closedir($dh);
	return $size+filesize($path); // +filesize($f) for *nix directories
}
В принципе размер директории = это сумма размеров всех файлов в ней, а также файлов в подпапках этой папки

Интересует следующие - почему в *nix в этом месте
return $size+filesize($path)

filesize($path) - возвращает одинаковое значение для разных директорий 4096 bytes

Что это за число 4096 ? Откуда оно берется?
Если к примеру в папке нету файлов то функция вернет именно значение 4096 bytes
 

dimagolov

Новичок
mcfalu, вот возьми, прочитай phpfaq.ru/debug, почитай ман по использованным ф-ям и повставляй echo с выводом полученных значений в код и разберись, откуда 4096 берутся.
 

zerkms

TDD infected
Команда форума
Что это за число 4096 ? Откуда оно берется?
Если к примеру в папке нету файлов то функция вернет именно значение 4096 bytes
этот вопрос к пхп никакого отношения не имеет - тут уже вопросы о работе конкретных fs. а зависит это значение от числа объектов внутри директории.
если не хочешь прибавлять этот размер - то проверяй, что аргумент у тебя файл, а не директория.

ps: почему return $size+filesize($path); а не return $size; ?
 

mcfalu

Новичок
Автор оригинала: dimagolov
mcfalu, вот возьми, прочитай phpfaq.ru/debug, почитай ман по использованным ф-ям и повставляй echo с выводом полученных значений в код и разберись, откуда 4096 берутся.
перед тем как задать вопрос так и сделал

вопрос у меня другой - откуда функция PHP filesize для *nix отдает значение не 0 а 4096 байт в директории где нету файлов?
 

dimagolov

Новичок
*****, чего не должно? filesize($path) когда $path указывает на директорию отдает размер ноды как файла
 

zerkms

TDD infected
Команда форума
откуда функция PHP filesize для *nix отдает значение не 0 а 4096 байт в директории где нету файлов?
4096 - это верный размер директории. именно столько занимает пустая директория для файловой системы с размером кластера в 4кб
 

mcfalu

Новичок
а может 2 пустых папки иметь разные размеры?
одна папка 4096 байт?
а вторая 8192 байт(в два раза больше)
 

zerkms

TDD infected
Команда форума
может быть. если во второй когда-то было много файлов, то её размер увеличился до 2кластеров. и он не уменьшится :)
 

Фанат

oncle terrible
Команда форума
а, дошло
я че-то на эту строчку не посмотрел сначала
 

mcfalu

Новичок
спасибо zerkms за ответ.
То что меня интересовало я выяснил.)
 
Сверху