Forum Webscript.Ru

Программирование => PHP => Тема начата: Solid от 31 Января 2002, 16:14:53

Название: Директории/файлы статистика
Отправлено: Solid от 31 Января 2002, 16:14:53
Нужна функция/скрипт, которая определялобы сколько в директории файлов, в директории, в которой есть ещё директории файлов, сколько эти файлы занимают.

Спасибо, если есть ещё какая нибудь статистика на подобие того что я сказал, то тоже скажите.
Название: Директории/файлы статистика
Отправлено: ThE0ReTiC от 01 Февраля 2002, 02:12:32
Используй opendir, readdir, is_file, filesize, рекурсивный вызов всего этого набора  и немного фантазии.
Пример накатать?
Название: Директории/файлы статистика
Отправлено: ThE0ReTiC от 01 Февраля 2002, 02:29:40
Вот что-то типа этого:

/////////////////////////////////////////////////////
//
//  Recursive File size showing by Arcady Babulin aka The0ReTiC
//  mail me to [email]l0g_err@xakep.ru[/email] in any questions
//
////////////////////////////////////////////////////
function FilesizeShowInDir($directory_name)
{
$dirt = @opendir($directory_name);
//chdir($directory_name);
$col = 0;
$j = 0;
$ND = ARRAY();
while($file_handler = readdir($dirt)) //Reading directory
{
clearstatcache();
if (($file_handler !=\'.\')&&($file_handler != \'..\')):

if(is_dir($directory_name.\'/\'.$file_handler)):
$nd[$j] = $directory_name.\'/\'.$file_handler;
$j++;
else: echo\'\'.$directory_name.\' \';
echo\'/\'.$file_handler.\'   ->>   \';
echo(filesize($directory_name.\'/\'.$file_handler)).\' Bytes
\';
$col++;
endif; // Is file
endif; // Is not . OR ..
}
echo$col.\' files in this directory\';

if (is_array($nd)){
reset($nd);
for($step=0;$step{
echo$nd[$step].\'
\';
FilesizeShowInDir($nd[$step]);
}
} // is array
@closedir($directory_name);
}

FilesizeShowInDir($DOCUMENT_ROOT);

?>

Вроде работает.
У меня весь сайт правильно отобразился.
:)
Название: Директории/файлы статистика
Отправлено: Solid от 01 Февраля 2002, 16:13:27
Хмм .. ну тут как бы немного не то, это я в принцепе и сам мог, а вот сделать что бы результат показался всего лишь одинажду, т.е. результат по всем фалам ... некак не выходило.

Т.е. когда в функции функция, и что бы в первой функции сложить переменную со второй переменной которая в другой функции у меня не получалось ... Может ты знаешь как расширить "область видимости"?
Название: Директории/файлы статистика
Отправлено: ThE0ReTiC от 01 Февраля 2002, 16:19:27
Так. Ты объясни подоробнее, чего тебе надо. А то я чего-то непонял :(
тебе нужен список файлов в директории с объемом каждого, или с суммарным объемом свех файлов, что лежат в диреткории/субдиректории?
Название: Директории/файлы статистика
Отправлено: Solid от 01 Февраля 2002, 16:35:02
Хе-Хе последнее правильно, просто после школу, не очень врубаюсь не во что ;)) прикольно сказал, короче это .. физика была, ладно не по теме ...

Мне нужно подсчитать объём всех файлов которые лежать в директории и в других подкатегориях, затем следующее, нужно подсчитать сколько мегов, но это уже будет просто сделать, если ты скажешь как подсчитать сколько файлов, а лучше наоборот, скажи как подсчитать мб, я так лучше пойму, просто kakaja_nit_peremennaja++ - слишком просто ;) мне кажется, если я прально понимаю как это всё должно быть, но не врубаюсь как это сделать ;)

Ладно объясни пожалуста.

Требуется найти размер директории, вместе влежащими в это директории файлами и ответ должен быть 1 раз, т.е. вывод и всё, а не:
root -> papka1 -> 4mb
root -> papka2 -> 2mb

Нужно вот так:
root -> 23mb

Методом сложения всех папок.

Можно не в мегах, это я просто люблю это слово, просто в байтах, там отформатировать просто ...

Усё, надеюсь разьяснил понятно.
Название: Директории/файлы статистика
Отправлено: от 01 Февраля 2002, 17:15:33
Люди, задавая такие вопросы на форумах, вы сами никогда ни программировать, ни даже думать-то головой не научитесь...
Название: Директории/файлы статистика
Отправлено: ThE0ReTiC от 01 Февраля 2002, 18:21:16
2Unregistered Не ворчи. Каждый выражается как может.
Лучше бы зарегистрировался.
Название: Директории/файлы статистика
Отправлено: ThE0ReTiC от 01 Февраля 2002, 18:27:46
Так это не сложно :)

/////////////////////////////////////////////////////
//
//  Recursive File size showing by Arcady Babulin aka The0ReTiC
//  mail me to [email]the0retic@mail.ru[/email] in any questions
//
////////////////////////////////////////////////////
function FilesizeShowInDir($directory_name)
{
GLOBAL $globalism;
$dirt = @opendir($directory_name);
$col = 0;
$j = 0;
$ND = ARRAY();
while($file_handler = readdir($dirt)) //Reading directory
{
clearstatcache();
if (($file_handler !=\'.\')&&($file_handler != \'..\')):

if(is_dir($directory_name.\'/\'.$file_handler)):
$nd[$j] = $directory_name.\'/\'.$file_handler;
$j++;
else:
$globalism = $globalism +filesize($directory_name.\'/\'.$file_handler);
$col++;
endif; // Is file
endif; // Is not . OR ..
}

if (is_array($nd)){
reset($nd);
for($step=0;$step{
FilesizeShowInDir($nd[$step]);
}
} // is array
@closedir($directory_name);
}
$globalism = 0;
FilesizeShowInDir($DOCUMENT_ROOT);
echo\'
\'.$globalism.\'Bytes\';

?>


Найди десять отличий :):):)
Я проверил в WinCommander - по байтам все сходится. Показывает размер директории, которую укажешь, как параметр функции.
Попробуй.
Название: Директории/файлы статистика
Отправлено: Solid от 01 Февраля 2002, 22:52:21
Unregistered:
Если ты учишся только сам, то ты полный ...

ThE0ReTiC:
Спасибо, а мог просто написать global, и я бы понял ;)

Кстати, огромное спасибо, только ты отважился мне помочь, зато смотри что получилось: http://coding.dyn.ee/artcles/ , смотри в низу, там где написанно статистика.
Название: Директории/файлы статистика
Отправлено: ThE0ReTiC от 03 Февраля 2002, 20:04:03
Всегде пожалста :)
Название: Директории/файлы статистика
Отправлено: от 04 Февраля 2002, 16:14:32
Нет, я учусь не только сам, но в данном случае разобраться самому - проще простого (и для мозгов полезнее) и будет в 5 раз быстрее, чем спрашивать и ждать ответа.
Название: Директории/файлы статистика
Отправлено: Vip от 05 Февраля 2002, 16:12:16
А если вот ето дописать будет лучше выглядеть
if($globalism<=9999999) {
$t = $globalism / 999;
echo\'
\'.round($t).\' Кб\';
}
elseif($globalism>=10000000) {
$t = $globalism / 999999;
echo\'\'.round($t).\' Мб\';
}
Название: Директории/файлы статистика
Отправлено: Solid от 05 Февраля 2002, 18:58:05
Unregistered:
Ну если ты такой умный, умеешь разбираться во всём, то флаг тебе в руки. Просто навсего я не знал одной штуки как GLOBAL, теперь знаю, и в этом помог ThE0ReTiC, за что ему огромное спасибо. А насчёт того что долго ждать ответа, ты не прав, довольнатаки быстро ответ был получен + ещё и скрипт сразу. Зато теперь я могу такой же скрипт написать ;)

Модер, сорри за флейм, он первый начал!