Avatar billede Elvenstone Nybegynder
08. maj 2010 - 06:50 Der er 13 kommentarer og
1 løsning

File size checker for Mappe listning

Hej, jeg har fundet et script som jeg gerne vil bruge det gør ikke andet end at liste alle filer og mapper som man har sat $path til, er det muligt at istedet for udenfor filerne der er ikoner så vil der blive checket på hver fil eller mappe hvor meget det fylder, hvis det fylder over 2GB så viser den ikon1 hvis den er under 2GB så viser den ikon2, jeg vil ikke have den viser hvor meget det fylder i tal, men i billeder og det skal være så jeg ved den fylder 2GB+ eller 2GB-

Endelig kig på scriptet under, vil helst have en redigere det istedet for at lave et nyt men hvis du kan så det eneste der skal ligge i det er at den viser alle filer og mapper i hvad $path man har sat den til og den skal vise et lille billede som jeg selv vælger ud for hver fil/mappe som viser 2 forskellige billeder som afgør hvis den er størrer eller mindre end 2GB

Undskyld jeg forklarer tingene en masse gange, vil bare være sikker på jeg har det på det rene, vil gerne komme videre hurtigts muligt:)


<?php

// install variables

    $host = "G:\MOVIES"; // the folder where index.php is located
    // path for folder, file, buttons(back and home) images
    $img_back="..\images/back.gif";
    $img_folder="..\images/folder.gif";
    $img_file="..\images/file.gif";
    $img_home="..\images/home.gif";

// end of install variables


// returns the extension of a file
function strip_ext($name)
{         
        $ext = substr($name, strlen($ext)-4, 4);
          if(strpos($ext,'.') === false) // if we have a folder element
          {
              return "    "; // we return a string of space characters for later sort,
                            // so that the folder items remain on the first positions
          }
          return $ext; // if we have a file we return the extension - .gif, .jpg, etc.
}



// returns the files from the $path and returns them in an array
function getFiles($path) {

  $files = array();
  $fileNames = array();
  $i = 0;
  // build
  if (is_dir($path)) {
      if ($dh = opendir($path)) {
          while (($file = readdir($dh)) !== false) {
              if (($file == ".") || ($file == "..")) continue;
              $fullpath = $path . "/" . $file;
              //$fkey = strtolower($file);
              $fkey = $file;
              while (array_key_exists($fkey,$fileNames)) $fkey .= " ";
              $a = stat($fullpath);
              $files[$fkey]['size'] = $a['size'];
              if ($a['size'] == 0) $files[$fkey]['sizetext'] = "-";
              else if ($a['size'] > 1024 && $a['size'] <= 1024*1024) $files[$fkey]['sizetext'] = (ceil($a['size']/1024*100)/100) . " K";
              else if ($a['size'] > 1024*1024) $files[$fkey]['sizetext'] = (ceil($a['size']/(1024*1024)*100)/100) . " Mb";
              else $files[$fkey]['sizetext'] = $a['size'] . " bytes";
              $files[$fkey]['name'] = $file;
              $e = strip_ext($file); // $e is the extension - for example, .gif
              $files[$fkey]['type'] = filetype($fullpath); // file, dir, etc
              $k=$e.$file; // we use this string for sorting the array elements by extension and filename;
              $fileNames[$i++] = $k;
          }
          closedir($dh);
      } else die ("Cannot open directory:  $path");
  } else die ("Path is not a directory:  $path");
  sort($fileNames,SORT_STRING); // sorting
  $sortedFiles = array();
  $i = 0;
  foreach($fileNames as $f) {
          $f = substr($f, 4, strlen($f)-4); // we remove the extension we added in front of the filename for sorting
          if($files[$f]['name'] !='') $sortedFiles[$i++] = $files[$f]; 
    }// ends the foreach where we build the final sorted array
  return $sortedFiles;
}


// folder navigation code
$startdir = "./";
if(isset($_GET['dir'])) {
    $prev = $_GET['dir'];
    $folder = $_GET['dir']; 
    echo "<a href=\"java script:history.go(-1)\"><img src=\"$img_back\"></a>  <a href=\"$host\"><img src=\"$img_home\"></a> <br/><br/>";
} else { $folder = $startdir; $prev='';}
// end folder navigation code


$files = getFiles($folder);

foreach ($files as $file) {
    if(strip_ext($file[name])!='.php'){
        $image = $img_file;
        if($file[type]=='dir') {
            $image = $img_folder;
            $cmd='?dir='.$prev.$file[name].'/';
        }// if the element is a directory
        else $cmd=$prev.$file[name];
        echo "<a href=\"$cmd\" title=\"$file[type],  $file[sizetext]\"><img src=\"$image\" /> $file[name]</a> <br/>";
    }//if strip_ext
}//foreach
?>
Avatar billede jakobdo Ekspert
09. maj 2010 - 14:43 #1
Du har jo koden her:

if ($a['size'] == 0) $files[$fkey]['sizetext'] = "-";
              else if ($a['size'] > 1024 && $a['size'] <= 1024*1024) $files[$fkey]['sizetext'] = (ceil($a['size']/1024*100)/100) . " K";
              else if ($a['size'] > 1024*1024) $files[$fkey]['sizetext'] = (ceil($a['size']/(1024*1024)*100)/100) . " Mb";
              else $files[$fkey]['sizetext'] = $a['size'] . " bytes";

Den kan du vel blot tilrette, så den tager højde for de 2 gb og så smider et billede ud...
Avatar billede Elvenstone Nybegynder
09. maj 2010 - 15:07 #2
Det dét jeg ikke kan :/
Avatar billede jakobdo Ekspert
09. maj 2010 - 17:55 #3
Hvad kan du ikke ?

Kode ?
Php ?
Eller rette din nuværende kode ?
Avatar billede Elvenstone Nybegynder
09. maj 2010 - 21:26 #4
Kan ikke rette den til
Avatar billede jakobdo Ekspert
09. maj 2010 - 21:39 #5
Fordi du ikke kan eller fordi du ikke vil ?
Forstår du hvad der sker i de linjer jeg har skrevet i mit første indlæg ?
Avatar billede Elvenstone Nybegynder
09. maj 2010 - 22:11 #6
Fordi jeg ikke kan, kan se at den udregner fil størelse, men har ingen ide hvordan jeg skal scripte det
Avatar billede jakobdo Ekspert
10. maj 2010 - 08:33 #7
Prøv at ret koden:

if ($a['size'] == 0) $files[$fkey]['sizetext'] = "-";
              else if ($a['size'] > 1024 && $a['size'] <= 1024*1024) $files[$fkey]['sizetext'] = (ceil($a['size']/1024*100)/100) . " K";
              else if ($a['size'] > 1024*1024) $files[$fkey]['sizetext'] = (ceil($a['size']/(1024*1024)*100)/100) . " Mb";
              else $files[$fkey]['sizetext'] = $a['size'] . " bytes";

til:

$gb2 = 1024 * 1024 * 1024 * 2; //2gb

if ($a['size'] > $gb2)
  $files[$fkey]['sizetext'] = '<img src="over.gif" alt="Over2gb" />';
else if ($a['size'] < $gb2)
  $files[$fkey]['sizetext'] = '<img src="under.gif" alt="Under2gb" />';
else
  $files[$fkey]['sizetext'] = '<img src="2gb.gif" alt="2gb" />';

Og ret:

echo "<a href=\"$cmd\" title=\"$file[type],  $file[sizetext]\"><img src=\"$image\" /> $file[name]</a> <br/>";

til:

echo "<a href=\"$cmd\" title=\"$file[type]\">".$file[sizetext]." <img src=\"$image\" /> $file[name]</a> <br/>";
Avatar billede Elvenstone Nybegynder
10. maj 2010 - 13:57 #8
Hm virker ikke, den sætter det valgte billede korrekt på plads ved siden af alle filerne men den siger alle er under 2GB, også enkle filer som er over 2GB, ville den også kunne læse størelse på en hel mappes indhold.
Avatar billede jakobdo Ekspert
10. maj 2010 - 14:06 #9
Den version "vi" har lavet her i første omgang, læser kun pr fil.
Avatar billede Elvenstone Nybegynder
10. maj 2010 - 14:18 #10
Ja "vi" har et godt sammarbejde, jeg skal kun bruge så den læser mappens fil størelse skal ikke bruge per fil, men den du gav mig virker ikke, den siger alt er under 2GB selv filer som er over 2GB.
Avatar billede jakobdo Ekspert
10. maj 2010 - 14:23 #11
Så skal du evt. kigge på en løsning ala:

<?php
/**
* Get the directory size
* @param directory $directory
* @return integer
*/
function dirSize($directory) {
    $size = 0;
    foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)) as $file){
        $size+=$file->getSize();
    }
    return $size;
}
?>
Avatar billede Elvenstone Nybegynder
10. maj 2010 - 14:49 #12
Funker stadig ikke, siger alt er under 2GB
Avatar billede jakobdo Ekspert
10. maj 2010 - 14:55 #13
Prøv evt. at kontakt mig via msn: jakobdo (at) hotmail \dot/ com
Avatar billede Elvenstone Nybegynder
28. oktober 2010 - 04:35 #14
tak ^^
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