Artykuły na każdy temat
<?php
$dir = '../path_to_project/';
$prohibited_dirs = ['/libs/', '/templates_c/'];
$allowed_extensions = ['php', 'js', 'json', 'tpl', 'css', 'txt'];
header('Content-Type: text/plain; charset=utf-8');
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir, RecursiveIteratorIterator::SELF_FIRST | FilesystemIterator::UNIX_PATHS)) as $file_info)
{
if($file_info -> isDir() === true)
{
++$statistics['general']['dirs'];
}
else
{
$path = substr($file_info -> getPathname(), strlen($dir));
if($path[0] !== '/')
{
$path = '/'.$path;
}
foreach($prohibited_dirs as $prohibited_dir)
{
if(substr($path, 0, strlen($prohibited_dir)) === $prohibited_dir)
{
$path = null;
break;
}
}
if(in_array($file_info -> getExtension(), $allowed_extensions) === true && $path !== null)
{
++$statistics['general']['designated_files'];
$statistics['general']['filesize'] += filesize($file_info -> getPathname());
$statistics['general']['amount_of_lines'] += count(file($file_info -> getPathname()));
}
++$statistics['general']['files'];
}
}
var_dump($statistics);
?>
A gdyby ktoś potrzebował szybko przeliczyć bajty na inne jednostki to w ramach bonusu dorzucam fragment klasy do debugowania.
<?php
class debug
{
static private $units = ['B', 'kB', 'MB', 'GB'];
static private function convert($size)
{
$unit = floor(log($size, 1024));
return round($size / pow(1024, $unit), 2).' '.debug::$units[$unit];
}
}
?>
Przypominam również, iż do zaawansowanych statystyk można wykorzystać narzędzia takie jak PHPDoc, CLOC lub PHPLOC.
Komentarze
Dodaj komentarz