programming:php:ftp-dir-size
Размер директории на FTP
<?php # copyright by fackelkind | codeMaster function getRecDirSize ($connection, $dir){ $temp = ftp_rawlist ($connection, "-alR $dir"); foreach ($temp as $file){ if (ereg ("([-d][rwxst-]+).* ([0-9]) ([a-zA-Z0-9]+).* ([a-zA-Z0-9]+).* ([0-9]*) ([a-zA-Z]+[0-9: ]*[0-9]) ([0-9]{2}:[0-9]{2}) (.+)", $file, $regs)){ $isdir = (substr ($regs[1],0,1) == "d"); if (!$isdir) $size += $regs[5]; } } return $size; } $dirSize = getRecDirSize ($conID, "/"); ?>
function getRecDirSize ($connection, $dir){ $temp = ftp_rawlist ($connection, "-alR $dir"); foreach ($temp as $file){ if (ereg ("([-d][rwxst-]+).* ([0-9]) ([a-zA-Z0-9]+).* ([a-zA-Z0-9]+).* ([0-9]*) ([a-zA-Z]+[0-9: ]*[0-9]) ([0-9]{2}:[0-9]{2}) (.+)", $file, $regs)){ $isdir = (substr ($regs[1],0,1) == "d"); if (!$isdir) $size += $regs[5]; } } return $size; }
private function dirsize($dir) { $size = 0; if (is_dir($dir)) { $objects = scandir($dir); foreach ($objects as $object) if ($object != "." && $object != ".." && $object != 'index.php') if (filetype($dir."/".$object) == "dir") $size += $this->dirsize($dir."/".$object); else $size += filesize($dir."/".$object); reset($objects); } return $size; }
/** * Calculate the full size of a directory * * @author Jonas John * @version 0.2 * @link http://www.jonasjohn.de/snippets/php/dir-size.htm * @param string $DirectoryPath Directory path */ function CalcDirectorySize($DirectoryPath) { // I reccomend using a normalize_path function here // to make sure $DirectoryPath contains an ending slash // (-> http://www.jonasjohn.de/snippets/php/normalize-path.htm) // To display a good looking size you can use a readable_filesize // function. // (-> http://www.jonasjohn.de/snippets/php/readable-filesize.htm) $Size = 0; $Dir = opendir($DirectoryPath); if (!$Dir) return -1; while (($File = readdir($Dir)) !== false) { // Skip file pointers if ($File[0] == '.') continue; // Go recursive down, or add the file size if (is_dir($DirectoryPath . $File)) $Size += CalcDirectorySize($DirectoryPath . $File . DIRECTORY_SEPARATOR); else $Size += filesize($DirectoryPath . $File); } closedir($Dir); return $Size; }
/** * Return human readable sizes * * @author Aidan Lister <aidan@php.net> * @version 1.3.0 * @link http://aidanlister.com/2004/04/human-readable-file-sizes/ * @param int $size size in bytes * @param string $max maximum unit * @param string $system 'si' for SI, 'bi' for binary prefixes * @param string $retstring return string format */ function size_readable($size, $max = null, $system = 'si', $retstring = '%01.2f %s') { // Pick units $systems['si']['prefix'] = array('B', 'K', 'MB', 'GB', 'TB', 'PB'); $systems['si']['size'] = 1000; $systems['bi']['prefix'] = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB'); $systems['bi']['size'] = 1024; $sys = isset($systems[$system]) ? $systems[$system] : $systems['si']; // Max unit to display $depth = count($sys['prefix']) - 1; if ($max && false !== $d = array_search($max, $sys['prefix'])) { $depth = $d; } // Loop $i = 0; while ($size >= $sys['size'] && $i < $depth) { $size /= $sys['size']; $i++; } return sprintf($retstring, $size, $sys['prefix'][$i]); }
programming/php/ftp-dir-size.txt · Последнее изменение: 2017/03/27 11:26 — artur