Avatar billede macho Praktikant
16. september 2008 - 12:32 Der er 9 kommentarer og
1 løsning

Skrive filstørrelse i KB eller MB

Hej,

I nedenstående script vises beskrivelse af fil (med link til filen), samt filens størrelse i bytes.

Hvordan ændrer jeg i koden, således, at størrelsen bliver vist i KB hhv. MB?

Koden:

<?



if(isset($_GET['id']))
{
              // Connects to your Database
              mysql_connect("localhost", "user", "passw") or die(mysql_error()) ;
              mysql_select_db("db") or die(mysql_error()) ;

    $id      = $_GET['id'];
    $query  = "SELECT name, descr, type, size, content FROM upload WHERE id = '$id'";
    $result  = mysql_query($query) or die('Error, query failed');
    list($name, $descr, $type, $size, $content) = mysql_fetch_array($result);

    header("Content-Disposition: attachment; filename=$name");
    header("Content-length: $size");
    header("Content-type: $type");
    echo $content;

    exit;

}

?>
<html>
<head>
<title>Download File From MySQL</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?

              mysql_connect("localhost", "user", "passw") or die(mysql_error()) ;
              mysql_select_db("db") or die(mysql_error()) ;

$query  = "SELECT id, name, descr, size, content FROM upload";
$result = mysql_query($query) or die('Error, query failed');
if(mysql_num_rows($result) == 0)
{
    echo "Database is empty <br>";
}
else
{


    while(list($id, $name, $descr, $size,) = mysql_fetch_array($result))
    {
?>
    <li><a href="download.php?id=<?=$id;?>"><?=$descr;?></a></li>
<?       
    }
}
    mysql_close($conn);
?>
</body>
</html>
Avatar billede michael_stim Ekspert
16. september 2008 - 12:36 #1
$kb=$size/1024;
$mb=$size/(1024*1024);
Avatar billede jakobdo Ekspert
16. september 2008 - 12:37 #2
Prøv at kig under bruger-tilføjede kode på siden: http://dk.php.net/filesize
Avatar billede arne_v Ekspert
16. september 2008 - 12:39 #3
Jeg lavede engang til et andet spoergsmaal denne her:

function KMG($b) {
    $diggrp = floor(log($b,1024));
    $suf = array("B","KB","MB","GB");
    $fmt = $diggrp>0 ? "%.1f %s" : "%d %s";
    return sprintf($fmt,$b/pow(1024,$diggrp),$suf[$diggrp]);
}
Avatar billede jakobdo Ekspert
16. september 2008 - 12:48 #4
Minder en del om denne:

<?php
  function byte_convert($bytes)
  {
    $symbol = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB');

    $exp = 0;
    $converted_value = 0;
    if( $bytes > 0 )
    {
      $exp = floor( log($bytes)/log(1024) );
      $converted_value = ( $bytes/pow(1024,floor($exp)) );
    }

    return sprintf( '%.2f '.$symbol[$exp], $converted_value );
  }
?>
Avatar billede macho Praktikant
16. september 2008 - 13:18 #5
jakobdo -> hvordan vil jeg skulle tilføje din function byte_convert[$bytes) så jeg kan lave link og filstørrelsen som $filstr?

?>
    <li><a href="download.php?id=<?=$id;?>"><?=$descr;?></a> - <?=$filstr;?></li>
<?
Avatar billede jakobdo Ekspert
16. september 2008 - 13:22 #6
li><a href="download.php?id=<?=$id;?>"><?=$descr;?> - <?=byte_convert($size);?></a></li>
Avatar billede macho Praktikant
16. september 2008 - 13:26 #7
Virker perfekt - jakobdo.
Giv mig et svar - du har fortjent pts. Tak for hjælpen :-)
Avatar billede jakobdo Ekspert
16. september 2008 - 13:45 #8
Svar og jeg deler gerne med den andre deltagere.
Avatar billede macho Praktikant
16. september 2008 - 16:40 #9
Nå ja, jeg er meget glad for hjælpen - også fra de øvrige deltagere. Dog er det kun det, som du har skrevet, jeg har kunnet bruge, så jeg nøjes med at tildele dig pts denne gang :-)
Avatar billede jakobdo Ekspert
16. september 2008 - 20:49 #10
Jeg takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester