{% else-1 %}
ВведениеПредположим что вам нужно подсчитать размер всех файлов начиная с текущей директории, получить их число и количество вложенный поддиректорий. Подобные задачи решаться применением рекурсии - то есть обращения из функции к самой себе.Решение задачиБлагодаря способности PHP выполнять рекурсивные запросы к функциям (а также к методам классов) стало возможным решить платформо - независимую задачу подсчета размера файлов в директориях.Приведем пример класса на php решающего задачу подсчета размера всех файлов вложенный в директорию и в поддиректории:

                        
<?phpclass calc_dir{var $a_fname=array();var $a_fsize=array();var $a_fdir =array();var $cofiles;function init(){$this->cofiles=0;}function calc_files($in_dir){#Так можно отсечь нежелательные имена файлов#if (preg_match("/_vti[.]*/i",$in_dir))return;if ($dir_handle = @opendir($in_dir)){  while($file = readdir($dir_handle))    {     //Рекурсивный проход по директориям     if ($file!=".." && $file!="." && is_dir($file))    $this->calc_files($in_dir."/".$file);     //Проход по файлам     if (is_file($in_dir."/".$file) && $file!=".." && $file!=".")    {    $this->a_fname[$this->cofiles]=$file;    $this->a_fsize[$this->cofiles]=filesize ($in_dir."/".$file);    $this->a_fdir [$this->cofiles]=$in_dir;    $this->cofiles++;    }    }}}function show(){echo "<center><table border="1"><tr align="center"> <td>i</td><td>name</td><td>size</td><td>dir</td></tr>";$a_size=0;for ($i=0;$i<count($this->a_fname);$i++){echo "<tr align="center"><td>".($i+1)."</td><td>".$this-> a_fname[$i]."</td><td>".$this->a_fsize[$i]."</td><td> ".$this->a_fdir[$i]."</td></tr>";$a_size+=$this->a_fsize[$i];}echo "<tr><td colspan="2">Total:</td><td colspan="2">$a_size</td></tr>";echo "</table></center>";}}//end class$d=new calc_dir;$d->init();$d->calc_files("C:/windows/command/");$d->show();?>
0 37 0
Без комментариев...