Считать размер загруза под мотор

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, бывает smile

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