Làm thế nào tôi có thể chuyển đổi đầu ra của chức năng 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]; } 1 của PHP thành một định dạng đẹp với megabyte, kilobyte, v.v.?
like:
- Nếu kích thước nhỏ hơn 1 MB, hãy hiển thị kích thước tính bằng kb
- Nếu nó nằm trong khoảng từ 1 MB - 1 GB, hãy hiển thị nó trong MB
- Nếu nó lớn hơn - trong GB
Yakovl
6.96012 Huy hiệu vàng58 Huy hiệu bạc89 Huy hiệu đồng12 gold badges58 silver badges89 bronze badges
Đã hỏi ngày 31 tháng 3 năm 2011 lúc 14:26Mar 31, 2011 at 14:26
1
Đây là một mẫu:
<?php // Snippet from PHP Share: //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; } ?>
Kelderic
6.2688 Huy hiệu vàng44 Huy hiệu bạc82 Huy hiệu đồng8 gold badges44 silver badges82 bronze badges
Đã trả lời ngày 31 tháng 3 năm 2011 lúc 14:28Mar 31, 2011 at 14:28
AdnanadnanAdnan
25.3K18 Huy hiệu vàng79 Huy hiệu bạc110 Huy hiệu đồng18 gold badges79 silver badges110 bronze badges
5
Ngay cả đẹp hơn là phiên bản này tôi đã tạo từ một plugin tôi tìm thấy:
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]; }Lưu ý từ tài liệu fileSize ()
Bởi vì loại số nguyên của PHP được ký hợp đồng và nhiều nền tảng sử dụng số nguyên 32 bit, một số hàm hệ thống tập tin có thể trả về kết quả bất ngờ cho các tệp lớn hơn 2GB
Đã trả lời ngày 8 tháng 8 năm 2012 lúc 8:32Aug 8, 2012 at 8:32
PithenumberpithenumberPiTheNumber
22K17 Huy hiệu vàng103 Huy hiệu bạc173 Huy hiệu đồng17 gold badges103 silver badges173 bronze badges
5
Cách tiếp cận sạch hơn:
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; }Đã trả lời ngày 31 tháng 3 năm 2011 lúc 15:10Mar 31, 2011 at 15:10
AXELALIX AXELALIXAlix Axel
149K92 Huy hiệu vàng390 Huy hiệu bạc496 Huy hiệu Đồng92 gold badges390 silver badges496 bronze badges
8
Tôi nghĩ rằng đây là một cách tiếp cận tốt hơn. Đơn giản và thẳng về phía trước.
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] ); }
Pithenumber
22K17 Huy hiệu vàng103 Huy hiệu bạc173 Huy hiệu đồng17 gold badges103 silver badges173 bronze badges
Cách tiếp cận sạch hơn:May 21, 2013 at 7:42
Đã trả lời ngày 31 tháng 3 năm 2011 lúc 15:10Teffi
AXELALIX AXELALIX4 gold badges20 silver badges40 bronze badges
2
149K92 Huy hiệu vàng390 Huy hiệu bạc496 Huy hiệu Đồng
Changes:
- Tôi nghĩ rằng đây là một cách tiếp cận tốt hơn. Đơn giản và thẳng về phía trước.
- Pithenumber
- Đã trả lời ngày 21 tháng 5 năm 2013 lúc 7:42
Teffiteffi
/** * 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'; } }2.4434 huy hiệu vàng20 Huy hiệu bạc40 Huy hiệu đồngSep 20, 2014 at 22:52
Điều này dựa trên câu trả lời tuyệt vời của @Adnan.Jens A. Koch
Đã thêm tệp nội bộ () cuộc gọi13 gold badges106 silver badges133 bronze badges
trả lại phong cách sớmwrong! (1 kibibyte = 1024 bytes)
Tiết kiệm một người đồng nhất trên 1 byte1 kilobyte = 1000 bytes (see //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]; }Và bạn vẫn có thể rút các tệp () gọi ra khỏi hàm, để có được hàm định dạng byte thuần túy. Nhưng điều này hoạt động trên một tập tin.Oct 17, 2018 at 8:36
Đã trả lời ngày 20 tháng 9 năm 2014 lúc 22:52miyuru
Jens A. Kochjens A. Koch11 silver badges19 bronze badges
1
38.3K13 Huy hiệu vàng106 Huy hiệu bạc133 Huy hiệu đồng
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; }Tất cả các câu trả lời cho câu hỏi sử dụng 1 kilobyte = 1024 byte là sai! (1 kibibyte = 1024 byte)Apr 1, 2015 at 20:59
Vì câu hỏi yêu cầu chuyển đổi kích thước tệp, nên sử dụng 1 kilobyte = 1000 byte đó (xem //wiki.ubuntu.com/unitspolicy)Bat Fung
Đã trả lời ngày 17 tháng 10 năm 2018 lúc 8:361 silver badge2 bronze badges
Miyurumiyuru
<?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]; } ?>1.09111 Huy hiệu bạc19 Huy hiệu đồngDec 1, 2011 at 22:56
Đây sẽ là một triển khai sạch hơn:vdbuilder
Đã trả lời ngày 1 tháng 4 năm 2015 lúc 20:592 gold badges23 silver badges29 bronze badges
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; }
Nấm dơi nấmJul 13, 2015 at 12:11
611 Huy hiệu bạc2 Huy hiệu đồngbarners
Một ví dụ hoàn chỉnh.2 silver badges12 bronze badges
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; }
Đã trả lời ngày 1 tháng 12 năm 2011 lúc 22:56Mar 25, 2016 at 11:14
VdBuilderVdBuilderHamed
11.6K2 Huy hiệu vàng23 Huy hiệu bạc29 Huy hiệu đồng1 silver badge5 bronze badges
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]; } 0
Đã trả lời ngày 13 tháng 7 năm 2015 lúc 12:11Dec 24, 2016 at 10:41