Avatar billede tzinck Novice
22. oktober 2004 - 10:10 Der er 14 kommentarer og
1 løsning

Script til opretning af links til dirs og filer

Jeg har dette script som læser dirs og opretter links til filer.  Jeg har fået scriptet av en venlig bruger her på eksperten, men nu vil jeg gerne videreudvikle det. 

Jeg ved ikke meget om PHP, men har købt et par bøger - og har fået blod på tanden mht at prøve selv, så i stedet for at give mig koden, vil jeg gerne have hint til hvordan jeg griber sagen an

(husk jeg er "jomfru" i php - skær det ud i pap)

OPGAVEN:
Jeg vil gerne have X scripts:

mapppestrukturen er: root/kundenavn/produktnummer/dokumentype/dokumenter.fil

scriptene skal bruges til at oprette en dynamisk liste over filer, som skal tilgås via en browser.

Jeg forestiller mig at opgaven skal løses med 4 forskellige scripts (måske kan det gøres nemmere)


SCRIPT 1. ligger i root
scripets opgave er at oprette links til alle dirs (root/kundenavn/) i mappem (men ikke subdirs til disse)

SCRIPT 2. ligger i root/kundenavn/
scriptets opgave er at læse og oprette links til root/kundenavn/produktnummer/

SCRIPT 3. ligger i root/kundenavn/produktnummer/
scriptets opgave er at læse og oprette links (sorteret efter hvilken mappe de ligger i som overskrift) til filerne: root/kundenavn/produktnummer/dokumentype/dokumenter.fil

------------
Her er det script jeg har, og som jeg forestiller mig at scriptene skal laves ud fra:
------------

<?php
//Her skal du skrive mappen der skal udlæses fra
$path = "sti/til/mappe";
//DET VIL JEG GERNE UNDGÅ AT SKULLE LAVE MANUELT

function readsubdirs($dir, $subdirs) {
    if (is_dir($dir)) {
        if ($dh = opendir($dir)) {
            while (($file = readdir($dh)) !== false) {
                if ($file != "." && $file != "..") {
                    $spaces = "";
                    for ($i = 0; $i < $subdirs; $i++) {
                        $spaces .= "&nbsp;&nbsp;&nbsp;";
                    }
                    echo $spaces;
                    if (is_dir($dir."/".$file)) {
                        echo "-><font color='green'>$file</font><br>";
                        readsubdirs($dir."/".$file, $subdirs+1);
                    } else {
                        echo "<a href=\"".$dir."/".$file."\">".$dir."/".$file."</a><br>";
                    }
                }
            }
        }
        closedir($dh);
    }
}

readsubdirs($path,0);

?>
Avatar billede sone Nybegynder
22. oktober 2004 - 11:38 #1
På eksperten stiller man ikke opgaver, man spørger efter hjælp.
Vil du have løst opgaver, så skal du bruge www.sharksforum.com
Avatar billede tzinck Novice
22. oktober 2004 - 11:57 #2
-> sone

hvis du læser 2 afsnit kan du se at jeg skriver:

"Jeg ved ikke meget om PHP, men har købt et par bøger - og har fået blod på tanden mht at prøve selv, så i stedet for at give mig koden, vil jeg gerne have hint til hvordan jeg griber sagen an"

Der er altså ikke tale om at jeg vil have en færdig opgave, men hjælp til at udvikle den selv.
Avatar billede Slettet bruger
22. oktober 2004 - 17:30 #3
En god start kunne være

$path=dirname(__FILE__);
Avatar billede tzinck Novice
25. oktober 2004 - 08:30 #4
Jeg synes på et tidspunkt at jeg har hørt at scriptet SKAL ligge i roden - er der noget om det eller er det en skrøne ?
Avatar billede Slettet bruger
25. oktober 2004 - 08:52 #5
Det kommer an på det specifikke script. Hvis det benytter den kommandoe, jeg skrev, så skal det ligge i den mappe hvorfra der skal læses - eller i en højere mappe, hvis man tilføjer sti til den undermappe, der skal vises, når man læser mapperne.

Men det kan sagten lade sig gøre at have et script liggende i en mappe, som viser indholdet af andre mapper. Så skal man bare på en eller anden måde fortælle scriptet, hvor det skal læse fra.
Avatar billede tzinck Novice
25. oktober 2004 - 09:12 #6
nå, ok.
Kan vi prøve at tage udgangspunkt i det script jeg har (se øverst) - der har jeg sådan en nogenlunde ide om, hvordan det hænger sammen. 

Hvis jeg :
- ændrer function readsubdirs($dir, $subdirs) til function readsubdirs($dir)
- fjerner "for" sætningen, der starter i linie 12
- fjerner $Subdirs+1 i linie 18

forestillede jeg mig egentligt at jeg havde script1 - men jeg kan ikke umiddelbart se forskel på output i forhold til det fulde script.  Hvad kan der være galt ?
Avatar billede Slettet bruger
25. oktober 2004 - 09:22 #7
Den eneste forskel burde være indrykning af undermapper.

Prøv at se på vis kilde i resultatet.

Hvis du ønsker at den kun skal vise den aktuelle mappe, og links til undermapper, er det denne del, der skal rettes i:

                    if (is_dir($dir."/".$file)) {
                        echo "-><font color='green'>$file</font><br>";
                        readsubdirs($dir."/".$file, $subdirs+1);
                    } else {
                        echo "<a href=\"".$dir."/".$file."\">".$dir."/".$file."</a><br>";
                    }
Avatar billede tzinck Novice
25. oktober 2004 - 09:51 #8
hvor sejt - nu fik jeg den da til at udelade filerne :-)
Avatar billede tzinck Novice
25. oktober 2004 - 10:04 #9
så lykkedes det (ved hjælp af udelukkelsesmetoden) at få den til a udskrive kun dirs (og ikke subdirs eller filer)
men... Den laver dem ikke som links - og den sorterer ike i alfabetisk rækkefølge

hvordan kommer jeg videre ?
Avatar billede Slettet bruger
25. oktober 2004 - 10:20 #10
For at få den til at lave som links kunne du jo kopiere linien, der før udskrev links til filer. ;-)

Sortering skal man selv tage sig af, da navnene kommer i den rækkefølge, som selve filsystemet giver dem i.

Det kunne gøres på denne måde:

ret

while (($file = readdir($dh)) !== false) {
  if ($file != "." && $file != "..") {

til

$dirliste=array();
while (($file = readdir($dh)) !== false) {
  if ($file != "." && $file != "..") {
    $dirliste[]=$file;
  }
}
closedir($dh);
sort($dirliste);
foreach($dirliste as $file){


Og så skal der også lige fjernes diss to linier længere nede, da de er flyttet op.

}
closedir($dh);
Avatar billede tzinck Novice
25. oktober 2004 - 11:37 #11
øv - det duer ikke.  Jeg må nok erkende at jeg er for "grøn" til det her - jeg må nok hellere læse lidt på lektien først - eller betale mig fra det :-(
Vil du være tilfreds med 50 point for din assistance indtil nu ?
Avatar billede Slettet bruger
25. oktober 2004 - 11:39 #12
Ork ja. 50 point er rigeligt.
Avatar billede tzinck Novice
25. oktober 2004 - 11:45 #13
så tak for hjælpen indtil nu - det kan være jeg vender tilbage når jeg har fået lidt mere php erfaring
Avatar billede tzinck Novice
25. oktober 2004 - 11:45 #14
ups - der fik du alle 200 - det var sørme et uheld
Avatar billede Slettet bruger
25. oktober 2004 - 12:04 #15
Så får du da bare de overskydende tilbage: http://www.eksperten.dk/spm/554225
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