|
|
|
| Как определить размер папки вместе с её содержимом по FTP протоколу? | |
|
|
|
|
|
|
|
для: sashay
(13.02.2007 в 16:23)
| | Стандартных средств нет, нужно рекурсивно спускаться по дереву каталогов, подсчитывая объём содержимого каждой папки. | |
|
|
|
|
|
|
|
для: cheops
(14.02.2007 в 12:42)
| | Да, ну это понятно. Но как тогда организовать рекурсию? | |
|
|
|
|
|
|
|
для: sashay
(15.02.2007 в 10:25)
| | Можно воспользоваться следующим решением
<?php
$ftp_handle = ftp_connect("XXX.XXX.XXX.XXX");
if(!@ftp_login($ftp_handle, $account['name_account'], $account['pass'])) exit("Ошибка определения занимаемого объёма");
$dir = "/"; // Идём от корня FTP-аккаунта
$global_size = 0; // байт
$global_size = get_ftp_size($ftp_handle, $dir, $global_size);
echo $global_size;
ftp_close($ftp_handle);
// Функция подсчитывающая число байт, занимаемых директорией $dir
function get_ftp_size($ftp_handle, $dir, $global_size)
{
$file_list = ftp_rawlist($ftp_handle, $dir);
if(!empty($file_list))
{
foreach($file_list as $file)
{
// Разбиваем строку по пробельным символам
list($acc,
$bloks,
$group,
$user,
$size,
$month,
$day,
$year,
$file) = preg_split("/[\s]+/", $file);
if($acc[0] == 'd' && $file != ".." && $file != ".")
{
$dir_new = trim($dir."/".$file,"/");
$global_size = get_ftp_size($ftp_handle, $dir_new, $global_size);
}
else
{
$global_size += $size;
}
}
}
return $global_size;
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(15.02.2007 в 12:30)
| | Большое спасибо cheops, все работает! | |
|
|
|