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

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

 

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

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

тема: Ответ 006 на задачу N 8
 
 автор: SoftTime   (21.02.2006 в 22:57)   письмо автору
 
 

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

<?php
//======== SIZE.PHP для задачи № 8 ================================
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//======= ФУНКЦИЯ ListRootDir($mydir)=============================
//Просматривает корневой каталог и составляет список подкаталогов,
//содержащихся в нём
//====================================================================
function ListRootDir($mydir)
{
//Массив для хранения названий подкаталогов родительского каталога
global $array;
//Индекс массива
$i=0;
//открываем каталог
$handler=opendir($mydir);
//Обходим все файлы
    
while (false !== ($file readdir($handler)))
    {
            
//Если это каталог
            
if(is_dir($file)==true)
                {
                    
//Если корневой или родительский ничего не делаем
                    
if ($file != "." && $file != "..")
                          {
                          
//Иначе Составляем список подкаталогов данного каталога
                        
$array[$i]=$file;
                        
$i++;
                        }
                 }
    }
//Закрываем каталог
closedir($handler);
}
//Конец функции
//===========================================================
//=============функция  CalcDirSize($mydir) ==================
//Вычисляет размер каталога, переданного в параметре  $mydir
//=============================================================
function CalcDirSize($mydir)
{
//Сюда заносится размер каталога
global $RootDirSize;
//Запоминаем каталог, из которого пришли
$parentdir=getcwd();
//открываем каталог
$handler=opendir($mydir);
//Устанавливаем здесь текущий каталог
chdir($mydir);
//Обходим все файлы
    
while (false !== ($file readdir($handler)))
    {
        
//Определяем размер файла
        
$filesize=filesize($file);
//Добавляем размер файла к размеру всего каталога
         
$RootDirSize+=$filesize;
            
//Если это каталог
            
if(is_dir($file)==true)
                {
                
//Если корневой или родительский ничего не делаем
                    
if ($file != "." && $file != "..")
                          {
                          
//Для каждого подкаталога вызываем эту же функцию
                           
CalcDirSize($file);
                        }
                 }
    }
//Закрываем каталог
closedir($handler);
//Устанавливаем текущим каталогом тот, из которого пришли
chdir($parentdir);
}
//Конец функции
//=================================================================
//================= САМА ПРОГРАММА ================================
//Массив для хранения названий подкаталогов родительского каталога
global $array;
//Сюда заносится размер каталога
$RootDirSize=0;
//Определяем текущий каталог
$mydir=getcwd();
//Составляем список подкаталогов корневого каталога
ListRootDir($mydir);
//Вычисляем размер содержимого корневого каталога
CalcDirSize($mydir);
//Выводим таблицу
echo('<table width="75%" border="1"><tr><td>КАТАЛОГ</td><td>РАЗМЕР</tr>');
echo(
'<tr><td>'.$mydir.'</td><td>'.$RootDirSize.'</tr>');
//Вычисляем размер каждого из подкаталогов корневого каталога
foreach ($array as $line_num => $line)
{
$RootDirSize=0;
CalcDirSize($line);
 echo(
'<tr><td>'.$mydir.'\\'.$line.'</td><td>'.$RootDirSize.'</tr>');
}
echo(
'</table>');
?>


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

   
 
 автор: cheops   (22.02.2006 в 23:25)   письмо автору
 
   для: SoftTime   (21.02.2006 в 22:57)
 

Несколько громоздко, но скрипт прекрасно справляется со своей задачей, а от него это в первую очередь и требуется. Программа пытающаяся реализовать очень хитрое и красивое решение не может называться программой, если она не работает. Скрипт не зависит от функции scandir(), которая появилась в PHP 5, учитывает родительскую .. и текущую . директории. Обыно не используют функцию chdir() для реального перемещения по каталогам, предпочитая изменять путь, передаваемый фукнции opendir(). Но такой подход не является запрещённым, более того приводит к тому, что сразу исключается целый класс ошибок связанных с удвоением слеша при формировании пути. Правда расплатой за это является лишний вызов функции chdir() и увеличивающийся объём кода, а чем более объёмный код, тем больше вероятность совершить ошибку. Очень хорошо, что используется две функции - они именно для этого и предназначены разбить код на как можно большее число мелких частей, так как легче отладить несколько небольших блоков кода, чем один большой.

   
Rambler's Top100
вверх

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