PHP에서 2GB이상의 파일크기 정확히 얻기 정보
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()함수를 이용하는게 더 나은 선택이 아닐가 문의드립니다.
대용량의 파일을 다운로드하고여 사용할때는 퍽 유익하더라구요...
감사합니다.
3
댓글 5개
file_exists(), function_exists()로 예외처리도 하면 좋을것 같습니다.
캄사합니다~~