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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Перевод байтов в мегобайты и так далее.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
SofiaKit
Отправлено: 28 Июля, 2011 - 18:02:58
Post Id


Частый гость


Покинул форум
Сообщений всего: 182
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Вот функция:
PHP:
скопировать код в буфер обмена
  1. <?
  2. $filename = 'files/Setup.exe';
  3. echo filesize($filename) . ' bytes';
  4. ?>

отображает байты, а как бы перевести в мегабайты, и если больше то в гигабайты?
 
 Top
LIME
Отправлено: 28 Июля, 2011 - 18:10:03
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




SofiaKit
1Mb=1024Kb
1Kb=1024b
1Gb=1024Mb
 
 Top
tsoi85
Отправлено: 28 Июля, 2011 - 18:10:31
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 10 раз(а)




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));
 
 Top
LIME
Отправлено: 28 Июля, 2011 - 18:12:10
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




молодой программист думает что в 1Кб 1000байт
а старый что в 1Км 1024 метров ))
 
 Top
OrmaJever Модератор
Отправлено: 28 Июля, 2011 - 18:21:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




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));


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
belphegor
Отправлено: 28 Июля, 2011 - 18:26:50
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




LIME пишет:
молодой программист думает что в 1Кб 1000байт
а старый что в 1Км 1024 метров ))


А настоящий знает, что 1024 байта это KiB)
 
 Top
LIME
Отправлено: 28 Июля, 2011 - 18:43:17
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




belphegor и называется кибибайт ))
(Добавление)
tsoi85 пишет:
$bytes = max($bytes, 0);
tsoi85 не могли бы вы пояснить зачем эта строка?
 
 Top
White
Отправлено: 28 Июля, 2011 - 21:15:09
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)





LIME пишет:
и называется кибибайт ))
что уж тогда про YiB говорить, а ведь когда-нибудь и до него доберемся Подмигивание


-----
if(time()>1356048000) die();
 
 Top
LIME
Отправлено: 28 Июля, 2011 - 22:19:36
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)





я нашел Радость
это называется "Йобибайт"
будем привыкать Растерялся

(Отредактировано автором: 28 Июля, 2011 - 22:20:29)

 
 Top
tsoi85
Отправлено: 28 Июля, 2011 - 22:34:33
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 10 раз(а)




LIME пишет:
tsoi85 не могли бы вы пояснить зачем эта строка?

Если $bytes по каким либо причинам, отрицательное число.
 
 Top
Мелкий Супермодератор
Отправлено: 28 Июля, 2011 - 23:30:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




tsoi85 пишет:
Если $bytes по каким либо причинам, отрицательное число.

Причины, при том, вполне понятные и изложены в примечаниях к filesize


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 29 Июля, 2011 - 00:07:03
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




спасибо понятно
но ведь в этом случае будет выбран 0 и потеряно значение
это не есть гуд
разве не лучше использовать abs() ?
поправьте пжлст если не так
 
 Top
tsoi85
Отправлено: 29 Июля, 2011 - 00:31:46
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 10 раз(а)




А если файл имеет размер 3563978752 б, (3.32 GB) и filesize возвращает -730988544 б, (после abs: 697.13 MB).
 
 Top
LIME
Отправлено: 29 Июля, 2011 - 00:37:19
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




tsoi85 пишет:
после abs: 697.13 MB
нет
abs() вернет 730988544
а у вас просто 0 получится это лучше что-ли?
 
 Top
tsoi85
Отправлено: 29 Июля, 2011 - 00:55:27
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 10 раз(а)




LIME, Да, abs вернёт 730988544, затем её обработаем FBytes().
И получаем результат, который (697.13 MB), а истинный размер файла 3563978752 б (3.32 GB).
Логичнее вернуть 0, чем некорректный размер вводящий в большее заблуждение.

(Отредактировано автором: 29 Июля, 2011 - 01:03:26)

 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB