Avatar billede thomastegl Nybegynder
18. januar 2007 - 22:18 Der er 9 kommentarer

Liste indholdet af mappe.

Hej Eksperter.

Jeg vil gerne fra en php-side kunne generere en liste over indholdet af en mappe "Musik" på serveren. Mappen indeholder zip filer til download.
Nogen der har et lille fint script til at få indholdet vist pænt, evt. med ikoner.

Alle forslag hilses velkommen.
Avatar billede mccookie Seniormester
18. januar 2007 - 22:21 #1
Prøv at kigge på GLOB() under php.net
///H
Avatar billede simplus Nybegynder
18. januar 2007 - 22:24 #2
Kig på min tidligere tråd: http://www.eksperten.dk/spm/753062
Avatar billede thomastegl Nybegynder
18. januar 2007 - 22:59 #3
==> mccookie  Hmm. Kunne ikke lige finde noget der var umiddelbart brugbart.

==> simplus    Kan ikke få det til at virke. Måske fordi jeg kører det inde fra postnuke.
Avatar billede thomastegl Nybegynder
18. januar 2007 - 23:03 #4
Har fundet dette i et gammelt spørgsmål, virker fint, dog ville det være fedt hvis "download pop-up'en" kom frem når man klikker på de enkelte filer i listingen. Istedet går der bare ged i det hele når postnuke forsøger at åbne filen...

KODE:
<?
$start_path = "Musik";
$read_start = "";
$start_dir = "";

$dir_image = "/images/mappe.gif";
$indryk = 20;


$mappe = $start_path . $read_start . $start_dir;
$liste = array($mappe);

function visFiler($dir) {
    $d = dir($dir);
    while (false !== ($file = $d->read())) {
        if (is_file($dir ."/". $file)) {
            $out[] = $file;
        }       
    }
    $d->close();
    if (!empty($out)) {
    return $out;
    }
}

function visMapper($dir, &$out) {
    $d = dir($dir);
    while (false !== ($file = $d->read())) {
        if ($file != '.' && $file != '..') {
            if (is_dir($dir ."/". $file)) {
                $out[] = $dir ."/". $file;
                visMapper($dir ."/". $file, $out);
            }       
        }
    }
    $d->close();
}

if(is_dir($mappe)) {

visMapper($mappe, $liste);
sort($liste);

foreach ($liste as $sti) {
$visdir = explode($start_path . $read_start, $sti);
$linksti = $read_start . $visdir[1];
$dirantal = explode("/", $visdir[1]);
$t = (count($dirantal)*$indryk);

    echo "<div style=\"margin-left: ". $t ."px;\"><img src=\"". $dir_image ."\" align=\"top\"> <b>". $visdir[1] .":</b>";
    $filer = visFiler($sti);
    echo"<div style=\"margin-left: ". $indryk ."px;\">";

    if (is_array($filer)) {
        sort($filer);

        foreach ($filer as $fil) {
            echo "<a href=\"". $linksti ."/". $fil ."\">". $fil ."</a><br />\n";
        }

    }else{
    echo"Ingen filer";
    }

    echo"</div></div><br />\n";
}

}else{
echo"Fejl i stiangivelse!";
}
echo"<br /><br />\n";

//  show_source(basename($_SERVER["PHP_SELF"]));

?>
Avatar billede showsource Seniormester
19. januar 2007 - 06:13 #5
<?php

$start_path = $_SERVER["DOCUMENT_ROOT"];
$read_start = "/";
$start_dir = "Musik";

$mappe = $start_path . $read_start . $start_dir;

if(isset($_GET["file"]) && is_file($mappe ."/". $_GET["file"])){

header("Content-Disposition: attachment; filename=". $_GET["file"] ."");
header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize($mappe ."/". $_GET["file"]));
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Expires: ".gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT");

$fp = fopen($mappe ."/". $_GET["file"],"r");
print fread( $fp, filesize($mappe ."/". $_GET["file"]) );
fclose($fp);
exit();

}


$dir_image = "/images/mappe.gif";
$indryk = 20;


$liste = array($mappe);

function visFiler($dir) {
    $d = dir($dir);
    while (false !== ($file = $d->read())) {
        if (is_file($dir ."/". $file)) {
            $out[] = $file;
        }     
    }
    $d->close();
    if (!empty($out)) {
    return $out;
    }
}

function visMapper($dir, &$out) {
    $d = dir($dir);
    while (false !== ($file = $d->read())) {
        if ($file != '.' && $file != '..') {
            if (is_dir($dir ."/". $file)) {
                $out[] = $dir ."/". $file;
                visMapper($dir ."/". $file, $out);
            }     
        }
    }
    $d->close();
}

if(is_dir($mappe)) {

visMapper($mappe, $liste);
sort($liste);

foreach ($liste as $sti) {
$visdir = explode($start_path . $read_start, $sti);
$linksti = $read_start . $visdir[1];
$dirantal = explode("/", $visdir[1]);
$t = (count($dirantal)*$indryk);

    echo "<div style=\"margin-left: ". $t ."px;\"><img src=\"". $dir_image ."\" align=\"top\"> <b>". $visdir[1] .":</b>";
    $filer = visFiler($sti);
    echo"<div style=\"margin-left: ". $indryk ."px;\">";

    if (is_array($filer)) {
        sort($filer);

        foreach ($filer as $fil) {
            echo "<a href=\"". $_SERVER["PHP_SELF"] ."?file=". $fil ."\">". $fil ."</a><br />\n";
        }

    }else{
    echo"Ingen filer";
    }

    echo"</div></div><br />\n";
}

}else{
echo"Fejl i stiangivelse!";
}

?>
Avatar billede thomastegl Nybegynder
20. januar 2007 - 13:25 #6
Det hjalp lidt. Nu laver den ikke længere ged i siden, men loader en fejlside inde i den rigtige ramme. Det er tilfredsstillende, kombineret med en "  For at downloade en sang skal du højreklikke på sangen og trykke "Gem destination som...".  " tekst øverst på siden. Tak for hjælpen showsource. Læg et svar.
Avatar billede thomastegl Nybegynder
31. januar 2007 - 23:45 #7
HJÆÆÆLP.

Nu er der slet ikke noget der virker. Aner ikke hvad der er sket. Måske har der været en cache som har fucked visningen op, men ihvertfald: Det som før virkede efter hensigten er nu gået i ged.

Indholdet af mappen Musik listes som den skal. Men hvis man forsøger at downloade sangene så forsøger Postnuke at åbne filnavnet som et modul. Underligt.

Nogen der kan hjælpe en desperat mand ??
Avatar billede thomastegl Nybegynder
31. januar 2007 - 23:47 #8
Jeg vil også være glad hvis nogen kan se, hvorfor der i det øverste af scripsene på denne side pludselig opstår et adresseproblem.
Indholdet af mappen Musik listes korrekt.
Når man forsøger at downloade mappen er der fejl i adressen. "/Musik" mangler i adresselinien...
Avatar billede thomastegl Nybegynder
01. februar 2007 - 10:17 #9
Har løst problemet. Lagde blot stien ind i

foreach ($filer as $fil) {
            echo "<a href=\"". $linksti ."/". $fil ."\">". $fil ."</a><br />\n";
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