У меня есть маршрутизатор с портом USB и внешним USB-дисководом, и я хочу использовать его для резервного копирования.
К сожалению, маршрутизатор использует SMBv1, который небезопасен, и Windows отказывается подключаться.Маршрутизатор имеет возможность FTP к накопителю, но набор инструкций ограничен.FTP не предоставляет никакой df (дисковой файловой системы) или подобной возможности для мониторинга использования диска.Команда LIST и, следовательно, PHP ftp_rawlist () не будут работать рекурсивно.ftp_rawlist () предоставляет точные размеры файлов, но размеры каталогов неверны.
Я пытаюсь "спайдеровать" диск через FTP с помощью ftp_rawlist ()
Этот скрипт PHP, кажется, обеспечивает необходимую рекурсию, но вычисления пространства отключены примерно на 15% меньше, чем на самом деле,Чего мне не хватает?
$directories = array('/volume1') ;
$sizetotal=0;
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
while (count($directories)) {
$curdir = array_shift($directories);
$directorylisting = ftp_rawlist($conn_id, $curdir );
foreach ($directorylisting as $line) {
//substr ( string $string , int $start [, int $length ] ) : string
$ftype = substr( $line , 0,1);
$fsize= substr( $line , 29, 13);
$fname= substr( $line , 56);
if ($ftype == '-') {
$sizetotal += (int)$fsize;
} elseif ($ftype == 'd') {
array_push($directories, $curdir ."/" . $fname );
$sizetotal += $fsize;
echo $curdir ."/" . $fname ."\t" . $fsize . "\r\n";
} else {
echo "not a file or directory! probably a link.\r\n";
}
}
}
echo $sizetotal . "\r\n";