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 :: Версия для печати :: Перевод байтов в мегобайты и так далее. [2]
Форумы портала PHP.SU » » Вопросы новичков » Перевод байтов в мегобайты и так далее.

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

16. SofiaKit - 29 Июля, 2011 - 11:45:44 - перейти к сообщению
Функция
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. function FBytes($size, $param = 'kb') {
  4.         switch($param)  {
  5.                 case 'gb': $size /= 1024;
  6.                 case 'mb': $size /= 1024;
  7.                 case 'kb': $size /= 1024;
  8.         }
  9.         return $size;
  10. }
  11. $filename = 'files/Setup.exe';
  12. echo FBytes(filesize($filename));
  13. ?>

возвращает значение 6026.33496094 крайне не читабельно Растерялся

пока что использую вот эту функцию:
PHP:
скопировать код в буфер обмена
  1. <?
  2. function filesize_get($filename)
  3. {
  4.     // проверяем существует ли файл
  5.     if(!file_exists($filename)) return "Файл  отсутствует.";
  6.  
  7.    //определяем размер файла
  8.   $filesize = filesize($filename);
  9.    
  10.    // Если размер переданного в функцию файла больше 1кб
  11.    if($filesize > 1024)
  12.    {
  13.        $filesize = ($filesize/1024);
  14.        // если размер файла больше одного килобайта
  15.        // пересчитываем в мегабайтах
  16.        if($filesize > 1024)
  17.        {
  18.             $filesize = ($filesize/1024);
  19.            // если размер файла больше одного мегабайта
  20.            // пересчитываем в гигабайтах
  21.            if($filesize > 1024)
  22.            {
  23.                $filesize = ($filesize/1024);
  24.                $filesize = round($filesize, 1);
  25.                return $filesize." ГБ";    
  26.                  
  27.            }
  28.            else
  29.            {
  30.                $filesize = round($filesize, 1);
  31.                return $filesize." MБ";    
  32.            }  
  33.              
  34.        }
  35.        else
  36.        {
  37.            $filesize = round($filesize, 1);
  38.            return $filesize." Кб";    
  39.        }
  40.    
  41.    }
  42.    else
  43.    {
  44.        $filesize = round($filesize, 1);
  45.        return $filesize." байт";    
  46.    }
  47.    
  48. }
  49. echo filesize_get($filename);
  50. ?>

но эта функция не работает в цикле, а именно когда вывожу список файлов, первый файл отображает размер, на фтором уже ошибки, т.е. в цикле функция не хочет работать.
17. OrmaJever - 29 Июля, 2011 - 11:56:31 - перейти к сообщению
SofiaKit пишет:
возвращает значение 6026.33496094 крайне не читабельно

я не округлял вывод, это можно зделать самому как нужно, да там ещё можно зделать проверку на отрицательное значение, но в целом функция лутше выгледит?
18. SofiaKit - 29 Июля, 2011 - 12:08:20 - перейти к сообщению
OrmaJever в целом очень коротенькая и приятная, но ее если доделывать, она такая же огромная станет
19. iflight - 29 Июля, 2011 - 12:19:38 - перейти к сообщению
Вот так будет 2 знака после запятой, функция о прежнему выглядит красиво))
20. SofiaKit - 29 Июля, 2011 - 12:27:39 - перейти к сообщению
всеравно в цикве размер не считает:

Fatal error: Cannot redeclare fbytes() (previously declared
как добиться чтоб считалось в цикле?
(Добавление)
причем считает не правильно вот эта функция:
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 round($size,2);
  8.                         }
  9.                         $filename = 'files/Setup.exe';
  10.                         echo FBytes(filesize($filename));


а та функция, которую я показала отображает 4 Кб
как добиться от этой коротенькой функции правильности?
21. Мелкий - 29 Июля, 2011 - 12:32:39 - перейти к сообщению
SofiaKit пишет:
Fatal error: Cannot redeclare fbytes() (previously declared

0) Прочитайте сообщение об ошибке.
1) вы зачем в цикле объявляете функцию? В цикле её надо вызывать.
22. OrmaJever - 29 Июля, 2011 - 12:44:08 - перейти к сообщению
SofiaKit пишет:
Fatal error: Cannot redeclare fbytes() (previously declared

вначале нужно значть что функции в цыкле определять нельзя, отпределять нужно за цыклом а в цыкле уже вызывать.
SofiaKit пишет:
как добиться от этой коротенькой функции правильности?

23. iflight - 29 Июля, 2011 - 12:46:16 - перейти к сообщению
Редекларация (или как-то так) - одну и ту же функцию несколько раз объявляете. Само объявление функции - вверх скрита, а в цикле только вызывайте.
PHP:
скопировать код в буфер обмена
  1. $filename = 'files/Setup.exe';
  2. FBytes(filesize($filename));

а вы уверенны, что та функция правильна?)
24. SofiaKit - 29 Июля, 2011 - 12:54:14 - перейти к сообщению
Мелкий действительно, блин... совсем уже я того Радость . все работает как надо с моим огромным примером. Потаму как коротенький не правильно считает.
25. SofiaKit - 30 Июля, 2011 - 00:33:36 - перейти к сообщению
что тут не так?
Если файл более одного Гб, то пишет -2120482815 байт
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. function filesize_get($filename)
  4. {
  5. // проверяем существует ли файл
  6. if(!file_exists($filename)) return "Файл  отсутствует.";
  7. //определяем размер файла
  8. $filesize = filesize($filename);
  9. // Если размер переданного в функцию файла больше 1кб
  10. if($filesize > 1024)
  11. {
  12. $filesize = ($filesize/1024);
  13. // если размер файла больше одного килобайта
  14. // пересчитываем в мегабайтах
  15. if($filesize > 1024)
  16. {
  17. $filesize = ($filesize/1024);
  18. // если размер файла больше одного мегабайта
  19. // пересчитываем в гигабайтах
  20. if($filesize > 1024)
  21. {
  22. $filesize = ($filesize/1024);
  23. $filesize = round($filesize, 1);
  24. return $filesize." ГБ";
  25. }
  26. else
  27. {
  28. $filesize = round($filesize, 1);
  29. return $filesize." MБ";
  30. }
  31. }
  32. else
  33. {
  34. $filesize = round($filesize, 1);
  35. return $filesize." Кб";
  36. }
  37. }
  38. else
  39. {
  40. $filesize = round($filesize, 1);
  41. return $filesize." байт";
  42. }
  43. }
  44. ?>


до 1Гб все считает просто отлично.
26. OrmaJever - 30 Июля, 2011 - 01:01:48 - перейти к сообщению
SofiaKit пишет:
до 1Гб все считает просто отлично.

до 2гб...
из описания filesize()
Цитата:
Замечание: Поскольку PHP использует знаковое представления для чисел целого типа, а многие платформы используют 32-битные целые числа, функция filesize() может возвращать неожиданные значения для файлов, чей размер превосходит 2 Гб. Если размер файла находится в пределах 2 - 4 Гб, корректное значение можно получить, используя конструкцию sprintf("%u", filesize($file)).
27. LIME - 30 Июля, 2011 - 14:48:23 - перейти к сообщению
а SPLFileInfo не обходит это ограничение?
28. belphegor - 30 Июля, 2011 - 15:04:37 - перейти к сообщению
LIME пишет:
а SPLFileInfo не обходит это ограничение?


Неа, SPLFileInfo::getSize() тоже int возвращает.
29. SofiaKit - 30 Июля, 2011 - 16:25:03 - перейти к сообщению
т.е. никак не отобразится файл быше 1Гб? Не понял
30. LIME - 30 Июля, 2011 - 16:26:50 - перейти к сообщению
SofiaKit можно как-то через ftp костыль сделать я слышал

 

Powered by ExBB FM 1.0 RC1