본문 바로가기

php

php ftp 디렉토리 용량 구하기

<?php
$ftp_server = 'ftp 주소';
$ftp_username = '계정';
$ftp_password = '패스워드';
$folder_path = '경로';


// FTP 연결 설정
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_username, $ftp_password);
ftp_pasv($conn_id, true);



if ($conn_id && $login_result) {
    // 폴더 크기 확인 함수 호출
    $folder_size = getFtpFolderSize($conn_id, $folder_path);

    if ($folder_size !== false) {
        echo "FTP 폴더 용량: " . formatBytes($folder_size) . "\n";
    } else {
        echo "폴더 용량을 확인할 수 없습니다.\n";
    }

    ftp_close($conn_id);
} else {
    echo "FTP 서버 연결에 실패하였습니다.\n";
}

// FTP 폴더 크기 확인 함수
function getFtpFolderSize($ftp_conn, $folder_path)
{
    $folder_size = 0;

    $files = ftp_nlist($ftp_conn, $folder_path);

    if ($files !== false) {
        foreach ($files as $file) {
            $file_path = $folder_path . '/' . $file;
           $response = ftp_raw($ftp_conn, "SIZE $file_path");
          if (preg_match("/^(\\d{3}) (.*)$/", $response[0], $matches) == 0)  throw new Exception("Unable to parse FTP reply: ".$response[0]);

//return $tempfile_size[2] 
$tempfile_size = list($response, $responseCode, $responseMessage) = $matches;
            if (ftp_size($ftp_conn, $file_path) == -1) {

                $folder_size = getFtpFolderSize($ftp_conn, $file_path);
            } else {
// 정수화한다.
$folder_size += (int)$tempfile_size[2];
            }
        }
    } else {
        return false;
    }
    return $folder_size;
}

// 바이트 단위를 용량 표시로 변환하는 함수
function formatBytes($size, $precision =4)
{
    $unit = ['Byte','KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB'];

    for($i = 0; $size >= 1024 && $i < count($unit)-1; $i++){
        $size /= 1024;
    }

    return round($size, $precision).' '.$unit[$i];
}
?>