반응형
PHP 파일 크기 MB/KB 변환
PHP의 출력을 변환하려면 어떻게 해야 합니까?filesize()
기가바이트, 킬로바이트 등의 포맷으로 기능합니다.
예를 들어 다음과 같습니다.
- 크기가 1MB 미만인 경우 크기(KB)를 표시합니다.
- 1MB에서 1GB 사이이면 MB 단위로 표시
- 더 큰 경우 - GB 단위
다음은 샘플입니다.
<?php
// Snippet from PHP Share: http://www.phpshare.org
function formatSizeUnits($bytes)
{
if ($bytes >= 1073741824)
{
$bytes = number_format($bytes / 1073741824, 2) . ' GB';
}
elseif ($bytes >= 1048576)
{
$bytes = number_format($bytes / 1048576, 2) . ' MB';
}
elseif ($bytes >= 1024)
{
$bytes = number_format($bytes / 1024, 2) . ' KB';
}
elseif ($bytes > 1)
{
$bytes = $bytes . ' bytes';
}
elseif ($bytes == 1)
{
$bytes = $bytes . ' byte';
}
else
{
$bytes = '0 bytes';
}
return $bytes;
}
?>
제가 찾은 플러그인으로 만든 이 버전은 더 멋집니다.
function filesize_formatted($path)
{
$size = filesize($path);
$units = array( 'B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
$power = $size > 0 ? floor(log($size, 1024)) : 0;
return number_format($size / pow(1024, $power), 2, '.', ',') . ' ' . $units[$power];
}
filesize() 문서의 메모
PHP의 정수 유형이 서명되어 있고 많은 플랫폼이 32비트 정수를 사용하기 때문에 일부 파일 시스템 함수는 2GB보다 큰 파일에 대해 예기치 않은 결과를 반환할 수 있습니다.
보다 깔끔한 접근법:
function Size($path)
{
$bytes = sprintf('%u', filesize($path));
if ($bytes > 0)
{
$unit = intval(log($bytes, 1024));
$units = array('B', 'KB', 'MB', 'GB');
if (array_key_exists($unit, $units) === true)
{
return sprintf('%d %s', $bytes / pow(1024, $unit), $units[$unit]);
}
}
return $bytes;
}
이게 더 나은 방법인 것 같아요.심플하고 직설적입니다.
public function sizeFilter( $bytes )
{
$label = array( 'B', 'KB', 'MB', 'GB', 'TB', 'PB' );
for( $i = 0; $bytes >= 1024 && $i < ( count( $label ) -1 ); $bytes /= 1024, $i++ );
return( round( $bytes, 2 ) . " " . $label[$i] );
}
이것은 @adnan의 훌륭한 대답에 근거하고 있습니다.
변경 사항:
- 내부 filesize() 호출
- 초기 스타일로 되돌아가다
- 1바이트에 1개의 합성을 저장합니다.
또한 함수에서 filesize() 호출을 꺼내 순수한 바이트 형식 함수를 얻을 수 있습니다.하지만 이건 파일로 작동해요.
/**
* Formats filesize in human readable way.
*
* @param file $file
* @return string Formatted Filesize, e.g. "113.24 MB".
*/
function filesize_formatted($file)
{
$bytes = filesize($file);
if ($bytes >= 1073741824) {
return number_format($bytes / 1073741824, 2) . ' GB';
} elseif ($bytes >= 1048576) {
return number_format($bytes / 1048576, 2) . ' MB';
} elseif ($bytes >= 1024) {
return number_format($bytes / 1024, 2) . ' KB';
} elseif ($bytes > 1) {
return $bytes . ' bytes';
} elseif ($bytes == 1) {
return '1 byte';
} else {
return '0 bytes';
}
}
질문에 대한 모든 답변은 1킬로바이트 = 1024바이트를 사용합니다. 이는 잘못된 것입니다. (1kibyte = 1024바이트)
이 질문에서는 파일 크기를 변환해야 하므로 1킬로바이트 = 1000바이트를 사용해야 합니다(https://wiki.ubuntu.com/UnitsPolicy) 참조).
function format_bytes($bytes, $precision = 2) {
$units = array('B', 'KB', 'MB', 'GB');
$bytes = max($bytes, 0);
$pow = floor(($bytes ? log($bytes) : 0) / log(1000));
$pow = min($pow, count($units) - 1);
$bytes /= pow(1000, $pow);
return round($bytes, $precision) . ' ' . $units[$pow];
}
이것은, 보다 깔끔한 실장이 됩니다.
function size2Byte($size) {
$units = array('KB', 'MB', 'GB', 'TB');
$currUnit = '';
while (count($units) > 0 && $size > 1024) {
$currUnit = array_shift($units);
$size /= 1024;
}
return ($size | 0) . $currUnit;
}
바이트를 KB, MB, GB, TB로 변환하는 간단한 함수를 다음에 나타냅니다.
# Size in Bytes
$size = 14903511;
# Call this function to convert bytes to KB/MB/GB/TB
echo convertToReadableSize($size);
# Output => 14.2 MB
function convertToReadableSize($size){
$base = log($size) / log(1024);
$suffix = array("", "KB", "MB", "GB", "TB");
$f_base = floor($base);
return round(pow(1024, $base - floor($base)), 1) . $suffix[$f_base];
}
완전한 예.
<?php
$units = explode(' ','B KB MB GB TB PB');
echo("<html><body>");
echo('file size: ' . format_size(filesize("example.txt")));
echo("</body></html>");
function format_size($size) {
$mod = 1024;
for ($i = 0; $size > $mod; $i++) {
$size /= $mod;
}
$endIndex = strpos($size, ".")+3;
return substr( $size, 0, $endIndex).' '.$units[$i];
}
?>
function calcSize($size,$accuracy=2) {
$units = array('b','Kb','Mb','Gb');
foreach($units as $n=>$u) {
$div = pow(1024,$n);
if($size > $div) $output = number_format($size/$div,$accuracy).$u;
}
return $output;
}
function getNiceFileSize($file, $digits = 2){
if (is_file($file)) {
$filePath = $file;
if (!realpath($filePath)) {
$filePath = $_SERVER["DOCUMENT_ROOT"] . $filePath;
}
$fileSize = filesize($filePath);
$sizes = array("TB", "GB", "MB", "KB", "B");
$total = count($sizes);
while ($total-- && $fileSize > 1024) {
$fileSize /= 1024;
}
return round($fileSize, $digits) . " " . $sizes[$total];
}
return false;
}
//Get the size in bytes
function calculateFileSize($size)
{
$sizes = ['B', 'KB', 'MB', 'GB'];
$count=0;
if ($size < 1024) {
return $size . " " . $sizes[$count];
} else{
while ($size>1024){
$size=round($size/1024,2);
$count++;
}
return $size . " " . $sizes[$count];
}
}
언급URL : https://stackoverflow.com/questions/5501427/php-filesize-mb-kb-conversion
반응형
'sourcecode' 카테고리의 다른 글
API 호출에서 Vuex 스토어의 일부 데이터를 설정하는 방법 (0) | 2022.09.19 |
---|---|
MariaDB 10.3.9에서 PHP-7.1.20을 컴파일하는 동안 오류가 발생했습니다. (0) | 2022.09.19 |
시간별로 정렬하고 특정 ID 뒤에 n개의 행을 반환하는 MySQL 쿼리 (0) | 2022.09.19 |
PHP 계산 기간 (0) | 2022.09.19 |
errno: 150 "외부 키 제약 조건이 잘못 형성되었습니다") MariaDB (0) | 2022.09.19 |