|
Pers.narod.ru. PHP. Построение дерева каталогов на PHP 5 и PHP 4 |
В PHP5 появилась функция scandir, получающая список файлов и каталогов, расположенных по указанному пути. Применение этой функции плюс рекурсии позволяет легко написать скрипт для построения дерева каталогов на PHP:
<?php
function sizedir($folder) {
$files = scandir($folder);
$c=0;
foreach($files as $file) {
if ($file=='.' or $file=='..') continue;
$f0=$folder.'/'.$file;
if (is_file($f0)) $c += filesize($f0);
if (is_dir($f0)) $c += sizedir($f0);
}
return $c;
}
function getsize ($bytes) {
if ($bytes<1024) return $bytes.' байт';
else if ($bytes<1048576) return round ($bytes/1024,2).' Кб';
else if ($bytes<1073741824) return round ($bytes/1048576,2).' Мб';
else return round ($bytes/1073741824,2).' Гб';
}
function showdir($folder,$begin) {
$files = scandir($folder);
foreach($files as $file) {
if ($file=='.' or $file=='..') continue;
$f0=$folder.'/'.$file;
if (is_dir($f0)) {
echo '<tr><td>'.$begin.$file.'</td><td>'.$begin.getsize(sizedir($folder.'/'.$file)).'</td></tr>'."\n";
showdir($f0,$begin.' ');
}
}
}
echo '<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Вывод каталогов рекурсивно</title>
</head><body>';
$dir='./';
echo '<font face="Courier New"><table border="0" cellpadding="0" cellspacing="0">'."\n";
//echo '<tr><td>.</td><td>'.getsize(sizedir($dir)).'</td></tr>';
showdir($dir,'');
echo '</table></font>';
echo '</body></html>';
?>
Скрипт может выполняться довольно долго, если в папке $dir много вложенных папок и файлов (в примере дерево смотрится от корня сервера!). Для "симметричности" всё выводится моноширинным шрифтом Courier New, а чтобы избежать огромных чисел (размеры папок-то считаются в байтах),
метод getsize переводит размер в байтах в Кб или Мб, оставляя байты только для файлов меньше 1 Кб.
Если нужно дополнительно показать размер самой папки $dir, от которой строится дерево, раскомментарьте одну строчку в листинге:
//echo '<tr><td>.</td><td>'.getsize(sizedir($dir)).'</td></tr>';
Если нужно, чтобы работало на PHP4, можно просто добавить в листинг свою scandir:
function scandir($folder) {
$dir = opendir($folder);
$list=array();
while ($file=readdir($dir)) $list[] = $file;
closedir($dir);
return $list;
}
Пример того, что построил скрипт для небольшой папки на локалхосте:

|
|