Directory listing
Ik heb hier een script welke een lijst genereerd uit een directory met link er naar toe.
Wat ik niet voor elkaar krijg is dat ik ALLEEN de directories wil zien met links maar GEEN bestanden in de directory.
Dit omdat ik een index.php geplaatst heb waarin staat dat als met de directory wilt bekijken men meteen terug gestuurd wordt naar de home
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?
function getFiles($path) {
//Function takes a path, and returns a numerically indexed array of associative arrays containing file information,
//sorted by the file name (case insensitive). If two files are identical when compared without case, they will sort
//relative to each other in the order presented by readdir()
$files = array();
$fileNames = array();
$i = 0;
if (is_dir($path)) {
if ($dh = opendir($path)) {
while (($file = readdir($dh)) !== false) {
if ($file == "." || $file == "..") continue;
$fullpath = $path . "/" . $file;
$fkey = strtolower($file);
while (array_key_exists($fkey,$fileNames)) $fkey .= " ";
$a = stat($fullpath);
$files[$fkey]['size'] = $a['size'];
if ($a['size'] == 0) $files[$fkey]['sizetext'] = "-";
else if ($a['size'] > 1024) $files[$fkey]['sizetext'] = (ceil($a['size']/1024*100)/100) . " K";
else if ($a['size'] > 1024*1024) $files[$fkey]['sizetext'] = (ceil($a['size']/(1024*1024)*100)/100) . " Mb";
else $files[$fkey]['sizetext'] = $a['size'] . " bytes";
$files[$fkey]['name'] = $file;
$files[$fkey]['type'] = filetype($fullpath);
$fileNames[$i++] = $fkey;
}
closedir($dh);
} else die ("Cannot open directory: $path");
} else die ("Path is not a directory: $path");
sort($fileNames,SORT_STRING);
$sortedFiles = array();
$i = 0;
foreach($fileNames as $f) $sortedFiles[$i++] = $files[$f];
return $sortedFiles;
}
$files = getFiles("./fotoboeken");
foreach ($files as $file) print "<li><a href=\"./fotoboeken/$file[name]/index.html\">$file[name]</a></li>\n";
?>
function getFiles($path) {
//Function takes a path, and returns a numerically indexed array of associative arrays containing file information,
//sorted by the file name (case insensitive). If two files are identical when compared without case, they will sort
//relative to each other in the order presented by readdir()
$files = array();
$fileNames = array();
$i = 0;
if (is_dir($path)) {
if ($dh = opendir($path)) {
while (($file = readdir($dh)) !== false) {
if ($file == "." || $file == "..") continue;
$fullpath = $path . "/" . $file;
$fkey = strtolower($file);
while (array_key_exists($fkey,$fileNames)) $fkey .= " ";
$a = stat($fullpath);
$files[$fkey]['size'] = $a['size'];
if ($a['size'] == 0) $files[$fkey]['sizetext'] = "-";
else if ($a['size'] > 1024) $files[$fkey]['sizetext'] = (ceil($a['size']/1024*100)/100) . " K";
else if ($a['size'] > 1024*1024) $files[$fkey]['sizetext'] = (ceil($a['size']/(1024*1024)*100)/100) . " Mb";
else $files[$fkey]['sizetext'] = $a['size'] . " bytes";
$files[$fkey]['name'] = $file;
$files[$fkey]['type'] = filetype($fullpath);
$fileNames[$i++] = $fkey;
}
closedir($dh);
} else die ("Cannot open directory: $path");
} else die ("Path is not a directory: $path");
sort($fileNames,SORT_STRING);
$sortedFiles = array();
$i = 0;
foreach($fileNames as $f) $sortedFiles[$i++] = $files[$f];
return $sortedFiles;
}
$files = getFiles("./fotoboeken");
foreach ($files as $file) print "<li><a href=\"./fotoboeken/$file[name]/index.html\">$file[name]</a></li>\n";
?>
Kan iemand me helpen achterhalen waar de fout in het script zit?
Stef
Let op: dubbel c, dubbel s, puntje ervoor, geen extensie ;-)
Daarin zet je dit:
Code (php)
1
2
3
4
2
3
4
# eigen errordocument voor mappen waar niemand in mag
ErrorDocument 403 /forbidden.php
# alle mappen op slot zetten
Options -Indexes
ErrorDocument 403 /forbidden.php
# alle mappen op slot zetten
Options -Indexes
In het bestand forbidden.php zet je dan in de head sectie deze meta tag:
<meta http-equiv="refresh" content="1;URL=index.php">
dan worden mensen automatisch teruggeleid naar je homepage.
Edit:
kleine aanvulling gedaan
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Ik heb de website nu ook op een andere server draaien voor test. Maar had het ook geprobeerd op de productie server maar werkte ook niet. Het heeft emt de locatie te maken volgens mij die ik niet weet te vinden.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="refresh" content="0;URL=http://www.jouwsite.nl/index.php" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Forbidden</title>
</head>
<body>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="refresh" content="0;URL=http://www.jouwsite.nl/index.php" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Forbidden</title>
</head>
<body>
</body>
</html>
Je hebt helemaal gelijk, maar in dit geval gaat het niet om zeer geheime info dus beveiliging is niet van mega grote orde
Oke, dan zou ik gewoon de oplossing uit mijn vorige post proberen. Let even op dat je URL=http://www.jouwsite.nl/index.php aanpast naar jouw situatie.
Maar dan nog leest mijn script de bestanden uit. Ik wil alleen maar de directories.
Welk stuk moet ik uit mijn script verwijderen?
Heb je PHP5? of PHP4?
Volgens mij is het php4 ik weet niet wat ze op de server van de klant hebben draaien
upload even een bestandje naar je server met de volgende inhoud
en benader het via de browser. Nu kan je hier achterhalen welke serverinstellingen gebruikt worden
PHP Version 4.4.7
Edit:
PHP4 heeft functies zoals is_file en is_dir, maar die werken niet echt betrouwbaar
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
De er is geen optie om mijn script aan te passen?