Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсчёт файлов 
:(
    Опции темы
alligator
  Дата 22.3.2005, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: 1
Всего: 1



Задача подсчитать файлы в директории и подпапках.
reports -> somedir -> somedir -> *.bin
Я вроде что наваял паходу получилось очень криво

Код

<?
$dir = "./reports";
$depth = "all";
function count_dir($dir,$depth)
{
$dh = opendir($dir);
$size = 0;
while (($file = readdir($dh)) !== false)
if ($file != "." && $file != ".." )
{
$path = $dir."/".$file;
if($depth=="all") { if (is_dir($path)) $size += count_dir($path); }
if (is_file($path)) $size += count($path);
}
closedir($dh);
return $size;
}
?>

PM MAIL   Вверх
-=Ustas=-
Дата 22.3.2005, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Может эта функция по-ровнее:
Код

<? 
function fcount($dirname) 
{ 
  $dirhandle=opendir($dirname); 
  $filecount=0; 
  if($dirhandle) { 
    while($file = readdir($dirhandle)) { 
      if($file!="." && $file!="..") {
        $filecount++; 
      }
    }
  } 
  return $filecount; 
} 
?> 

echo fcount("../your_dir") ;



--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Mal Hack
Дата 22.3.2005, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Ustas_007 @ 22.3.2005, 23:48)
      if($file!="." && $file!="..") {

А почему сразу не написать is_file( $file ) ?
PM ICQ   Вверх
-=Ustas=-
Дата 23.3.2005, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Тормозю!!! smile


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Guest
Дата 23.3.2005, 00:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Текс сейчас проверю
  Вверх
alligator
Дата 23.3.2005, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: 1
Всего: 1



Он почему то не считает в подпапках
PM MAIL   Вверх
Mal Hack
Дата 23.3.2005, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Код
<?php

function dirsize( $d )
{
  global $count;
  $dh = opendir( $d );

  while( ( $f = readdir( $dh ) ) !== false )
   {
    if ( $f != "." && $f != ".." )
     {
      $path = $d . "/" . $f;

      if( is_dir( $path ) )
       {  dirsize( $path );  }
      elseif( is_file( $path ) )
       {  $count++;  }
     }
   }

  closedir($dh);
}

$count = 0;
dirsize("./");

?>

Писал на скорую руку. Алгоритм вроде такой. Если не будет работать, завтра точно напишу.
В принципе, можно и через рекурсию сделать, но тут малость подумать надо... А щас башка не варит уже smile
PM ICQ   Вверх
alligator
Дата 23.3.2005, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: 1
Всего: 1



Скорее всего через рекурсию и надо мне знакомый тоже самое сказал... тока незнаю как делать нада
PM MAIL   Вверх
Mal Hack
Дата 23.3.2005, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Вот так попробуй.
Код
<?php
function dirsize( $d )
{
  $dh = opendir( $d );
  while( ( $f = readdir( $dh ) ) !== false )
   {
    if ( $f != "." && $f != ".." )
     {
      $path = $d . "/" . $f;
      if( is_dir( $path ) )
       {  $count += dirsize( $path , $count );  }
      elseif( is_file( $path ) )
       {  $count++;  }
     }
   }
  closedir($dh);
  return $count;
}
$count = 0;
print dirsize("./" , 0);
?>

PM ICQ   Вверх
alligator
Дата 23.3.2005, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: 1
Всего: 1



Работает.... спасибо огромное попробую приязать к нему подсчёт файлов с определённым расширением
PM MAIL   Вверх
Opik
Дата 23.3.2005, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



alligator
glob тебе поможет...
PM MAIL Skype   Вверх
alligator
Дата 23.3.2005, 04:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: 1
Всего: 1



я сначала пробовал извратиться с explode
Код

          $bv = explode(".",$f);
          $dd = $bv[(count($bv)-1)];

Тока не получилось (
Ща еще glob посмотрю.. спасибо

Это сообщение отредактировал(а) alligator - 23.3.2005, 04:03
PM MAIL   Вверх
alligator
Дата 23.3.2005, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: 1
Всего: 1



Шаблон использования glob понятен... тока к скрипту его привязать тожа не получилось (
Код

      $path = glob($d . "/" . $f."/*.bin);

Пробовал привязать и в другие места ..
PM MAIL   Вверх
Mal Hack
Дата 23.3.2005, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Как вариант:
Код
      elseif( is_file( $path ) && preg_match( "#\.(gif|jpg|exe|dll)#i" , $path ) )


PM ICQ   Вверх
alligator
Дата 23.3.2005, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: 1
Всего: 1



Сдесь всё получилось ... спасибо!
Еще вопросик появился сорри за оффтоп конечно..print

"Размер отчётов: " . round( getdirsize("./") / 1024 , 0 ) . " Kb.";
Хотел сделать вывод в мегабайтах потипу 0.5 Mb.

Это сообщение отредактировал(а) alligator - 23.3.2005, 18:16
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0658 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.