Считать размер загруза под мотор
1.
Мансур (06.07.2010 / 08:27)
Как считать вес загруза на стандартным загрузе?
Хочу узнать весь download и весь разела на загрузе.
Типо так: общий загруз содержит 5мб, и категория содержит 1 мб
2.
Azzido (06.07.2010 / 09:31)
Бородатый Одмин (20.02.08 / 21:28)
РНР-кодер [Off]
Ответить / Цитировать / Спам
специально для плеерка!!!
Код подсчёта общего веса файлов в директории с вложенными папками:
function size_dir($dir) {
$full_size=0;
$opdir=opendir($dir);
while ($a = readdir($opdir))
{ if ($a != "." && $a != ".." && !is_dir($dir .'/'.$a))
{$full_size=$full_size+filesize($dir .'/'.$a);}
elseif ($a != "." && $a != ".." && is_dir($dir .'/'.$a)) {$full_size=$full_size+size_dir($dir .'/'.$a);}
}
closedir ($opdir);
return $full_size;}
}
потом обращайся к этой функции как
$size=size_dir("директория");
3.
Azzido (06.07.2010 / 10:14)
3, бывает
4.
Мансур (06.07.2010 / 12:16)
2.
Azzido, а куда вставить етот?
function size_dir($dir) {
$full_size=0;
$opdir=opendir($dir);
while ($a = readdir($opdir))
{ if ($a != "." && $a != ".." && !is_dir($dir .'/'.$a))
{$full_size=$full_size+filesize($dir .'/'.$a);}
elseif ($a != "." && $a != ".." && is_dir($dir .'/'.$a)) {$full_size=$full_size+size_dir($dir .'/'.$a);}
}
closedir ($opdir);
return $full_size;}
}
На индекс.пхп ? так надо?
$size=size_dir("download")
$size=size_dir("download/001")
5.
Azzido (06.07.2010 / 13:01)
это можешь вставить допустим в functions.php возможно там даже имеется такая функция уже...
6.
Lugaro (06.07.2010 / 13:05)
Только кешировать не забывай, ато при каждом заходи на страницу так считать, это убийство сервера
7.
Мансур (06.07.2010 / 14:03)
Вот функции мотора. Здесь кеширование нето. А на главным счетчике есть
<?php
//--------------- Функция подсчета файлов в загрузках -------------------//
function count_dir($dir) {
global $sitetime;
$count=0;
$newcount=0;
$path = opendir($dir);
while ($file = readdir($path)) {
if (( $file != ".")&&($file != "..")&&($file != ".htaccess")&&($file != "index.php")&&($file != "name.dat")&& !ereg (".txt$", "$file")&& !ereg (".JPG$", "$file")&& !ereg (".GIF$", "$file")) {
$count ++;
$filetime=filemtime("$dir/$file")+(3600*24*5);
if($filetime>$sitetime){
$newcount ++;
}
}}
if($newcount>0){
$input=(int)$count.'/<font color="#FF0000">+</font>'.(int)$newcount;
}else{
$input=(int)$count;
}
closedir ($path);
return $input;
}
?>
8.
Мансур (06.07.2010 / 14:10)
Вот нашол инета. Какраз мне такой нужен. Считать сколько файл и размер. Можно переделать под мотор? И как сделать кеширование?
<?php
//Определение числа файлов и их размер в папке произвольной вложенности
//рекурсивная функция, которая вызывает сама себя
function count_files($directory)
{
//нужна внешняя переменная чтобы учитывать суммарное кол-во файлов
GLOBAL $i,$size;
//открываем директорию
$dir=opendir($directory);
//читаем директорию в цикле
while (false!==($file=readdir($dir)))
{
//если это файл, то
if (is_file($directory.'/'.$file))
{
//увеличиваем счетчик
$i++;
//увеличиваем размер
$size+=filesize($directory.'/'.$file);
/*если необходимо, то можно удалить все файлы для примера вот так:
unlink($directory.'/'.$file); */
}
//если же наткнулись на директорию
elseif (is_dir($directory.'/'.$file) && $file!='.' && $file!='..')
{
//снова вызываем функцию уже для этой директории
count_files($directory.'/'.$file);
}
}
//закрываем директорию
closedir($dir);
}
$i=0;
$size=0;
//посчитаем файлы в текущей директории
count_files('.');
echo 'файлов :'.$i;
echo ' размером :'.$size;
?>
9.
Мансур (06.07.2010 / 22:16)
вот исправиль... проверел супер. так тоже убийство сервера???
<?php
function count_d($dir) {
global $sitetime;
$count=0;
$newcount=0;
$size=0;
$path = opendir($dir);
while ($file = readdir($path)) {
if (( $file != ".")&&($file != "..")&&($file != ".htaccess")&&($file != "index.php")&&($file != "name.dat")&& !ereg (".txt$", "$file")&& !ereg (".JPG$", "$file")&& !ereg (".GIF$", "$file")) {
$count ++;
$size+=filesize("$dir/$file");
$filetime=filemtime("$dir/$file")+(3600*24*5);
if($filetime>$sitetime){
$newcount ++;
}
}}
if($newcount>0){
$input=(int)$count.'/<font color="#FF0000">+</font>'.(int)$newcount.' / '.formatsize($size);
}else{
$input=(int)$count.' / '.formatsize($size);
}
closedir ($path);
return $input;
}
?>
10.
Мансур (06.07.2010 / 22:21)
выводить так: video(222/+70/12.38 Mb)
11.
Мансур (06.07.2010 / 22:22)
ето стандартный код из мотора. 9 посте
12.
Azzido (06.07.2010 / 22:33)
чтобы не пресчитывать тысячи файлов рекурсивно считай допустим раз в час и результаты записывай в файл или базу данных,и если дата создания файла или время записи в бд меньше часа, то выводить данные из этого кэша, иначе пересчет файлов
13.
Мансур (06.07.2010 / 22:42)
14.
Azzido, а как исправить 11 пост? я бы тоже хотель считал раз в часе
14.
Мансур (06.07.2010 / 22:44)
а вот ето с кешом для главную может надо переделать типо так
<?php
$filtime=filemtime(BASEDIR."local/datatmp/down.dat");
$down_count=file_get_contents(BASEDIR."local/datatmp/down.dat");
$down_count=strtok($down_count,'/');
$filtime=$filtime+(3600*$config_downloadcache);
if($sitetime>$filtime || $down_count<50){
$dir = opendir (BASEDIR."download");
while ($file = readdir ($dir)) {
if (is_dir(BASEDIR."download/$file")) {
if($file=="."||$file=="..") continue;
$downdir_array[]=$file;
}}
closedir ($dir);
$totaldir = count($downdir_array);
$downtime_array=array();
for ($i = 0; $i < $totaldir; $i++){
$dir = opendir (BASEDIR."download/$downdir_array[$i]");
while ($file = readdir ($dir)) {
if (( $file != ".")&&($file != "..")&&($file != ".htaccess")&&($file != "index.php")&&($file != "name.dat")&& !ereg (".txt$", "$file")&& !ereg (".JPG$", "$file")&& !ereg (".GIF$", "$file")) {
$downfile_array[]=$file;
$filetime=filemtime(BASEDIR."download/$downdir_array[$i]/$file")+(3600*24*5);
if($filetime>$sitetime){
$downtime_array[]=$file;
}}}
closedir ($dir);
}
$totalfile = count($downfile_array);
$totalnewfile = count($downtime_array);
if($totalnewfile>0){
$dtext=(int)$totalfile.'/<font color="#FF0000">+'.(int)$totalnewfile.'</font>';
}else{
$dtext =(int)$totalfile;
}
$fp = fopen(BASEDIR."local/datatmp/down.dat","a+");
flock ($fp,LOCK_EX);
ftruncate($fp,0);
fputs($fp,$dtext);
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);
@chmod ($fp, 0777);
@chmod (BASEDIR."local/datatmp/down.dat", 0777);
}
$dinput = file_get_contents(BASEDIR."local/datatmp/down.dat");
echo ' ('.$dinput.')<br>';
?>
15.
Мансур (07.07.2010 / 12:14)
Плиз помогите сделать кеширование на код 11посте
URL:
https://visavi.net/topics/11255