14.03.2020
Ниже указан скрипт PHP, который может выводить директории с размерами от корня сайта или от определенной директории, или сразу всё вместе с файлами и без них.
От нас требуется создать по FTP или через файл-менеджер файл .php, вставить в него наш код и запустить. В коде есть комментарии, надеемся, там все понятно.
Количество показов: 3863
Скрипт PHP вывести директории (папки) и файлы c размерами
На обычном shared-хостинге в файл-менеджере указаны размеры только файлов, но не директорий. Также программы FTP выдают только размеры файлов, но не директорий. Но очень част о нужно узнать, какая же папка (директория) у нас увеличилась, чтобы принять меры по ее очищению или оптимизации.Ниже указан скрипт PHP, который может выводить директории с размерами от корня сайта или от определенной директории, или сразу всё вместе с файлами и без них.
От нас требуется создать по FTP или через файл-менеджер файл .php, вставить в него наш код и запустить. В коде есть комментарии, надеемся, там все понятно.
<?php
// функция для определения размера всех подпапок
function dir_size($dirname) {
$totalsize=0;
if ($dirstream = @opendir($dirname)) {
while (false !== ($filename = readdir($dirstream))) {
if ($filename!="." && $filename!="..")
{
if (is_file($dirname."/".$filename))
$totalsize+=filesize($dirname."/".$filename);
if (is_dir($dirname."/".$filename))
$totalsize+=dir_size($dirname."/".$filename);
}
}
}
closedir($dirstream);
return $totalsize;
}
// функция для просмотра всех подпапок и всех вложенных файлов
function getFileList($dir, $recurse=false, $depth=false, $withfiles=false)
{
// массив, хранящий возвращаемое значение
$retval = array();
// добавить конечный слеш, если его нет
if(substr($dir, -1) != "/") $dir .= "/";
// указание директории и считывание списка файлов
$d = @dir($dir) or die("getFileList: Не удалось открыть каталог $dir для чтения");
while(false !== ($entry = $d->read())) {
// пропустить скрытые файлы
if($entry[0] == ".") continue;
if(is_dir("$dir$entry")) {
$size = dir_size("$dir$entry");
$retval[] = array(
"name" => "$dir$entry/",
"size" => $size,
"lastmod" => filemtime("$dir$entry")
);
if($recurse && is_readable("$dir$entry/")) {
if($depth === false) {
$retval = array_merge($retval, getFileList("$dir$entry/", true));
} elseif($depth > 0) {
$retval = array_merge($retval, getFileList("$dir$entry/", true, $depth-1));
}
}
} elseif(is_readable("$dir$entry")) {
if($withfiles) {
$retval[] = array(
"name" => "$dir$entry",
"size" => filesize("$dir$entry"),
"lastmod" => filemtime("$dir$entry")
);
}
}
}
$d->close();
return $retval;
}
// массив значений указывая параметры директория (например ./upload/ или ./ - от корня сайта), рекурсивно или нет, уровень вложенности, с файлами или только директории
$dirlist = getFileList("./", true, 0, false);
$data_size=array();
foreach($dirlist as $key=>$arr){
$data_size[$key]=$arr['size'];
}
//Сортируем массив по размерам для удобства чтения
array_multisort($data_size, SORT_NUMERIC, $dirlist);
?>
<style>td, th {padding: 0px 5px;}</style>
<table>
<thead>
<th>Название</th>
<th>Размер</th>
<th>Дата изменения</th>
</thead>
<tbody>
<?php
foreach ($dirlist as $student)
{
echo '<tr>
<td>'.$student['name'].'</td>
<td>'.round($student['size']/1048576, 4).' Мб'.'</td>
<td>'.date('d/m/Y g:i A', $student['lastmod']).'</td>
</tr>';
}
?>
</tbody>
</table>
Количество показов: 3863