Блог специалистов
14.03.2020

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

Количество показов: 3213




Возврат к списку