Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Перевод байтов в мегобайты и так далее.
Форумы портала PHP.SU » » Вопросы новичков » Перевод байтов в мегобайты и так далее.

Страниц (3): [1] 2 3 »
 

1. SofiaKit - 28 Июля, 2011 - 18:02:58 - перейти к сообщению
Вот функция:
PHP:
скопировать код в буфер обмена
  1. <?
  2. $filename = 'files/Setup.exe';
  3. echo filesize($filename) . ' bytes';
  4. ?>

отображает байты, а как бы перевести в мегабайты, и если больше то в гигабайты?
2. LIME - 28 Июля, 2011 - 18:10:03 - перейти к сообщению
SofiaKit
1Mb=1024Kb
1Kb=1024b
1Gb=1024Mb
3. tsoi85 - 28 Июля, 2011 - 18:10:31 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. #$precision количество цифр после точки 1.23 MB
  3. function FBytes($bytes, $precision = 2) {
  4.     $units = array('B', 'KB', 'MB', 'GB', 'TB');
  5.     $bytes = max($bytes, 0);
  6.     $pow = floor(($bytes?log($bytes):0)/log(1024));
  7.     $pow = min($pow, count($units)-1);
  8.     $bytes /= pow(1024, $pow);
  9.     return round($bytes, $precision).' '.$units[$pow];
  10. }
  11.  
  12. $filename = 'files/Setup.exe';
  13. echo FBytes(filesize($filename));
4. LIME - 28 Июля, 2011 - 18:12:10 - перейти к сообщению
молодой программист думает что в 1Кб 1000байт
а старый что в 1Км 1024 метров ))
5. OrmaJever - 28 Июля, 2011 - 18:21:24 - перейти к сообщению
LIME пишет:
молодой программист думает что в 1Кб 1000байт
а старый что в 1Км 1024 метров ))

Здорово
Упрощёный вариант функции, первый параметр размер в байтах, второй kb, mb или gb
PHP:
скопировать код в буфер обмена
  1. function FBytes($size, $param = 'kb') {
  2.         switch($param)  {
  3.                 case 'gb': $size /= 1024;
  4.                 case 'mb': $size /= 1024;
  5.                 case 'kb': $size /= 1024;
  6.         }
  7.         return $size;
  8. }
  9. $filename = 'files/Setup.exe';
  10. echo FBytes(filesize($filename));
6. belphegor - 28 Июля, 2011 - 18:26:50 - перейти к сообщению
LIME пишет:
молодой программист думает что в 1Кб 1000байт
а старый что в 1Км 1024 метров ))


А настоящий знает, что 1024 байта это KiB)
7. LIME - 28 Июля, 2011 - 18:43:17 - перейти к сообщению
belphegor и называется кибибайт ))
(Добавление)
tsoi85 пишет:
$bytes = max($bytes, 0);
tsoi85 не могли бы вы пояснить зачем эта строка?
8. White - 28 Июля, 2011 - 21:15:09 - перейти к сообщению

LIME пишет:
и называется кибибайт ))
что уж тогда про YiB говорить, а ведь когда-нибудь и до него доберемся Подмигивание
9. LIME - 28 Июля, 2011 - 22:19:36 - перейти к сообщению

я нашел Радость
это называется "Йобибайт"
будем привыкать Растерялся
10. tsoi85 - 28 Июля, 2011 - 22:34:33 - перейти к сообщению
LIME пишет:
tsoi85 не могли бы вы пояснить зачем эта строка?

Если $bytes по каким либо причинам, отрицательное число.
11. Мелкий - 28 Июля, 2011 - 23:30:08 - перейти к сообщению
tsoi85 пишет:
Если $bytes по каким либо причинам, отрицательное число.

Причины, при том, вполне понятные и изложены в примечаниях к filesize
12. LIME - 29 Июля, 2011 - 00:07:03 - перейти к сообщению
спасибо понятно
но ведь в этом случае будет выбран 0 и потеряно значение
это не есть гуд
разве не лучше использовать abs() ?
поправьте пжлст если не так
13. tsoi85 - 29 Июля, 2011 - 00:31:46 - перейти к сообщению
А если файл имеет размер 3563978752 б, (3.32 GB) и filesize возвращает -730988544 б, (после abs: 697.13 MB).
14. LIME - 29 Июля, 2011 - 00:37:19 - перейти к сообщению
tsoi85 пишет:
после abs: 697.13 MB
нет
abs() вернет 730988544
а у вас просто 0 получится это лучше что-ли?
15. tsoi85 - 29 Июля, 2011 - 00:55:27 - перейти к сообщению
LIME, Да, abs вернёт 730988544, затем её обработаем FBytes().
И получаем результат, который (697.13 MB), а истинный размер файла 3563978752 б (3.32 GB).
Логичнее вернуть 0, чем некорректный размер вводящий в большее заблуждение.

 

Powered by ExBB FM 1.0 RC1