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 » PHP » Напишите за меня, пожалуйста » Размер файла в мб

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

1. fullzero - 27 Апреля, 2011 - 15:06:52 - перейти к сообщению
Вот скрипт, ищет нужные мне файлы по маске, выводит ссылку на файл и размер файла. Проблема в том что размер не в мегабайтах)

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. foreach (glob("1/*.mp3") as $filename)
  4. {
  5.     echo "<a href=\"$filename\">$filename<a> размер " . filesize($filename) . "\n<br>";
  6. }
  7.  
  8. ?>
  9.  



Нашёл по этой ссылке http://ua2.php.net/manual/en/fun...lesize.php#92418
такой код:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. /**
  4.   * Converts human readable file size (e.g. 10 MB, 200.20 GB) into bytes.
  5.   *
  6.   * @param string $str
  7.   * @return int the result is in bytes
  8.   * @author Svetoslav Marinov
  9.   * @author http://slavi.biz
  10.   */
  11. function filesize2bytes($str) {
  12.      $bytes = 0;
  13.  
  14.      $bytes_array = array(
  15.          'B' => 1,
  16.          'KB' => 1024,
  17.          'MB' => 1024 * 1024,
  18.          'GB' => 1024 * 1024 * 1024,
  19.          'TB' => 1024 * 1024 * 1024 * 1024,
  20.          'PB' => 1024 * 1024 * 1024 * 1024 * 1024,
  21.      );
  22.  
  23.      $bytes = floatval($str);
  24.  
  25.      if (preg_match('#([KMGTP]?B)$#si', $str, $matches) && !empty($bytes_array[$matches[1]])) {
  26.          $bytes *= $bytes_array[$matches[1]];
  27.      }
  28.  
  29.      $bytes = intval(round($bytes, 2));
  30.  
  31.      return $bytes;
  32.  }
  33. ?>
  34. nak5ive at DONT-SPAM-ME dot gmail dot com 11-Jun-2009 05:59
  35.  a quick way to convert bytes to a more readable format can be done using this function:
  36.  
  37. <?PHP
  38. function formatBytes($bytes, $precision = 2) {
  39.      $units = array('B', 'KB', 'MB', 'GB', 'TB');
  40.    
  41.      $bytes = max($bytes, 0);
  42.      $pow = floor(($bytes ? log($bytes) : 0) / log(1024));
  43.      $pow = min($pow, count($units) - 1);
  44.    
  45.      $bytes /= pow(1024, $pow);
  46.    
  47.      return round($bytes, $precision) . ' ' . $units[$pow];
  48.  }
  49. ?>
  50.  


Но! Не могу понять как его связать с тем что у меня уже есть. Есть какие нибудь соображения?

P.S. ещё учусь . . . Закатив глазки
2. OrmaJever - 27 Апреля, 2011 - 15:23:43 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. foreach (glob("1/*.mp3") as $filename)
  3. {
  4.     echo "<a href=\"$filename\">$filename<a> размер " . (filesize($filename) / 1024 / 1024). " МБ\n<br>";
  5. }
  6.  
  7. ?>
3. Uchkuma - 27 Апреля, 2011 - 15:24:46 - перейти к сообщению
4. fullzero - 28 Апреля, 2011 - 05:49:36 - перейти к сообщению
OrmaJever пишет:
<?PHP
foreach (glob("1/*.mp3") as $filename)
{
echo "<a href=\"$filename\">$filename<a> размер " . (filesize($filename) / 1024 / 1024). " МБ\n<br>";
}

?>


То что надо. Только теперь как убрать конечные числа. 5,800 МБ Этого было бы достаточно. Выводит 5.80090332031 МБ. Последние 8 цыфр надо убрать
5. Uchkuma - 28 Апреля, 2011 - 08:27:31 - перейти к сообщению
fullzero, вы не заметили предыдущее сообщение?
6. fullzero - 28 Апреля, 2011 - 08:34:45 - перейти к сообщению
OrmaJever Uchkuma спасибо Улыбка

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. echo '<table width=\"100%\" height="100%" border=\"1\" cellspacing=\"2\" cellpadding=\"2\"><tr>';
  4. foreach (glob("1/*.mp3") as $filename)
  5. {
  6. echo "<td><a href=\"$filename\">$filename<a> размер " . sprintf('%01.2f', @filesize($filename) / 1048576 ). " мб</td>\n";
  7. }
  8. echo '</tr></table>';
  9. ?>
  10.  
  11.  

(Добавление)
В таблице лучше выглядит Улыбка

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $file_arr = glob("1/*.mp3");
  3. echo '<table width="100%" border="1">';
  4. foreach ($file_arr as $file)
  5. {
  6. echo '<tr><td width="50%">'.$file.'</td><td width="50%">размер ' . sprintf('%01.2f', @filesize($file) / 1048576 ). 'мб</td></tr>';
  7. }
  8. echo '</table>';
  9. ?>
  10.  
7. OrmaJever - 28 Апреля, 2011 - 10:30:49 - перейти к сообщению
ну round() мне кажется для этих целей лутше подходит

PHP:
скопировать код в буфер обмена
  1. echo '<tr><td width="50%">'.$file.'</td><td width="50%">размер ' . round(@filesize($file) / 1048576, 3). ' МБ</td></tr>';
8. fullzero - 28 Апреля, 2011 - 11:41:34 - перейти к сообщению
OrmaJever ага так даже лучше, три знака после запятой Улыбка
9. Uchkuma - 28 Апреля, 2011 - 11:53:05 - перейти к сообщению
Количество знаков после запятой вы можете установить произвольное как в первом, так и во втором случае.

 

Powered by ExBB FM 1.0 RC1