Несмотря на то, что ответов на этот пост уже много, я чувствую, что должен добавить еще один параметр для хостов Unix, который возвращает только сумму всех размеров файлов в каталоге (рекурсивно).
Если вы посмотрите на ответ Джонатана, он использует команду du
. Эта команда вернет общий размер каталога, но чистые решения PHP, опубликованные другими здесь, вернут сумму всех размеров файлов. Большая разница!
На что обратить внимание
При запуске du
во вновь созданном каталоге он может вернуть 4K
вместо 0
. Это может даже запутать после удаления файлов из рассматриваемого каталога, когда du
сообщает об общем размере каталога, который не соответствует сумме размеров файлов в нем. Зачем? Команда du
возвращает отчет, основанный на некоторых настройках файла, как Герман Ингялдссон прокомментировал этот пост .
Решение
Чтобы сформировать решение, которое ведет себя как некоторые из скриптов только для PHP, опубликованных здесь, вы можете использовать команду ls
и направить ее к awk
следующим образом:
ls -ltrR /path/to/dir |awk '{print \$5}'|awk 'BEGIN{sum=0} {sum=sum+\$1} END {print sum}'
В качестве функции PHP вы можете использовать что-то вроде этого:
function getDirectorySize( $path )
{
if( !is_dir( $path ) ) {
return 0;
}
$path = strval( $path );
$io = popen( "ls -ltrR {$path} |awk '{print \$5}'|awk 'BEGIN{sum=0} {sum=sum+\$1} END {print sum}'", 'r' );
$size = intval( fgets( $io, 80 ) );
pclose( $io );
return $size;
}