
Как-то я столкнулся с проблемой, нужно было узнать, сколько места на хостинге занимает моя папка с картинками. Проблема была в том, что в папке много подпапок и очень много картинок. Место на хостинге ограниченное и пришлось писать скрипт, который бы запускался раз в сутки и чистил старые файлы, если размер папки с картинками превышал допустимый размер. Как-нибудь я опишу весь этот скрипт, но сейчас, я выложу только ту часть, которая отвечает за получение размера папки.
Исходник:
<?php
$dirname = '/folder/'; // указываем полный путь до папки или файла
$size = dir_size($dirname); //заносим в переменную размер папки или файла
$formSize = format_size($size); //форматируем вывод
echo $formSize;
// функция для просмотра всех подпапок и всех вложенных файлов
function dir_size($dirname) {
$totalsize=0;
if ($dirstream = @opendir($dirname)) {
while (false !== ($filename = readdir($dirstream))) {
if ($filename!="." && $filename!="..")
{
if (is_file($dirname."/".$filename))
$totalsize+=filesize($dirname."/".$filename);
if (is_dir($dirname."/".$filename))
$totalsize+=dir_size($dirname."/".$filename);
}
}
}
closedir($dirstream);
return $totalsize;
}
// функция форматирует вывод размера
function format_size($size){
$metrics[0] = 'байт';
$metrics[1] = 'Кбайт';
$metrics[2] = 'Мбайт';
$metrics[3] = 'Гбайт';
$metrics[4] = 'Тбайт';
$metric = 0;
while(floor($size/1024) > 0){
++$metric;
$size /= 1024;
}
$ret = round($size,1)." ".(isset($metrics[$metric])?$metrics[$metric]:'??');
return $ret;
}
?>

Спасибо, удобные функции. Только исправь echo $ret, на $size или $formSize
Спасибо, что указали на не точность. Исправил.
Спасибо за хорошую функцию
Спасибо! Пригодилось.
Чтобы посмотреть размеры файлов и папок в корне сайте используя функции автора этой заметки, можно воспользоваться кодом:
$dirnameRoot = $_SERVER['DOCUMENT_ROOT'];
if ($dirstream = @opendir($dirnameRoot)) {
while (false !== ($filename = readdir($dirstream))) {
if ($filename != "." && $filename != "..") {
if (is_dir($dirnameRoot . "/" . $filename)) {
echo sprintf('%s %s', "/" . $filename, format_size(dir_size($dirnameRoot . "/" . $filename))) . '';
}
if (is_file($dirnameRoot . "/" . $filename))
echo sprintf('%s %s', "/" . $filename, format_size(filesize($dirnameRoot . "/" . $filename))) . '';
}
}
}
closedir($dirstream);
Ну и сколько будет этот скрипт считать 10000 папок и лимон картинок?
Этот скрипт — убийца жестких дисков.