dirsize php или du unix

Smile

Старатель
Регистрация
12 Ноя 2006
Сообщения
157
Реакции
11
Доброе утро,

посоветуйте какую команду лучше использовать дабы определить размер папки с файлами на сервере, php функцию dirsize или через exec du -sh и записывать логи.

ПС: папки могут быть огромные, 100+ гб. Интересует быстродействие.

Спасибо.
 
функцию dirsize или через exec du -sh
А что такое dirsize? Если обход каталогов {не встроенными} функциями PHP, то du конечно быстрее.
если нужен конкретный каталог без глубины - в du можно max-depth передать.
 
в php обычно это выглядит, например, так (5.3+) :
PHP:
$dir = new RecursiveDirectoryIterator( '/path/to/folder', RecursiveDirectoryIterator::SKIP_DOTS );
$iterator = new RecursiveIteratorIterator( $dir, RecursiveIteratorIterator::SELF_FIRST );

$total_size = 0;
foreach( $iterator as $v ){

    if( $v->isFile() ){

        $total_size += $v->getSize();
    }
}

echo number_format( $total_size, 0, '', "'" ) . ' bytes';

но, если права позволяют, быстрее, естественно, через du.. напр. так:
PHP:
$base_path = '/path/to/folder';
$handler = popen( '/usr/bin/du -s ' . $base_path, 'r' );
$total_size = fgets( $handler, 4096 );
pclose( $handler );
echo number_format( $total_size, 0, '', "'" ) . ' bytes';
 
лучше конечно du записывать. если без du, то можно обойтись скриптом, типа
#!/bin/bash
FILENAME=/home/bigfile.txt
FILESIZE=$(stat -c%s "$FILENAME")
echo "Size of $FILENAME = $FILESIZE bytes." > /home/log.txt
и дергать скрипт по крону
 
Назад
Сверху