Avatar billede macho Praktikant
05. januar 2005 - 19:59 Der er 33 kommentarer og
1 løsning

Vise filstørrelse for billede

Jeg er desværre ingen ørn i php, så håber virkelig på hjælp her.

Det drejer sig om et billedgalleri, som jeg har hentet på nettet: "Imageview". Det kører for så vidt rigtig godt og jeg har lavet diverse folder (# og a-z). I hver folder en liste over filnavne på billederne. Filnavnet er ligeledes et link til selve billedet.
Det jeg gerne vil have vist, er filstørrelsen på hvert enkelt billede. Denne filstørrelse skal ganske enkelt vises i antal KB umiddelbart efter filnavnet - altså på samme linje!

PHP-koden, som det skal puttes ind i, ser sådan ud (uddrag af en noget større side):

**************************

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)) {
                    $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><br />';
                }
            }
            closedir($handle);
        }
        return $data;
}

**************************

mvh
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 20:04 #1
du skal bruge filesize($file) på billedfilen.
Avatar billede macho Praktikant
05. januar 2005 - 20:12 #2
kasperstorm, tak for svaret! Hvordan skal jeg sætte dette ind i ovenstående kode?
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 20:18 #3
prøv det her: (Der var en anden lille fejl i scriptet)

<?

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($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> '. $fsize  .'<br />';
                }
            }
            closedir($handle);
        }
        return $data;
}

?>
Avatar billede macho Praktikant
05. januar 2005 - 20:22 #4
Jeg har kopieret ovenstående ind i siden nu, men der vises desværre intet med filstørrelsen på siden alligevel :-(
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 20:23 #5
Jeg kigger lige på det
Avatar billede morteeart Nybegynder
05. januar 2005 - 20:25 #6
filesize skal have den korrekte sti, og det ser ud til at den mangler det korrekte dir, såvidt jeg kan se.
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 20:27 #7
Prøv nu: Ellers prøv at skrive echo $fsize før $data = $data.'</a> $fsize<br />';
<?

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($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> $fsize<br />';
                }
            }
            closedir($handle);
        }
        return $data;
}

?>
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 20:28 #8
du har ret.... pandeklask til mig ;)
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 20:29 #9
ved $fsize = filesize($file) skriv da i stedet $fsize = filesize($dir.$file)
Avatar billede macho Praktikant
05. januar 2005 - 21:14 #10
Det var da træls. Uanset hvad jeg gør af dine forslag, så vises filstørrelsen ikke. Hvis jeg skriver:echo $fsize før $data = $data.'</a> $fsize<br />'; så bliver siden ganske enkelt ikke vist!

?
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 21:16 #11
skriv $dir og $file ud og vis mig resultatet
Avatar billede macho Praktikant
05. januar 2005 - 22:00 #12
Øh, jeg er ikke helt med! Hvordan gør jeg det?
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 22:01 #13
echo $dir; og echo $file;
Avatar billede macho Praktikant
05. januar 2005 - 22:08 #14
jeg er meget MEGET tungnem tror jeg, men kan altså ikke få noget vist. Hvor skal jeg skrive echo $dir; og echo $file;
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 22:08 #15
efter $data = $data.'</a> $fsize<br />';
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 22:18 #16
voila:
<?

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/'.$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> ' . $fsize . '<br />';
                }
            }
            closedir($handle);
        }
        return $data;
}

echo getlist('./', 'hej');

?>
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 22:19 #17
stryg echo getlist('./', 'hej'); ;) kun i testøjemed
Avatar billede macho Praktikant
05. januar 2005 - 22:23 #18
Okay, min kode ser nu sådan her ud:

*********************

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/'.$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> ' . $fsize . '<br />'; echo $dir; echo $file;
                }
            }
            closedir($handle);
        }
        return $data;
}

*********************


På siden, hvor listen over billeder skal vises, kommer der i første linje en hel del filnavne (12-15 stykker), men nu uden link til billedet!!
Nedenunder bliver resten af filnavnene vist, inkl. link til billedet. Filstørrelse vises stadig ikke!
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 22:26 #19
data = $data.'</a> ' . $fsize . '<br />'; echo $dir; echo $file;

skal være

data = $data.'</a> ' . $fsize . '<br />';
Avatar billede macho Praktikant
05. januar 2005 - 22:29 #20
Så er jeg ved udgangspunktet - altså min gamle liste med links til billeder, men desværre stadig uden noget med filstørrelsen på siden.
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 22:32 #21
Problemet er at filesize('albums/'.$file); skal pege på den rigtige fil.
$file angiver filnavnet, hvilket er variabelt, og 'albums/' angiver mappen hvori billedet ligger. Prøv at ftp'e og se og det forholder sig sådan at filen ligger i en mappe der hedder albums
Avatar billede macho Praktikant
05. januar 2005 - 22:35 #22
Alle filer ligger i undermapper til mappen "albums" - altså f.eks. "albums/a" eller "albums/b" osv. helt ned til "albums/z".
Avatar billede macho Praktikant
05. januar 2005 - 22:36 #23
Eller rettere sagt: "albums/a/" osv.
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 22:37 #24
når du klikker på et link rammer du så et billede
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 22:39 #25
prøv det her:

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> ' . $fsize . '<br />';
                }
            }
            closedir($handle);
        }
        return $data;
}
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 22:39 #26
det bør altså virke
Avatar billede macho Praktikant
05. januar 2005 - 22:45 #27
Linksene til billederne virker fint!

Et eller andet sted tror jeg vi nærmer os, men dit seneste virker desværre ikke - ingen decideret fejl, men filstørrelse vises stadig ikke. Jeg prøvede dog at skrive dette:

$fsize =  filesize('albums/a/'.$file);

i stedet for

$fsize =  filesize('albums/'.$dir.$file);

og hvis jeg så går på siden og ser på listen over billeder (stadig under "a"), så står filstørrelsen der rent faktisk i antal bytes. Men dette er jo så kun under "albums/a/".
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 22:47 #28
Yep...jeg tror jeg ved hvad der skal til: (Kindslag til mig):

$fsize =  filesize('albums/'.$dir.'/'.$file);
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 22:51 #29
virker det??
Avatar billede macho Praktikant
05. januar 2005 - 22:55 #30
Yes - det virker!!!!!

Alle tiders - jeg takker mange gange for din store hjælp; det er bare alle tiders!
Avatar billede kasperstorm Nybegynder
05. januar 2005 - 22:56 #31
selv tak, det er rart at holde sig lidt opdateret ;)
Avatar billede macho Praktikant
05. januar 2005 - 23:16 #32
Nu er det bestemet ikke for at drive rov på dig kasperstorm, men jeg har et tillægsspørgsmål til min funktion:

Mon det vil være muligt at få vist filstørrelsen, som pt. vises i antal bytes, i enten KB eller MB i stedet?

Jeg gi'r yderligere 30 pts. for dette - evt. opretter jeg et nyt spørgsmål.
Avatar billede ronniedrengen Nybegynder
31. januar 2005 - 19:28 #33
prøv denne her !

function getfilesize($file) {
  if ($bytes >= 1099511627776) {
      $return = round($file/ 1024 / 1024 / 1024 / 1024, 2);
      $suffix = "TB";
  } elseif ($file >= 1073741824) {
      $return = round($file / 1024 / 1024 / 1024, 2);
      $suffix = "GB";
  } elseif ($file >= 1048576) {
      $return = round($file / 1024 / 1024, 2);
      $suffix = "MB";
  } elseif ($file >= 1024) {
      $return = round($bytes / 1024, 2);
      $suffix = "KB";
  } else {
      $return = $file;
      $suffix = "Byte";
  }
  if ($return == 1) {
      $return .= " " . $suffix;
  } else {
      $return .= " " . $suffix . "s";
  }
  return $return;
}

du kunne også lave i switch på den hvis det skal være lidt mere overskueligt :)
Avatar billede macho Praktikant
31. januar 2005 - 20:17 #34
ronniedrengen,  jeg takker for dit svar, som jeg faktisk allerede har fået klaret i et andet spørgsmål:
http://www.eksperten.dk/spm/577626

Jeg havde jo lukket spørgsmål og glemte lige at tilføje her, at jeg havde fået svar!
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