Avatar billede venchil Nybegynder
16. juli 2006 - 19:17 Der er 5 kommentarer

Filbrowser bugs

Hej eksperter!
Jeg er så småt ved at udvikle en filbrowser i PHP, der laver en liste over filer og mapper på en given sti. Jeg har oven i købet lavet scriptet sådan, at man kan gå videre til de forskellige mapper ved at trykke på linket på dem. Jeg har bare 2 problemer, som jeg simpelthen ikke kan gennemskue:

- Scriptet sorterer efter endelsen, men derefter skulle den gerne sortere efter navnet, sådan at f.eks abe.css kommer før blomme.css indenfor css-filerne.

- Scriptet har et stort problem med filstørrelser. Den henter godt nok filstørrelserne på den første side (altså root, den mappe hvor scriptet selv ligger i), men derefter skriver den 0 på alle andre mapper. Der er dog en undtagelse: hvis jeg har en style.css i min root mappe, og en style.css i en anden mappe kopierer scriptet simpelthen filstørrelsen på filen i root mappen, og sætter den præcis samme størrelse ind i den anden mappe ud for style.css.

<?php

function sortByExtension( $e1, $e2 ) { //SORTS FILES BY EXTENSION
    if ( $e1['end'] == $e2['end'] ) {
        return 0;
    }
   
    return ( $e1['end'] < $e2['end'] ) ? -1 : 1;
}

function humanFileSize($size) { //CONVERTS BYTES INTO KB, MB and so on...
    $filesizename = array(" bytes", " kb", " mb", " gb", " tb", " pb", " eb", " zb", " yb");
    echo round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $filesizename[$i];
}

function getDir($dirname) { //GETS THE FILES IN A GIVEN DIRECTORY, AND ECHOES THEM

    //GET FILES IN THE DIRECTORY DEFINED
    $files = array();

    $opendir=opendir("./".$dirname."/");
    while (false !== ($file = readdir($opendir))) {
      if($file != "." && $file != "..") {
        $tmp = array();
        $file_exploded = explode(".", $file);
        $tmp['name'] = $file_exploded[0];
        $tmp['end'] = $file_exploded[1];
        $tmp['size'] = filesize($file);
        $files[] = $tmp;
        }
    }
    closedir($handle);

    //SORT FILES BY EXTENSION
    usort( $files, "sortByExtension" );
   
    //ECHO THE FILES
    for ($x = 0; $x < count($files); $x++) {
        if ($files[$x]['end'] == NULL) {
            echo "<tr>";
                echo "<td style=\"width:65%;\">";
                    echo "<a href=\"?dir=" . $dirname . "/" . $files[$x]['name'] . "\">";
                    echo $files[$x]['name'];
                    echo "</a>";
                echo "</td>";
                echo "<td style=\"width:35%;\"></td>";
            echo "</tr>";
        }
        else {
            echo "<tr>";
                echo "<td style=\"width:65%;\">";
                    echo $files[$x]['name'] . "." . $files[$x]['end'];
                echo "</td>";
                echo "<td style=\"width:35%;\">";
                    humanFileSize($files[$x]['size']);
                echo "</td>";
            echo "</tr>";
        }
    }
}

$dir = $_GET["dir"];

echo "<table cellspacing=\"0px\" cellpadding=\"0px\" style=\"width:300px;\">";
    getDir($dir);
echo "</table>";

?>

Jeg håber der er nogen der kan gennemskue dette her, for jeg kan desværre ikke :(
Avatar billede erikjacobsen Ekspert
16. juli 2006 - 20:51 #1
For at få den rigtige størrelse skal du tage katalog-navnet med i din:
  $tmp['size'] = filesize($file);
Avatar billede venchil Nybegynder
17. juli 2006 - 06:09 #2
Katalog-navnet?
Avatar billede erikjacobsen Ekspert
17. juli 2006 - 09:04 #3
Ja, sådan ca.:

  $tmp['size'] = filesize("./$dirname/$file");
Avatar billede venchil Nybegynder
19. juli 2006 - 20:37 #4
Tak for det... Men er der nogen der har løsninger på det andet problem?
Avatar billede erikjacobsen Ekspert
19. juli 2006 - 21:03 #5
Øh, jo, det er jo bare at udvide med et tilsvarende tjek på navnet, når extension er ens (utestet):

function sortByExtension( $e1, $e2 ) { //SORTS FILES BY EXTENSION AND NAME
    if ( $e1['end'] == $e2['end'] ) {
      if ( $e1['name'] == $e2['name'] ) {
        return 0;
      }
      return ( $e1['name'] < $e2['name'] ) ? -1 : 1;
    }
    return ( $e1['end'] < $e2['end'] ) ? -1 : 1;
}
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