Rekurzív könyvtár-lista

Az alábbi példa arra szolgál, hogy rekurzívan irassunk ki egy könyvtárat úgy, hogy ha egy mappában van index.* fájl, akkor a mappa maga legyen a link. Egyébént pedig minden fájl link lesz, azaz letölthetővé válik.

Íme a kód:


<?php
ini_set("display_errors","off");

//kiírja rekurzívan a mappákat (ha van index bennük, akkor linkként jelzi ki)
function map_list($dir = "./") {
$dh = opendir($dir);
// Vesszük sorban a fájlokat
$files = array();
$hasIndex = FALSE;
while (false !== ($filename = readdir($dh))) {
if (substr($filename,0,1) != ".") // and substr($filename,0,6)!="index."
$files[] = $filename;
if ($dir != "./" and substr($filename,0,6) == "index.")
$hasIndex = TRUE;
};
// Ha van indexe, akkor a mappát irjuk ki linkként
if ($hasIndex) {
return "<li><b><a href=\"$dir\">".substr($dir, 2)."</a></b>\n";
};
$html = "<li><b>".substr($dir, 2)."</b>\n";
$html.= "<ul>\n";
sort($files);
// Végig megyünk a fájlokon,
foreach ($files as $file) {
$fullname = $dir.$file;
if (is_dir($fullname)) {
// Ha nincs indexe, akkor rekurzívan kiiratjuk mint mappát
$html .= map_list($fullname."/");
} //ha fájl, akkor kiírjuk
elseif (is_file($fullname) and substr($file,0,6) != "index.") {
$html .= "<li><b><a href=\"$fullname\">$file</a></b>\n";
};
};
$html .= "</ul>";
return $html;
};
?>

<html>
<head>
<title>Letöltés</title>
<meta http-equiv="generator" content="PHP Designer 2005" />
</head>
<body bgcolor="#DDDDDD" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<h1>Letölthető anyagok</h1>
<?php echo map_list();?>
<br/>
<hr color="orange"/>
</body>
</html>