Le Droy Цитата: Поднимаю старое сообщение, но объясните, зачем такой, простите, изврат? Ведь существует функция ucfirst();
ucfirst поднимает только первую букву. код выше - произвольную, либо целиком.
В общем есть у меня кусок - считающий вес директории перебором файлов. Для маленьких директорий он, конечно же, работает быстро. Для большого числа - не очень. В общем переписал через консольные возможности (возможно, что не учел всех возможностей)
Код: <?php
$userdir='.';
$start=microtime(true);
echo "Method#1: ".dsize($userdir)." Bytes<br>";
$end=microtime(true);
echo "Time:".($end-$start)." seconds<br>";
$start=microtime(true);
echo "Method#2: ".getsize($userdir)." Bytes<br>";
$end=microtime(true);
echo "Time:".($end-$start)." seconds<br>";
function dsize($dir)
{
if (!file_exists($dir)||!is_dir($dir)) return -1;
$size=0;
if (eregi("Windows",$_ENV['OS']))
{
$dirs=dirslist($dir);
if(is_array($dirs))
foreach($dirs as $d)
$size+=dir_size($d);
return $size;
}
else
{
$du = @popen('/usr/bin/du -sb ' . escapeshellarg($dir), 'r');
$result = fgets($du, 256); pclose($du);
list($result,) = explode("\t", $result);
return intval($result);
}
return 0;
}
function dirslist($dir)
{
$dir=str_replace('/','\\',$dir);
$out=shell_exec("dir /AD /b /s ".escapeshellarg($dir));
$dirs=split("[\n\r]+",$out);
if (is_array($dirs)&&trim($dirs[count($dirs)-1])=='') array_pop($dirs);
$dirs[]=$dir;
return $dirs;
}
function dir_size($dir)
{
$dir=str_replace('/','\\',$dir);
$out=shell_exec("dir ".escapeshellarg($dir));
$out=preg_split('/[\n\r]+/',$out);
if (is_array($out)&&count($out)>2)
{
preg_match('/([0-9,\.]+)\s+bytes/i',$out[count($out)-3],$bytes);
if (isset($bytes[1])) return intval(str_replace(array(',','.'),'',$bytes[1]));
}
return 0;
}
function getsize($path){
if (!is_dir($path))
return filesize($path);
$size=0;
foreach (scandir($path) as $file){
if ($file=='.' or $file=='..')
continue;
$size+=getsize($path.'/'.$file);
}
return $size;
}
?>