Почему мой паук PHP / FTP неправильно вычисляет использование диска примерно на 15%? - PullRequest
0 голосов
/ 31 января 2019

У меня есть маршрутизатор с портом 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";


...