2015-05-01 2 views
0

Мне нужно выяснить, как я могу получить размер каталога в папке.Получить размер каталога ssh2 php

Код, который работает берется из php.net

$SSH_CONNECTION= ssh2_connect('xx.xxx.xx.xx', xx); 
ssh2_auth_password($SSH_CONNECTION, 'xxxxxxx', 'xxxxxxxxxxxxx'); 

function scanFilesystem($dir) { 
    $tempArray = array(); 
    $handle = opendir($dir); 
    // List all the files 
    while (false !== ($file = readdir($handle))) { 
    if (substr("$file", 0, 1) != "."){ 
      if(is_dir($file)){ 
      $tempArray[$file]=scanFilesystem("$dir/$file"); 
     } else { 
      $tempArray[]=$file; 
     } 
    } 
    } 
    closedir($handle); 
    return $tempArray; 
} 


$sftp = ssh2_sftp($SSH_CONNECTION); 

//code to get listing of all OUTGOING files 
$dir = "ssh2.sftp://$sftp//home/user/mail/websiteaddress.com.au/janedoe"; 
$outgoing = scanFilesystem($dir); 
sort($outgoing); 
print_r($outgoing); 

Так я получаю результат от print_r, но теперь, как я могу получить размер папки из JaneDoe?

Выход $ исходящее является:

array(4) { 
[0]=> string(3) "cur" 
[1]=> string(11) "maildirsize" 
[2]=> string(3) "new" 
[3]=> string(3) "tmp" 
} 
+0

Что вы имеете в виду размер папки? Количество файлов в папке? – Barmar

+0

@Barmar Я имею в виду размер папки в мегабайтах или kb –

+0

Используйте 'stat (" $ dir/$ file ")' для получения информации о файле, который включает в себя размер файла. Добавьте это в переменную '$ total_size'. – Barmar

ответ

0

Вы можете добавить FileSize аккумулятор для вашего возвращения массива:

function scanFilesystem($dir) { 
    $tempArray = array(); 
    $tempArray['total_size'] = 0; 
    $handle = opendir($dir); 
    // List all the files 
    while (false !== ($file = readdir($handle))) { 
    if (substr("$file", 0, 1) != "."){ 
      if(is_dir($file)){ 
      $tempArray[$file]=scanFilesystem("$dir/$file"); 
      $tempArray['total_size'] += $tempArray[$file]['total_size']; 
     } else { 
      $tempArray[]=$file; 
      $tempArray['total_size'] += filesize("$dir/$file"); 
     } 
    } 
    } 
    closedir($handle); 
    return $tempArray; 
} 
+0

Чтобы получить общий размер, после рекурсии вам нужно будет добавить его общий размер к общему размеру на этом уровне. – Barmar

+1

'$ tempArray [' total_size '] + = $ tempArray [$ file] [' total_size ']; ' – Barmar

+0

Oh nice catch! Спасибо –

Смежные вопросы