Avatar billede macho Praktikant
06. januar 2005 - 00:22 Der er 6 kommentarer og
1 løsning

Filstørrelse for billede i KB eller MB

I fortsættelse af dette allerede accepterede svar:
http://www.eksperten.dk/spm/577524

har jeg et tillægsspørgsmål:

Dette gør, at jeg kan få vist filstørrelsen på et billede:


function getlist($dir, $mode){
        if ($handle = opendir('albums/'.$dir)){
            while (false !== ($file = readdir($handle))) {
                if(eregi("\.jpe?g$", $file) || eregi("\.gif$", $file) || eregi("\.bmp$", $file) || eregi("\.png$", $file)) {
                    $fsize = filesize('albums/'.$dir.'/'.$file);
                    $count = $count+1;
                    $data = $data.'&nbsp;<a href="fileview.php?album='.$dir.'&file='.$file.'&view='.$mode. ' target="_self"><img src="data/images/skin/icons/image.gif" />&nbsp;';
                    $data = $data.$file;
                    $data = $data.'</a><font color="#FF0000"> - ' . $fsize . ' bytes</font><br />';
                }
            }
            closedir($handle);
        }
        return $data;
}



Mon det er muligt at lave dette, således, at det vises i antal KB hhv. MB afhængig af størrelsen på billedet. Billeder kan variere i størrelse fra 5 KB op til 12 MB og det bliver nogle voldsomme store tal at se på, hvis f.eks. 12 MB skal skrives som bytes: 12000000 bytes.
Avatar billede detox Nybegynder
06. januar 2005 - 01:00 #1
function getlist($dir, $mode){
        if ($handle = opendir('albums/'.$dir)){
            $data = '';
            $count = 0;
            while (false !== ($file = readdir($handle))) {
                if(eregi("\.jpe?g$", $file) || eregi("\.gif$", $file) || eregi("\.bmp$", $file) || eregi("\.png$", $file)) {
                    $fsize = filesize('albums/'.$dir.'/'.$file);
                    if ($fsize<1024) {
                        $pres = sprintf('%u Bytes',filesize($dir.$file));
                    } elseif ($fsize<1024*1024) {
                        $pres = sprintf('%u KB',filesize($dir.$file)/1024);
                    } elseif ($fsize>=1024*1024) {
                        $pres = sprintf('%u MB',filesize($dir.$file)/(1024*1024));
                    }
                    $count = $count+1;
                    $data .= '&nbsp;<a href="fileview.php?album='.$dir.'&file='.$file.'&view='.$mode.' target="_self"><img src="data/images/skin/icons/image.gif" />&nbsp;';
                    $data .= $file;
                    $data .= '</a> - <span style="color:#ff0000;">'.$pres.'</span><br />';
                }
            }
            closedir($handle);
        }
        return $data;
}
Avatar billede jakoba Nybegynder
06. januar 2005 - 01:08 #2
tilføj en funktion ovenfor:

function kiloMega( $tal ) {
    $magn = strlen( "".$tal );
    if( $magn > 4 ) {        // afrund til max 4 betydende cifre
        $tal = pow( 10, $magn-4 ) ' round( $tal / pow( 10, $magn-4 ) );
    }
    if( $magn < 5 ) return $tal;
    if( $magn < 8 ) return substr( number_format($number, 0, '', ','), 0,5) ."K";
    return substr( number_format($number, 0, '', ','), 0,5) ."M";
}

og så ændres din linie
                    $data = $data.'</a><font color="#FF0000"> - ' . $fsize . ' bytes</font><br />';
til:
                    $data = $data.'</a><font color="#FF0000"> - ' . kiloMega($fsize) . ' bytes</font><br />';

utestet så der skal nok rettes noget.

mvh JakobA
Avatar billede detox Nybegynder
06. januar 2005 - 01:15 #3
Ups, fejl rettet:


function getlist($dir, $mode){
        if ($handle = opendir('albums/'.$dir)){
            $data = '';
            $count = 0;
            while (false !== ($file = readdir($handle))) {
                if(eregi("\.jpe?g$", $file) || eregi("\.gif$", $file) || eregi("\.bmp$", $file) || eregi("\.png$", $file)) {
                    $fsize = filesize('albums/'.$dir.'/'.$file);
                    if ($fsize<1024) {
                        $pres = sprintf('%u Bytes',$fsize);
                    } elseif ($fsize<1024*1024) {
                        $pres = sprintf('%u KB',$fsize/1024);
                    } else {
                        $pres = sprintf('%u MB',$fsize/(1024*1024));
                    }
                    $count = $count+1;
                    $data .= '&nbsp;<a href="fileview.php?album='.$dir.'&file='.$file.'&view='.$mode.' target="_self"><img src="data/images/skin/icons/image.gif" />&nbsp;';
                    $data .= $file;
                    $data .= '</a> - <span style="color:#ff0000;">'.$pres.'</span><br />';
                }
            }
            closedir($handle);
        }
        return $data;
}
Avatar billede macho Praktikant
06. januar 2005 - 01:19 #4
jakoba, når jeg afprøver dit forslag, får jeg desværre bare en blank side frem - sorry.

detox's forslag - incl. rettelse - fungerer rigtig godt. Billeder på under 1 MB bliver vist i antal KB - rigtig godt! Billeder på over 1 MB bliver kun vist i hele antal MB. Er det muligt at få antal MB vist med decimal, f.eks. 6,5 MB så filstørrelsen vises lidt tydeligere?
Avatar billede detox Nybegynder
06. januar 2005 - 01:22 #5
Ret:

$pres = sprintf('%u MB',$fsize/(1024*1024));

til:

$pres = sprintf('%01.1f MB',$fsize/(1024*1024));
Avatar billede macho Praktikant
06. januar 2005 - 01:26 #6
detox, det er jo simpelthen bare helt perfekt! Jeg takker mange gange for hjælpen!
Avatar billede detox Nybegynder
06. januar 2005 - 01:27 #7
Velbekommen.
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