Weergegeven resultaten: 1 t/m 10 van 10

Discussie: Directory Listing

  1. #1
    Erelid   butskristof's schermafbeelding
    Geregistreerd
    21 September 2007
    Locatie
    Wiekevorst (Heist-op-den-Berg)
    Berichten
    903
    Bedankjes
    317
    Bedankt
    847 keer in 420 posts

    Directory Listing

    Beste,

    ik was gisteren aan het nadenken over hoe ik mijn documenten vanop iedere computer met internet kon bekijken.
    Toen kwam ik op het idee van een FTP-server, maar hier heb je dan nog altijd een FTP programma voor nodig (tenzij je net2ftp gebruikt maar ik vind dit persoonlijk niet zo handig werken).
    Is er geen manier waarop ik bv naar mijn webruimte surf, dan een wachtwoord moet ingeven, en dan in een map op mijn server terechtkom waarin bv mijn schooldocumenten staan?
    Die eerste pagina waarop ik dan het wachtwoord moet ingeven heb ik al kunnen maken, kijk op http://kristofb.heliohost.org/. De manier waarmee ik het nu gedaan heb, is nog niet zo veilig, maar ik ben van plan van ook nog met .htacces en .htpasswd te werken aangezien mijn webserver dit ondersteund.
    Maar hoe kan ik dan die pagina maken waarop ik in de map terechtkom? Ik heb al wat liggen googlen, en ik heb al enkele PHP-scripts gevonden. Het probleem is echter dat ik totaal geen ervaring heb met PHP ;s
    Weet er iemand de manier om een pagina te maken waarop je toegang krijgt door de map en indien dit met PHP moet, kan iemand mij uitleggen hoe dit jusit werkt?
    Mvg,
    Kirstof.

  2. #2
    Erelid   butskristof's schermafbeelding
    Geregistreerd
    21 September 2007
    Locatie
    Wiekevorst (Heist-op-den-Berg)
    Berichten
    903
    Bedankjes
    317
    Bedankt
    847 keer in 420 posts
    Voor het geval dat het kan helpen:
    Ik kan gebruik maken van Adobe Dreamweaver CS3 als dat nodig is.
    Mvg en dank bij voorbaat,
    Kirstof.

  3. #3
    PC-Freak   Spoorzoeker's schermafbeelding
    Geregistreerd
    10 May 2005
    Locatie
    in een huis met een dak er op
    Berichten
    1.542
    Bedankjes
    120
    Bedankt
    792 keer in 618 posts
    Lijkt me niet zo moeilijk:

    upload elk document zodat je een link krijgt.
    Zet deze link in een database.
    Maak een log-in die daarna je database uitleest en je de downloadlinken toont.
    De schuld ligt nooit bij jezelf, maar altijd bij een ander.

  4. #4
    Administrator   ultddave's schermafbeelding
    Geregistreerd
    24 June 2006
    Locatie
    Genk
    Berichten
    1.527
    Bedankjes
    5.389
    Bedankt
    2.577 keer in 1.271 posts
    Is er geen manier waarop ik bv naar mijn webruimte surf, dan een wachtwoord moet ingeven, en dan in een map op mijn server terechtkom waarin bv mijn schooldocumenten staan?
    Wat is het verschil met een FTP server dan? :P Daar moet je toch ook eerst inloggen en dan zie je ook je documenten staan.

    Hetgeen Spoorzoeker zegt kan inderdaad wel handig zijn. Maar ik zou dat gewoon zonder database doen. Gewoon een script schrijven dat elke submap van een map, bijvoorbeeld "uploads", gaat bekijken, en voor alle bestanden een downloadlink maakt.

    Code:
    <?php
    
    	function showdirs($map = "./", $return = array())
    	{
    		if(@$dir = opendir($map))
    		{
    			while (false !== ($file = readdir($dir)))
    			{
    				if ($file != "." && $file != "..")
    				{
    					if(is_dir($map . $file))
    					{
    						$return[] = $file;
    						$return = showdirs($map . $file . "/", $return);
    					}
    				}
    			}
    		}
    		@closedir($dir);
    		return $return;
    	} 
    
    	function file_extension($filename)
    	{
    		return end(explode(".", $filename));
    	}
    
    
    	function RemoveExtension($strName)  
    	{  
         		$ext = strrchr($strName, '.');  
    
         		if($ext !== false)  
         		{  
             		$strName = substr($strName, 0, -strlen($ext));  
         		}  
         		return $strName;  
    	}  
    
    	$dirinhoud = showdirs('./uploads/');
    	foreach($dirinhoud as $dir)
    	{
    		$myDirectory = opendir("./uploads/".$dir."/");
    		echo "<h3>".$dir."</h3>";
    		while($entryName = readdir($myDirectory)) {
    			$dirArray[] = $entryName;
    			$naam = file_extension($entryName);
    			if(strlen($naam) > 1)
    			{
    				echo $entryName;
                                echo "<br/>";
    			}
    		}
    	}
    ?>
    Bovenstaand script gaat dus alle submappen van "uploads" af. En gaat dan voor elke map, alle bestandsnamen uitprinten.

    Stel dat je dit hebt;
    ./uploads/videos/filmpje.avi
    ./uploads/videos/filmpje1.avi
    ./uploads/videos/filmpje2.avi

    Dan krijg je als output:

    videos
    filmpje.avi
    filmpje1.avi
    filmpje2.avi

    Uiteraard moet er uiteindelijk een downloadlink komen ipv enkel de naam.

    Spoorzoekers manier gaat sneller werken aangezien hij bij mijn script, elke keer alle mappen gaat doorlopen. Terwijl bij hem de data al in de database zit. Afhankelijk van de hoeveelheid bestanden/mappen, kan je dus kiezen voor één van de 2 manieren.

    PS:
    echo $entryName;
    echo "<br/>";

    moet je dan vervangen door de download link. $entryName bevat de bestandsnamen. Bijvoorbeeld "filmpje.avi".

    Mvg,
    Dave
    Laatst gewijzigd door ultddave; 12 January 2010 om 16:50
    "Friendship. It's the hardest thing in the world to explain. It's not something you learn in school. But if you haven't learned the meaning of friendship, you really haven't learned anything." ~ Muhammad Ali

  5. #5
    Erelid   carl's schermafbeelding
    Geregistreerd
    20 June 2006
    Locatie
    Halle/Gent
    Berichten
    2.409
    Bedankjes
    1.846
    Bedankt
    1.827 keer in 1.102 posts
    En uiteindelijk worden je bestanden toch ook over FTP verzonden ?? Of zie ik het verkeerd

  6. #6
    PC-Freak   Spoorzoeker's schermafbeelding
    Geregistreerd
    10 May 2005
    Locatie
    in een huis met een dak er op
    Berichten
    1.542
    Bedankjes
    120
    Bedankt
    792 keer in 618 posts
    Een downloadlink is toch geen FTP ?
    De schuld ligt nooit bij jezelf, maar altijd bij een ander.

  7. #7
    Erelid   butskristof's schermafbeelding
    Geregistreerd
    21 September 2007
    Locatie
    Wiekevorst (Heist-op-den-Berg)
    Berichten
    903
    Bedankjes
    317
    Bedankt
    847 keer in 420 posts
    Oke dankjewel allemaal,
    mijn excuses dat ik hier al even niet meer gereageerd heb. Ik ga nu het script van Ultdave uitproberen en ik zal jullie laten weten of het werkt.
    Nogmaals hartelijk dank allemaal.
    Mvg,
    Kristof.

  8. #8
    Erelid   butskristof's schermafbeelding
    Geregistreerd
    21 September 2007
    Locatie
    Wiekevorst (Heist-op-den-Berg)
    Berichten
    903
    Bedankjes
    317
    Bedankt
    847 keer in 420 posts
    Citaat Oorspronkelijk geplaatst door ultddave Bekijk bericht
    Wat is het verschil met een FTP server dan? :P Daar moet je toch ook eerst inloggen en dan zie je ook je documenten staan.

    PS:
    echo $entryName;
    echo "<br/>";

    moet je dan vervangen door de download link. $entryName bevat de bestandsnamen. Bijvoorbeeld "filmpje.avi".
    Beste, in mijn vorige post was ik dit vergeten. Als je het gewoon met een FTP-server doet heb je nog altijd een FTP-programma nodig, dit is toch niet vereist bij de andere manier? Ik kan namelijk op school zelf geen programma's installeren.

    over het PS bericht:
    Ik vrees dat ik het niet helemaal snap... Moet ik hier dan van maken om het bij jouw voorbeeld te noemen.
    echo "filmpje.avi";
    echo "filmpje1.avi";
    echo "<br/>";
    ?
    Met php heb ik dus duidelijk nog geen ervaringen :s...

    PS:
    ik heb het nu net uitgeprobeerd en het enige wat ik krijg is:
    ".$dir.""; while($entryName = readdir($myDirectory)) { $dirArray[] = $entryName; $naam = file_extension($entryName); if(strlen($naam) > 1) { echo $entryName; echo "
    "; } } } ?>
    Weet jij wat ik moet doen?
    Hartelijk dank voor jullie hulp nogmaals.
    Mvg,
    Kristof.

  9. #9
    Administrator   ultddave's schermafbeelding
    Geregistreerd
    24 June 2006
    Locatie
    Genk
    Berichten
    1.527
    Bedankjes
    5.389
    Bedankt
    2.577 keer in 1.271 posts
    Neen.

    Ik vermoed dat ge ooit geprogrammeerd hebt in 1 of andere taal?

    Variabelen in PHP worden aangeduid met een dollarteken.

    Dus $entryName is een variabele met naam entryName. In dit geval is die van het type "String" en bevat dus een bestandsnaam. (Eigenlijk heeft PHP niet echt expliciet verschillende types, maar ik gebruik het maar om het makkelijk uit te leggen ) Het echo commando doet hetzelfde als "write" , "print" etc etc statements van andere programmeertalen. namelijk het uitschrijven van data. In dit geval schrijven we de waarde van de variabele entryName uit in de html code.

    Bijvoorbeeld:
    HTML-code:
    <html>
    <head>
       <title>Test</title>
    </head>
    <body>
    <?php
    $entryName = "Test";
    echo "<p>".$entryName."</p>";
    ?>
    </body>
    </head>
    Is hetzelfde als je dit zou doen (zonder PHP);

    HTML-code:
    <html>
    <head>
       <title>Test</title>
    </head>
    <body>
    <p>Test</p>
    </body>
    </head>
    Mijn script gaat dus via een while lus, alle bestandsnamen uit een map halen. En elke bestandsnaam, 1 voor 1, in de variabele entryName stoppen. En die wordt dan elke keer uitgeschreven in dit geval. Dus dan krijg je een lijst van bestandsnamen.

    Dit is een volledig script;

    Code:
    <html>
    <head>
    	<title> Test </title>
    </head>
    <body>
    <?php
    
    	function showdirs($map = "./", $return = array())
    	{
    		if(@$dir = opendir($map))
    		{
    			while (false !== ($file = readdir($dir)))
    			{
    				if ($file != "." && $file != "..")
    				{
    					if(is_dir($map . $file))
    					{
    						$return[] = $file;
    						$return = showdirs($map . $file . "/", $return);
    					}
    				}
    			}
    		}
    		@closedir($dir);
    		return $return;
    	} 
    
    	function file_extension($filename)
    	{
    		return end(explode(".", $filename));
    	}
    
    
    	function RemoveExtension($strName)  
    	{  
         		$ext = strrchr($strName, '.');  
    
         		if($ext !== false)  
         		{  
             		$strName = substr($strName, 0, -strlen($ext));  
         		}  
         		return $strName;  
    	}  
    
    	$dirinhoud = showdirs('./uploads/');
    	foreach($dirinhoud as $dir)
    	{
    		$myDirectory = opendir("./uploads/".$dir."/");
    		echo "<h3>".$dir."</h3>";
    		while($entryName = readdir($myDirectory)) {
    			$dirArray[] = $entryName;
    			$naam = file_extension($entryName);
    			if(strlen($naam) > 1)
    			{
    				echo "<a href=\"download.php?download_file=".$dir."/".$entryName."\" >".$entryName."</a><br />";
    			}
    		}
    	}
    ?>
    </body>
    </html>
    Deze code sla je op als "test.php" bijvoorbeeld :P.

    Dan maak je een tweedde bestand en dat noem je "download.php" en daar steek je deze code in:

    Code:
    <?php
    $path = $_SERVER['DOCUMENT_ROOT']."/uploads/";
    $fullPath = $path.$_GET['download_file'];
    
    if ($fd = fopen ($fullPath, "r")) {
        $fsize = filesize($fullPath);
        $path_parts = pathinfo($fullPath);
        $ext = strtolower($path_parts["extension"]); 
        switch ($ext) {
            case "pdf":
            header("Content-type: application/pdf"); 
            header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
            break;
            default;
            header("Content-type: application/octet-stream");
            header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
        }
        header("Content-length: $fsize");
        header("Cache-control: private"); 
        while(!feof($fd)) {
            $buffer = fread($fd, 2048);
            echo $buffer;
        }
    }
    fclose ($fd);
    exit;
    ?>
    Beide files plaats je dan in je "root" directory. Op een webserver is dat bijvoorbeeld HTTPdocs. En onder die root directory, maak je een subfolder (een map dus) aan genaamd "uploads".

    En in die map moet je dan een submap plaatsen, bijvoorbeeld "videos". En in die submap moet je dan je videos plaatsen. Je echte bestanden dus.

    Bestanden die rechtstreeks onder "uploads" staan, worden denk ik niet gezien als "bestand". Ze moeten dus effectief in een submap van "uploads" staan. Bijvoorbeeld videos, fotos, ...

    Uiteraard kan je dat aanpassen in het script indien nodig .

    PS: Denk eraan dat de server uiteraard PHP moet ondersteunen. Je kan dat dus niet lokaal testen op je PC zonder server. WAMP server (gratis) kan je bijvoorbeeld wel gebruiken om mijn script te testen.

    PS: Het is inderdaad niet de beste oplossing . Maar het werkt op mijn website, dus normaal gezien ook bij u.

    Voorbeeld; http://www.latemar.be/test.php
    (Bij muziek en videofiles moet je waarschijnlijk rechts klikken en "doel opslaan als " kiezen. Anders zal hij die niet downloaden, maar streamen naar je mediaplayer ofzo .)

    Mvg,
    Dave
    Laatst gewijzigd door ultddave; 12 January 2010 om 21:12
    "Friendship. It's the hardest thing in the world to explain. It's not something you learn in school. But if you haven't learned the meaning of friendship, you really haven't learned anything." ~ Muhammad Ali

  10. #10
    Erelid   butskristof's schermafbeelding
    Geregistreerd
    21 September 2007
    Locatie
    Wiekevorst (Heist-op-den-Berg)
    Berichten
    903
    Bedankjes
    317
    Bedankt
    847 keer in 420 posts
    @ultddave;
    Hartelijk bedankt!
    Na nog wat geprobeerd te hebben is het me gelukt om alles te laten werken!
    Heel erg bedankt!
    Mvg,
    Kristof.

  11. De volgende gebruiker bedankt butskristof voor deze nuttige post:

    ultddave (12 January 2010)

Discussie informatie

Users Browsing this Thread

Momenteel bekijken 1 gebruikers deze discussie. (0 leden en 1 gasten)

Soortgelijke discussies

  1. windows temp directory
    Door g_man in forum Windows
    Reacties: 4
    Laatste bericht: 2 January 2007, 12:08

Favorieten/bladwijzers

Favorieten/bladwijzers

Regels voor berichten

  • Je mag geen nieuwe discussies starten
  • Je mag niet reageren op berichten
  • Je mag geen bijlagen versturen
  • Je mag niet je berichten bewerken
  •