PHP.SU

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


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

> Без описания
SofiaKit
Отправлено: 29 Июля, 2011 - 11:45:44
Post Id


Частый гость


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


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




Функция
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. ?>

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

(Отредактировано автором: 29 Июля, 2011 - 12:05:44)

 
 Top
OrmaJever Модератор
Отправлено: 29 Июля, 2011 - 11:56:31
Post Id



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


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


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




SofiaKit пишет:
возвращает значение 6026.33496094 крайне не читабельно

я не округлял вывод, это можно зделать самому как нужно, да там ещё можно зделать проверку на отрицательное значение, но в целом функция лутше выгледит?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
SofiaKit
Отправлено: 29 Июля, 2011 - 12:08:20
Post Id


Частый гость


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


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




OrmaJever в целом очень коротенькая и приятная, но ее если доделывать, она такая же огромная станет
 
 Top
iflight
Отправлено: 29 Июля, 2011 - 12:19:38
Post Id



Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Март 2011  
Откуда: Россия, Сыктывкар


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




Вот так будет 2 знака после запятой, функция о прежнему выглядит красиво))
 
 Top
SofiaKit
Отправлено: 29 Июля, 2011 - 12:27:39
Post Id


Частый гость


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


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




всеравно в цикве размер не считает:

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 Кб
как добиться от этой коротенькой функции правильности?
 
 Top
Мелкий Супермодератор
Отправлено: 29 Июля, 2011 - 12:32:39
Post Id



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


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


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




SofiaKit пишет:
Fatal error: Cannot redeclare fbytes() (previously declared

0) Прочитайте сообщение об ошибке.
1) вы зачем в цикле объявляете функцию? В цикле её надо вызывать.


-----
PostgreSQL DBA
 
 Top
OrmaJever Модератор
Отправлено: 29 Июля, 2011 - 12:44:08
Post Id



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


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


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




SofiaKit пишет:
Fatal error: Cannot redeclare fbytes() (previously declared

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



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
iflight
Отправлено: 29 Июля, 2011 - 12:46:16
Post Id



Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Март 2011  
Откуда: Россия, Сыктывкар


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




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

а вы уверенны, что та функция правильна?)
 
 Top
SofiaKit
Отправлено: 29 Июля, 2011 - 12:54:14
Post Id


Частый гость


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


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




Мелкий действительно, блин... совсем уже я того Радость . все работает как надо с моим огромным примером. Потаму как коротенький не правильно считает.
 
 Top
SofiaKit
Отправлено: 30 Июля, 2011 - 00:33:36
Post Id


Частый гость


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


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




что тут не так?
Если файл более одного Гб, то пишет -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Гб все считает просто отлично.

(Отредактировано автором: 30 Июля, 2011 - 00:36:10)

 
 Top
OrmaJever Модератор
Отправлено: 30 Июля, 2011 - 01:01:48
Post Id



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


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


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




SofiaKit пишет:
до 1Гб все считает просто отлично.

до 2гб...
из описания filesize()
Цитата:
Замечание: Поскольку PHP использует знаковое представления для чисел целого типа, а многие платформы используют 32-битные целые числа, функция filesize() может возвращать неожиданные значения для файлов, чей размер превосходит 2 Гб. Если размер файла находится в пределах 2 - 4 Гб, корректное значение можно получить, используя конструкцию sprintf("%u", filesize($file)).


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
LIME
Отправлено: 30 Июля, 2011 - 14:48:23
Post Id


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


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


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




а SPLFileInfo не обходит это ограничение?
 
 Top
belphegor
Отправлено: 30 Июля, 2011 - 15:04:37
Post Id


Новичок


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


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




LIME пишет:
а SPLFileInfo не обходит это ограничение?


Неа, SPLFileInfo::getSize() тоже int возвращает.
 
 Top
SofiaKit
Отправлено: 30 Июля, 2011 - 16:25:03
Post Id


Частый гость


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


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




т.е. никак не отобразится файл быше 1Гб? Не понял
 
 Top
LIME
Отправлено: 30 Июля, 2011 - 16:26:50
Post Id


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


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


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




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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB