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

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

 

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

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

тема: Ответ 002 на задачу N 9
 
 автор: SoftTime   (25.02.2006 в 19:43)   письмо автору
 
 

Ответ 002 на задачу N 9.
С условиями задачи можно ознакомится по ссылке.

//size_all.php from udaf
<?php
/*
//для тех у кого пхп ниже пятой версии
//просто не хотелось ничего менять в своих  функциях
function scandir($dir_name)
{
    $opened_dir = opendir($dir_name);
    while (($file = readdir($opened_dir)) !== false) 
    {
        $files_in_array[] = $file;
    }
    closedir($opened_dir);
return $files_in_array;
}
*/
//функция для подсчета размера каталога
function dir_size($dir_name)
{
    
//получаем список файлов
    
$files_in_dir scandir($dir_name);
    
//обходим массив и для директорий запускаем рекурсивно свою функцию
    
foreach($files_in_dir as $file_in_dir)
    {
        
//фильтрация от текущей директории и родительской
        
if(($file_in_dir == ".") || ($file_in_dir == ".."))continue;
        
//если файл
        
if(is_file($dir_name."/".$file_in_dir)) $cur_dir_size += filesize($dir_name."/".$file_in_dir);
        
//если директория то запускаем свою функцию
        
if(is_dir($dir_name."/".$file_in_dir)) $cur_dir_size += dir_size($dir_name."/".$file_in_dir);
    }
    
//возвращаем значение
    
return $cur_dir_size;
}
//функция выводящяя директорию и ее размер
function dir_names($dir_name$begin)
{
    
//получаем список файлов
    
$files_in_dir scandir($dir_name);
    
//обходим массив 
    
foreach($files_in_dir as $file_in_dir)
    {
        
//фильтрация от текущей директории и родительской
        
if(($file_in_dir == ".") || ($file_in_dir == ".."))continue;
        
//если директория
        
if(is_dir($dir_name."/".$file_in_dir))
        {
            
//выводим ее название с ттступами и ее размер пощитанный функцией dir_size
            
echo("<tr><td>".$begin.$file_in_dir."</td><td>".dir_size($dir_name."/".$file_in_dir)."</td></tr>\n");
            
//рекурсивно вызываем функцию для подкаталогов
            
dir_names($dir_name."/".$file_in_dir,$begin."../");
        }
    }
}
echo(
"<table>\n<tr align=left><th>dir</th><th>size</th>\n</tr><tr><td>.</td><td>".dir_size(".")."</td></tr>\n");
dir_names(".","./");
echo(
"</table>");
?>


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

   
 
 автор: cheops   (27.02.2006 в 00:32)   письмо автору
 
   для: SoftTime   (25.02.2006 в 19:43)
 

Очень компактный скрипт, причём без использования глобальных переменных.

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

   
Rambler's Top100
вверх

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