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
Favorieten/bladwijzers