Главная » Блог » Скрипт PHP вывести директории (папки) и файлы c размерами
Полезное

Скрипт 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>

Читать все статьи

Добавить комментарий