Questo breve script che segue, consente di simulare la mod_autoindex di Apache che consiste, per chi non lo sapesse, nell'elencare tutti i file e le directory di una determinata cartella se essa non possiede un file index.
Lo script è pensato e creato da Michelangelo Scotto (Miki92) per gli utenti di AlterVista.org in quanto su questo hosting la mod_autoindex è disattivata.
Questo script richiede PHP 4 o superiore e la possibilità di personalizzare la pagina di errore 404 (opzionale).
Il codice che noi andremmo ad utilizzare è il seguente:
<?php
/* PHP's Apache Directory Simulator è uno script by Michelangelo Scotto (http://miki92.altervista.org/ - http://messenworld.altervista.org/
- http://micscotto.altervista.org/), questo script permette di simulare le Directory Index ove è stato impedito per una modifica al file
httpd.config di Apache. Questo script è stato pensato ed adattato per la community di AlterVista.org: progetto non ufficiale di AlterVista.
Il progetto è pubblicato sotto una Licenza Creative Commons (http://creativecommons.org/licenses/by-nc-nd/3.0/deed.it), per aggiornamenti,
release e news sul seguente script visitare http://miki92.altervista.org/php-apache-dir-simulator/ | Copyright © 2009 Michelangelo Scotto. */
// Inizio Configurazione Script -->
// $serversignature = $_SERVER['SERVER_SOFTWARE']." ".phpversion()." Server at ".$_SERVER['SERVER_NAME']." Port ".$_SERVER['SERVER_PORT'];
$serversignature = "Apache/2.2.8 (Win32) PHP/5.2.6 Server at localhost:8080";
$qsm = "dircwd"; // Query String, quello che sarà visibile nell'URL per esplorare le cartelle, default: dircwd => /?dircwd=directory_da_esporare/
$homeserver = str_replace("\\","/",getcwd()."/"); // Path Assoluta di dove si trova questo script
$servericons = "/icone/"; // Path di dove sono collocate le icone da utilizzare
$exticons = "gif"; // Estensione delle icone
$nodirfil = array(basename($_SERVER['PHP_SELF']),"icons"); // Array con le directory / files da non indicizzare
// <-- Fine Configurazione Script
$cwd = strtr(strip_tags(str_replace("\\","/",base_decode($_GET[$qsm]))),array("../"=>"","./"=>"",$homeserver=>""," "=>""));
$titolo = "PADS: PHP's Apache Directory Simulator";
$parent = false;
if(empty($cwd)){ $cmd = "/*"; $titolo = "Index Of /"; }else{ $cmd = $cwd."/*"; $titolo = "Index Of /".$cwd; $parent = true; }
//echo "<fieldset style=\"width:39%\"><legend>DEBUG</legend>CWD: ".$cwd."<br />CMD: ".$cmd."<br />HOMESERV: ".$homeserver."<br />HOME.CWD: ".$homeserver.$cwd."<br />GET: ".$_GET[$qsm]."</fieldset>";
if(!file_exists($homeserver.$cwd)){ exit("Attenzione, directory non trovata!"); }
$expparent = @explode($cwd,$homeserver.$cwd);
$parentdirectory = "?".$qsm."=".base64_encode($expparent[0]);
$glob = glob($homeserver.ltrim($cmd,"/"));
if(!$glob){ exit("Si è verificato un errore durante la lettura delle directory."); }
function File2Icon($filename){ global $servericons, $exticons; $expic = explode(".",basename($filename)); $icona = $servericons.$expic[1].".".$exticons; if(file_exists($icona)){ return $icona;
}else{ return $servericons."generic.".$exticons; }}
function PADS(){ global $homeserver, $servericons, $qsm, $cmd, $glob, $cwd, $nodirfil;
foreach($glob as $filegen){
if(is_dir($filegen)){ $size = "-"; $icon = $servericons."dir.gif"; $alticon = "DIR"; $href = "?".$qsm."=".base64_encode($filegen); }else{ clearstatcache(); $size = filesize($filegen); if($size < 1000000){
$size = ceil($size/1024). " KB"; }else{ $size = round(($size/1024)/1024,1)." MB"; } $icon = File2Icon($filegen); $alticon = "ICO"; $href = $cwd."/".basename($filegen); }
if(!in_array(basename($filegen),$nodirfil)){
echo '<tr><td valign="top"><img src="'.$icon.'" alt="['.$alticon.']" /></td><td><a href="'.$href.'">'.basename($filegen).'</a></td><td align="right">'.date("d-M-Y H:i",filemtime($filegen)).'</td>';
echo '<td align="right">'.$size.'</td></tr>';
}}} ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><?php echo $titolo; ?></title>
<style type="text/css">
a:link, a:visited{
color:#0000FF;
text-decoration:none;
}
a:hover{
color:#FF0000;
text-decoration:underline;
}
h1{
margin-bottom:0px;
margin-top:0px;
}
#serversignature{
font-family:Georgia, "Trebuchet MS", Arial, Helvetica, sans-serif;
font-size:10pt;
}
</style>
<!-- PHP's Apache Directory Simulator by Miki92 -->
</head>
<body>
<h1><?php echo $titolo; ?></h1>
<table><tr><th><img src="<?php echo $servericons; ?>blank.gif" alt="[ICO]" /></th><th>Nome File</th><th>Ultima modifica</th><th>Dimensione</th></tr><tr><th colspan="5">
<hr /></th></tr>
<?php if($parent){ ?><tr><td valign="top"><img src="<?php echo $servericons; ?>back.gif" alt="[DIR]" /></td>
<td><a href="<?php echo $parentdirectory; ?>">Torna Indietro</a></td><td> </td><td align="right"> - </td></tr>
<?php } PADS(); ?>
<tr><th colspan="5"><hr /></th></tr></table>
<span id="serversignature"><?php echo $serversignature; ?></span>
</body>
</html>
Attualmente lo script simula al buon 90% la mod_autoindex di Apache, ciò che manca è poco e verrà aggiunto nella prossima versione dello script pertanto vi consigliamo
di iscrivervi ai nostri feed rss oppure di tornare periodicamente su questa pagina. Nella prossima release si prevede che sarà possibile personalizzare lo script in modo maggiorato
ad esempio potendo far scegliere all'utente che visualizza lo script come ordinare i file (elenco by: nome, data ultima modifica, dimensione file/cartelle).
Visita questa pagina per capire come personalizzare questo script o per ricevere
qualche idea su come utilizzarlo.
Demo Script - Visualizza la demo dello script.
Demo Script con PADS School MOD - Esempio funzionante, con una MOD per la scuola.