Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ответ 001 на задачу N 9
 
 автор: SoftTime   (24.02.2006 в 12:55)   письмо автору
 
 

Ответ 001 на задачу N 9.
С условиями задачи можно ознакомится по ссылке.
Здравствуйте. Вот ответ на задачу №9.

<?php
/*
Требуется создать скрипт size_all.php, который строит полное дерево подкаталогов (начиная с текущего), выводит это дерево с отступами для вложенных подкаталогов, а также указывает общий объем занимаемого места для каждого подкаталога. Файлы выводить не нужно.
*/
//функция для подсчёта объёма каталога
function CalcDirSize($mydir)
{
//В этой переменной храним размер каталога
$DirSize=0;
//Глобальный массив, содержащий форматированные строки для вывода
global $array;
//Индекс глобального массива $array
global $i;
//Массив, для хранения каталогов первого уровня данного каталога
$arrayDir=array();
//Индекс для $arrayDir
$iarrayDir=0;
//Массив для сортировки по алфавиту каталогов
$sortArray=array();
//Количество отступов для вложенных каталогов
global $k;
//Строка для занесения в глобальный массив $array
$string='';
//Строка, содержащая пробелы для отступа вложенных каталогов
$probel='|------';
//Увеличиваем количество отступов для вложенных каталогов
$k++;
//Запоминаем каталог, из которого пришли
$parentdir=getcwd();
//открываем каталог
$handler=opendir($mydir);
//Устанавливаем здесь текущий каталог
chdir($mydir);
//Обходим все файлы
    
while (false !== ($file readdir($handler)))
    {
            
//Определяем размер файла
            
$filesize=filesize($file);
            
//Добавляем размер файла к размеру всего каталога
              
$DirSize+=$filesize;
            
//Если это каталог
            
if(is_dir($file)==true)
                {
                
//Если корневой или родительский ничего не делаем
                
if ($file != "." && $file != "..")
                      {
                              
//Заносим имена каталогов в массив
                               
$arrayDir[$iarrayDir]=$file;
                             
$iarrayDir++;
                       }
                 }
    }
// Для того, чтобы сортировка была строго по алфавиту, нужно выключить чувствительность к регистру
foreach($arrayDir as $line_num => $line)
{
$index strtolower($line);
$sortArray[$index]=$line;
}
//Сортируем массив по ключевому полю в обратном порядке
krsort($sortArray);
//Для каждого каталога вызываем функцию  CalcDirSize($file)
foreach($sortArray as $line_num => $line)
{
$DirSize+=CalcDirSize($line);
}
//Формируем строку пробелов для отступа вложенных каталогов по сравнению с родительским
$probel=str_repeat($probel,$k);
//Формируем строку, содержащую необходимый отступ, имя каталога, его размер
$string=sprintf("<table><tr><td>%s</td><td><b>%s</b></td><td>&nbsp;</td><td>%s байт</td><td></tr></table>",$probel,$mydir,$DirSize);
//И заносим эту строку в глобальный массив $array
$i++;
$array[$i]=$string;
//Закрываем каталог
closedir($handler);
//Устанавливаем текущим каталогом тот, из которого пришли
chdir($parentdir);
//Уменьшаем количество отступов для вложенных каталогов
$k--;
//Возвращаем размер каталога
return($DirSize);
}
//Конец функции CalcDirSize($mydir)
////////////////
global $array;
global 
$k;
global 
$i;
$k=-1;
$i=-1;
//Определяем текущий каталог
$mydir=getcwd();
CalcDirSize($mydir) ;
//Выводим сформированный массив $array в обратном порядке
   
for ($a $i$a>=$a--)
   {
      echo(
$array[$a]);
   }
?>


http://www.softtime.ru/info/task.php?id_article=79

   
 
 автор: cheops   (27.02.2006 в 00:29)   письмо автору
 
   для: SoftTime   (24.02.2006 в 12:55)
 

Я в восхищении. Отличный скрипт, со своей задачей скрипт справляется блестяще, формируя элегантную систему отступов. Использование глобальных переменных лучше избегать, но в данной задаче, я бы пожалуй тоже ими воспользовался.

PS Так как скрипта всего два, а тонкости разбирали в предыдущей задаче, то оцеки выставляются по читабельности и оригинальности, соответственно 4 и 5.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования