Avatar billede thingholm.dk Nybegynder
09. januar 2003 - 10:48 Der er 10 kommentarer og
1 løsning

Læsning af folder-struktur / filnavne

Hej

Kan man lave et PHP script som indlæser f.eks. alle navnene på subfolders og filer på servere (evt. relativt fra det bibliotek man står i)?

VH

Anders
Avatar billede jamal_s Nybegynder
09. januar 2003 - 10:50 #1
jeps det kan du godt ;)
Avatar billede jamal_s Nybegynder
09. januar 2003 - 10:51 #2
kig lidt rundt i PHP spørgesmål, der er mange der har fået hjælp med det.. ;)
Avatar billede schaefner Juniormester
09. januar 2003 - 10:51 #3
denne her lister alt fra en bestmt mappe:

<?
$dir = "crap";
echo "Dir der listes nu: $dir";
echo "<hr>";
$handle = opendir($dir);
while (false !== ($file = readdir($handle))) {
    if ($file != "." && $file != "..") {
        if (is_dir($dir."/".$file)) {
            echo "<div style=\"float: left; width: 40px\"><code>[dir]</code></div><a href=\"$dir/$file/\">$file/</a><br>";
        } elseif (eregi(".gif$", $file)) {
            echo "<div style=\"float: left; width: 40px\"><code>[gif]</code></div><a href=\"$dir/$file\">$file</a>";
        } elseif (eregi(".jpg$", $file)) {
            echo "<div style=\"float: left; width: 40px\"><code>[jpg]</code></div><a href=\"$dir/$file\">$file</a>";
        } elseif (eregi(".zip$", $file)) {
            echo "<div style=\"float: left; width: 40px\"><code>[zip]</code></div><a href=\"$dir/$file\">$file</a>";   
        } else {
            echo "<div style=\"float: left; width: 40px\"><code>[fil]</code></div><a href=\"$dir/$file\">$file</a><br>";
        }
    }
}
closedir($handle);
?>
Avatar billede schaefner Juniormester
09. januar 2003 - 10:53 #4
og skriver filtypen
Avatar billede schaefner Juniormester
09. januar 2003 - 11:04 #5
her er et simpelt eksempel hvor du navigerer rundt mellem mapperne:

<?
if (!isset($dir)) $dir = "./";
echo "Dir der listes nu: $dir";
echo "<hr>";
$handle = opendir($dir);
while (false !== ($file = readdir($handle))) {
    if ($file != "." && $file != "..") {
        if (is_dir($dir."/".$file)) {
            echo "<div style=\"float: left; width: 40px\"><code>[dir]</code></div><a href=\"?dir=$file\">$file/</a><br>";
        } elseif (eregi(".gif$", $file)) {
            echo "<div style=\"float: left; width: 40px\"><code>[gif]</code></div><a href=\"$dir/$file\">$file</a><br>";
        } elseif (eregi(".jpg$", $file)) {
            echo "<div style=\"float: left; width: 40px\"><code>[jpg]</code></div><a href=\"$dir/$file\">$file</a><br>";
        } elseif (eregi(".zip$", $file)) {
            echo "<div style=\"float: left; width: 40px\"><code>[zip]</code></div><a href=\"$dir/$file\">$file</a><br>";   
        } else {
            echo "<div style=\"float: left; width: 40px\"><code>[fil]</code></div><a href=\"$dir/$file\">$file</a><br>";
        }
    }
}
closedir($handle);
?>
Avatar billede thingholm.dk Nybegynder
09. januar 2003 - 11:05 #6
Udemærket - hvad hvis man bare vil have den til at skrive de filer/subdir der er i den folder, som man er i? Dvs. uden at angive nogen $dir
Avatar billede schaefner Juniormester
09. januar 2003 - 11:08 #7
en lille fejl. Denne her virker:

<?
if (!isset($dir)) $dir = "./";
echo "Dir der listes nu: $dir";
echo "<hr>";
$handle = opendir($dir);
while (false !== ($file = readdir($handle))) {
    if ($file != "." && $file != "..") {
        if (is_dir($dir."/".$file)) {
            echo "<div style=\"float: left; width: 40px\"><code>[dir]</code></div><a href=\"?dir=$dir/$file\">$file/</a><br>";
        } elseif (eregi(".gif$", $file)) {
            echo "<div style=\"float: left; width: 40px\"><code>[gif]</code></div><a href=\"$dir/$file\">$file</a><br>";
        } elseif (eregi(".jpg$", $file)) {
            echo "<div style=\"float: left; width: 40px\"><code>[jpg]</code></div><a href=\"$dir/$file\">$file</a><br>";
        } elseif (eregi(".zip$", $file)) {
            echo "<div style=\"float: left; width: 40px\"><code>[zip]</code></div><a href=\"$dir/$file\">$file</a><br>";   
        } else {
            echo "<div style=\"float: left; width: 40px\"><code>[fil]</code></div><a href=\"$dir/$file\">$file</a><br>";
        }
    }
}
closedir($handle);
?>
Avatar billede schaefner Juniormester
09. januar 2003 - 11:12 #8
dette her burde virkr, men så kan du ikke navigere rundt mellem mapperne:

<?
$handle = opendir("./");
while (false !== ($file = readdir($handle))) {
    if ($file != "." && $file != "..") {
        if (is_dir($dir."/".$file)) {
            echo "<div style=\"float: left; width: 40px\"><code>[dir]</code></div><a href=\"$file\">$file/</a><br>";
        } elseif (eregi(".gif$", $file)) {
            echo "<div style=\"float: left; width: 40px\"><code>[gif]</code></div><a href=\"$file\">$file</a><br>";
        } elseif (eregi(".jpg$", $file)) {
            echo "<div style=\"float: left; width: 40px\"><code>[jpg]</code></div><a href=\"$file\">$file</a><br>";
        } elseif (eregi(".zip$", $file)) {
            echo "<div style=\"float: left; width: 40px\"><code>[zip]</code></div><a href=\"$file\">$file</a><br>";   
        } else {
            echo "<div style=\"float: left; width: 40px\"><code>[fil]</code></div><a href=\"$file\">$file</a><br>";
        }
    }
}
closedir($handle);
?>
Avatar billede tipsen Nybegynder
09. januar 2003 - 12:33 #9
Her er et eksempel på en rekursiv algoritme, som jeg tidligere har brugt til at slette et bibliotek inkl. alle underbiblioteker og filer. Det skal selvfølgelig omskrives en smule, men det kan vel ikke være et problem.

function RecurseDelete($foldername) {
    if (file_exists($foldername)) {
        chmod($foldername, 0777);
        chdir($foldername);
        $dirhandle = opendir('.');
        while (false !== ($file = readdir($dirhandle))) {
            if ($file != "." && $file != "..") {
                if (is_dir($file)) {
                    RecurseDelete($file);
                }
                else {
                    if (unlink($file)) echo "Filen \"$file\" er blevet slettet!<br>";
                    else echo "Problemer med at slette filen \"$file\"!<br>";
                }
            }
        }
        closedir($dirhandle);
        chdir('..');
        if (rmdir($foldername)) echo "Biblioteket \"$foldername\" er blevet slettet!<br>";
        else echo "Problemer med at slette biblioteket \"$foldername\"!<br>";
    }
    else {
        echo "Filen/mappen $foldername eksisterer ikke!";
    }
}

$folder = "./mappenavn";
RecurseDelete($folder);
Avatar billede thingholm.dk Nybegynder
09. januar 2003 - 17:12 #10
Cool schaefner! Jeg vil gerne give 30 point mere hvis nogen kan hjælpe med at få det spyttet ud som XML - noget ala dette:

<folder1navn>
<filnavn>minfil1</filnavn>
<filnavn>minfil1</filnavn>
<filnavn>minfil1</filnavn>
</folder1navn>

osv.

VH

Anders
Avatar billede thingholm.dk Nybegynder
09. januar 2003 - 17:13 #11
Skulle selvfølgelig være

<folder1navn>
<filnavn>minfil1</filnavn>
<filnavn>minfil2</filnavn>
<filnavn>minfil3</filnavn>
</folder1navn>
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