s

PHP에서 2GB이상의 파일크기 정확히 얻기

PHP가 제공해주는 filesize()함수는 일부 OS(부호화된 32비트 정수형체계를 이용하는 플랫폼들)에서는 2GB이상 되는 파일의 크기를 정확히 출력해주지 못합니다.
왜냐문 당연히 부호화된 32비트체계에서는 PHP가 다룰수 있는 정수값의 범위가 -2 147 483 647 부터 2 147 483 647 까지로, 2GB이상을 담을수 없기때문입니다.
여러가지 플랫폼에 무관하게 대용량 파일의 크기를 빠르고 쉽게 얻을수 있는 함수를 공개합니다.

    function getFileSize($file) {
        if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
            $size = trim(exec("for %F in (\"" . $file . "\") do @echo %~zF"));
        }
        elseif ((PHP_OS == 'Linux') || (PHP_OS == 'FreeBSD') || (PHP_OS == 'Unix') || (PHP_OS == 'SunOS')) {
            $size = trim(shell_exec("stat -c%s " . escapeshellarg($file)));
        } else {
            $size = filesize($file);
        }
        return $size;
    }

로직은 간단하죠.
콘솔지령으로 파일의 크기를 제한 없이 추출했습니다.

그누보드에서는 게시판의 파일을 다운로드하는데 filesize()함수를 이용하던데, 물론 용량제한으로 2GB이상의 파일을 취급 안 하지만, 확장성을 고려하여 filesize()함수 대신 getFileSize()함수를 이용하는게 더 나은 선택이 아닐가 문의드립니다.
대용량의 파일을 다운로드하고여 사용할때는 퍽 유익하더라구요...

감사합니다.

|

댓글 5개

좋은 정보 고맙습니다.
32bit 운영체제 지원은 기억에서 지우고 있었는데 필요하신분이 계실지도 모르겠네요 ㅎㅎ
file_exists(), function_exists()로 예외처리도 하면 좋을것 같습니다.
쑤꾸웹~~~
캄사합니다~~
댓글을 작성하시려면 로그인이 필요합니다.
+
제목 글쓴이 날짜 조회
20-12-11 조회 9,485
20-12-10 조회 9,206
20-12-10 조회 8,653
20-12-08 조회 7,089
20-12-08 조회 9,707
20-12-05 조회 9,094
20-12-03 조회 8,203
20-12-03 조회 6,515
20-11-24 조회 7,394
20-11-24 조회 8,735
20-11-23 조회 7,063
20-11-22 조회 8,260
20-11-20 조회 6,577
20-11-19 조회 7,530
20-11-19 조회 6,458
20-11-19 조회 6,628
20-11-19 조회 6,991
20-11-14 조회 8,616
20-11-11 조회 8,474
20-11-09 조회 7,539
20-11-06 조회 8,950
20-11-05 조회 8,104
20-11-01 조회 8,041
20-10-30 조회 1.2만
20-10-28 조회 7,441
20-10-28 조회 8,101
20-10-27 조회 1.6만
20-10-27 조회 6,768
20-10-21 조회 6,977
20-10-20 조회 7,348