Avatar billede sazo Nybegynder
20. juni 2011 - 12:05 Der er 9 kommentarer

Php sorter alfabetisk

Hej eksperter

Jeg bruger nedenstående php kode til at vise min servers indhold. Jeg vil gerne at mapper og filer bliver sorteret alfabetisk, er det noget man kan skrive ind i koden?

På forhånd tak for hjælpen!


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <?php
      function paintUndersideOfFox($c = '.', $wcwd = false) {
        if($wcwd === false)
          $wcwd = substr($wcwd = $_SERVER['REQUEST_URI'], 0, strrpos($wcwd, '/') + 1);

        echo('<ul class="dirlist">');
        $d = opendir($c);
        while($f = readdir($d)) {
          if(strpos($f, '.') === 0) continue;

          $ff = $c . '/' . $f;
          echo '<li><a href="' . $wcwd . $ff . '">' . $f . '</a>';
          if(is_dir($ff)) paintUndersideOfFox($ff, $wcwd);
          echo '</li>';
        }
        echo('</ul>');
      }
    ?>
    <title>Directory Listing</title>
    <style type="text/css">
      ul.dirlist, ul.dirlist li {
        list-style-type: none;
        padding-left: 1em;
      }
    </style>
  </head>
  <body>
    <?php
      paintUndersideOfFox();
    ?>
  </body>
</html>
Avatar billede vagnk Juniormester
20. juni 2011 - 12:44 #1
Jeg ville lade funktionen samle sammen i en array() som  den returnerer. f.eks. $dirs = paintUndersideOfFox(); Husk den osse skal være med i dit recursive kald.

Efter kaldet laver du en asort($dirs) og sætter al pynten på i en foreach($dirs as $val){...}.

Er det nok eller skal du have mere hjælp?
Avatar billede jakobdo Ekspert
20. juni 2011 - 13:52 #2
Hvorfor vil i aldrig bruge GLOB() når i arbejder med dirs og filer?
Avatar billede sazo Nybegynder
20. juni 2011 - 19:54 #3
Jeg har ingen forstand på .php, koden ovenover er stykket samme fra brydstykker jeg har fundet på forskellige hjemmesider og ellers trial-and-error justering rundt omkring. Så vil nok meget gerne have kode segmentet skrevet ind, da jeg helt sikkert ellers gør det forkert. Kan det lade sig gøre? :)
Avatar billede vagnk Juniormester
20. juni 2011 - 23:01 #4
OK sazo. Jeg har lidt travlt i øjeblikket, men om et par dage, hvis ingen andre er kommet mig i forkøbet.
Avatar billede jakobdo Ekspert
21. juni 2011 - 08:57 #5
jeg har nu forsøgt en løsning med glob:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/ (...)
<html>
  <head>
    <?php
      function paintUndersideOfFox($c = '.', $workDir = false){
        if($workDir === false)
          $workDir = pathinfo($_SERVER['PHP_SELF'],PATHINFO_DIRNAME);

        echo '<ul class="dirlist">';
        $dirs = glob($c."/*",GLOB_ONLYDIR);
        foreach($dirs as $dir){
          echo '<li><a href="' . $workDir . $dir . '">' . $dir . '</a>';
          paintUndersideOfFox($dir, $dir);
          echo '</li>';
        }
       
        $files = glob($c."/*.*");
        foreach($files as $file){
          echo '<li><a href="' . $workDir . $file . '">' . $file . '</a></li>';
        }
        echo '</ul>';
      }
    ?>
    <title>Directory Listing</title>
    <style type="text/css">
      ul.dirlist, ul.dirlist li {
        list-style-type: none;
        padding-left: 1em;
      }
    </style>
  </head>
  <body>
    <?php
      paintUndersideOfFox();
    ?>
  </body>
</html>

eneste som driller mig, er at alle filnavne og mapper er prefix'ede med ./
Men uden, vil det ikke køre på mit system.
Man kunne selvfølgelig fjerne ./ inden man printer til skærmen.
Avatar billede sazo Nybegynder
21. juni 2011 - 19:39 #6
Ser ud til at fungere fint. To ting dog.
Den skriver en linie i toppen der hedder:
"ul.dirlist, ul.dirlist li { list-style-type: none; padding-left: 1em; } "

Og er det muligt at gøre sådan at den ikke viser hele filstien, men bare aktuel mappe navn og filnavn? Hvis du er med på hvad jeg mener.
Avatar billede jakobdo Ekspert
21. juni 2011 - 20:59 #7
Kig på funktionen: basename()
Avatar billede sazo Nybegynder
21. juni 2011 - 22:06 #8
Ok. Vil jeg gøre. Når jeg klikker på linksene vil den ikke åbne filerne som der er linket til, sådan som din kode er skrevet nu. (Det drejer sig om korte film klip (.avi) som plejer at åbne og streame i wmp). Bare rolig er helt lovlige hjemmelavede stop motion film. :)
Avatar billede jakobdo Ekspert
21. juni 2011 - 22:15 #9
Det må være noget med stierne, som så ikke er korrekte. :o)
Prøv lige selv eller vent til andre evt. byder ind.
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