<?php
/*****************************************************************************\
* myExplorer
*
http://www.bmitt.com/files/webauthoring/php/
* -------------------------------------------------------------------------
* written by : Bernhard Mitterer @:
admin@bmitt.com
* last modified : 2004-11-25
*****************************************************************************
/*****************************************************************************\
* Configuration (adapt this section to your needs) *
\*****************************************************************************/
$su = false;
# paths
$rootDir = 'CMS_VALUE[1]';
/*if ($idcat == 22)
$indexDir = 'office';
if ($idcat == 23)
$indexDir = 'screensaver';
if ($idcat == 24)
$indexDir = 'wallpaper';
*/
$printCwd = false;
$printStat = CMS_VALUE[2];
# labels for tableheader
$hPic = ' ';
$hName = 'CMS_VALUE[4]';
$hSize = 'CMS_VALUE[5]';
$hType = 'Typ';
$hLastMod = 'CMS_VALUE[6]';
# show attributes
$showPic = CMS_VALUE[3];
$showName = true; # must always be 'true'
$showSize = true;
$showType = false;
$showLastMod = true;
# pic-names
$picUp = 'images/folderup.gif';
$picFolder = 'images/folder.gif';
$picFile = true;
# filter
$showFiles = '*.zip,*.rar,*.pdf,*.jpg,*.gif,*.txt';
$hideFiles = '.*,index*,*.php';
$showFolders = '*';
$hideFolders = '.*';
# mode
$xAction = 0;
# filetypes
$picIcons = array(
'.*' => 'cms/images/file.gif',
'.bz2' => 'cms/images/rarfile.gif',
'.c' => 'cms/images/cfile.gif',
'.cpp' => 'cms/images/cppfile.gif',
'.doc' => 'cms/images/docfile.gif',
'.exe' => 'cms/images/exefile.gif',
'.h' => 'cms/images/hfile.gif',
'.htm' => 'cms/images/htmfile.gif',
'.html' => 'cms/images/htmfile.gif',
'.gif' => 'cms/images/imgfile.gif',
'.gz' => 'cms/images/zipfile.gif',
'.jpg' => 'cms/images/imgfile.gif',
'.js' => 'cms/images/jsfile.gif',
'.m' => 'cms/images/mfile.gif',
'.mp3' => 'cms/images/mpgfile.gif',
'.mpg' => 'cms/images/mpgfile.gif',
'.pdf' => 'cms/images/pdffile.gif',
'.png' => 'cms/images/imgfile.gif',
'.ppt' => 'cms/images/pptfile.gif',
'.rar' => 'cms/images/rarfile.gif',
'.swf' => 'cms/images/swffile.gif',
'.txt' => 'cms/images/txtfile.gif',
'.xls' => 'cms/images/xlsfile.gif',
'.zip' => 'cms/images/zipfile.gif',
);
/*****************************************************************************\
* prepare variables *
\*****************************************************************************/
// Check Path Formats ---------------------------------------------------------
$rootDir = formatDir($rootDir,true,true);
$indexDir = formatDir($indexDir);
$referer = addLinker($referer);
// ----------------------------------------------------------------------------
// Handle (given) Directory ---------------------------------------------------
# initialize
$dir = $indexDir;
# make lokal variable from HTTP_GET_VARS
if(isset($_GET['dir']))
$dir = formatDir(rawParam('dir'));
# check given directory if it is valid/allowed
if( !isValidDir("$rootDir$dir") )
$dir = $indexDir;
# real path ($dir is just fake [relative to $rootDir] for display)
$ldir = formatDir("$rootDir$dir",true);
// ----------------------------------------------------------------------------
// Get Directory Content ------------------------------------------------------
$files = array();
$folders = array();
# unfiltered directory content
getDirContent( $ldir );
# filter (and sort) arrays
$files = filterArray( $files, $showFiles, $hideFiles );
$folders = filterArray( $folders, $showFolders, '.,..,'.$hideFolders );
// ----------------------------------------------------------------------------
/*****************************************************************************\
* Output (print table) *
\*****************************************************************************/
echo '<table cellspacing="3" class="expl" summary="Content of /'.htmlentities($dir).'">',"\n";
// print current directory ----------------------------------------------------
if($printCwd)
{
echo ' <tr class="path">',"\n";
echo ' <td colspan="'.($showPic+$showName+$showSize+$showType+$showLastMod).'"><em>/'.htmlentities($dir).'</em></td>',"\n";
echo ' </tr>',"\n";
}
// ----------------------------------------------------------------------------
// draw tableheader -----------------------------------------------------------
echo ' <tr class="hExpl">',"\n";
if($showPic)
echo ' <td class="hPic"> '.$hPic.' </td>',"\n";
if($showName)
echo ' <td class="hName"> '.$hName.' </td>',"\n";
if($showSize)
echo ' <td class="hSize"> '.$hSize.' </td>',"\n";
if($showType)
echo ' <td class="hType"> '.$hType.' </td>',"\n";
if($showLastMod)
echo ' <td class="hLastMod"> '.$hLastMod.' </td>',"\n";
echo ' </tr>',"\n";
// ----------------------------------------------------------------------------
// handle up-button -----------------------------------------------------------
if( $su && (!$dir || (substr($dir,-2)=='..')) )
$up = formatDir($dir,true).'..';
else
$up = substr($dir,0,strrpos($dir,'/'));
#if( $su || ($dir && ($up!==false)) )
#{
# echo ' <tr class="folder">',"\n";
# if($showPic)
# echo ' <td class="pic"><a href="'.$referer.'dir='.$up.'"><img src="'.$picUp.'" alt="up" /></a></td>',"\n";
# if($showName)
# echo ' <td class="name"><a href="'.$referer.'dir='.$up.'"><em>..</em></a></td>',"\n";
# if($showSize)
# echo ' <td class="size"> - </td>',"\n";
# if($showType)
# echo ' <td class="type"> dir </td>',"\n";
# if($showLastMod)
# echo ' <td class="lastmod"> - </td>',"\n";
# echo ' </tr>',"\n";
#}
// ----------------------------------------------------------------------------
// print directories ----------------------------------------------------------
foreach ($folders as $folder)
{
echo ' <tr class="folder">',"\n";
if($showPic)
echo ' <td class="pic"><a href="front_content.php?idart='.$idart.'&lang='.$lang.'&client='.$client.'&'.$referer.'idcat='.$idcat.'&dir='.formatDir($dir,true).$folder.'"><img src="'.$picFolder.'" alt="'.htmlentities($folder).'" /></a></td>',"\n";
if($showName)
echo ' <td class="name"><a href="front_content.php?idart='.$idart.'&lang='.$lang.'&client='.$client.'&'.$referer.'idcat='.$idcat.'&dir='.formatDir($dir,true).$folder.'"><em>'.htmlentities($folder).'</em></a></td>',"\n";
if($showSize)
echo ' <td class="size"> - </td>',"\n";
if($showType)
echo ' <td class="type"> '.filetype("$ldir$folder").' </td>',"\n";
if($showLastMod)
echo ' <td class="lastmod"> - </td>',"\n";
echo ' </tr>',"\n";
}
// ----------------------------------------------------------------------------
// print files ----------------------------------------------------------------
foreach ($files as $file)
{
$type = filetype("$ldir$file"); // get 'type of file'
$modDate = filemtime("$ldir$file"); // get 'last modified date' of file
#$modDate = date('Y-m-d',$modDate); // format date in ISO-Style
$modDate = date('d.m.Y',$modDate); // format date in ISO-Style
$size = filesize("$ldir$file"); // get 'size of file' in bytes
$dirsize += $size; // total filesize in current dir
$size = ceil($size/1024); // convert from byte to kilobyte
$size = "$size kb"; // add unit
echo ' <tr class="file">',"\n";
if($showPic)
echo ' <td class="pic"><a href="'.makeLink("$ldir$file").'"><img src="'.getIcon($file).'" alt="'.htmlentities($file).'" /></a></td>',"\n";
if($showName)
echo ' <td class="name"><a href="'.makeLink("$ldir$file").'">'.htmlentities($file).'</a></td>',"\n";
if($showSize)
echo ' <td class="size"> '.$size.' </td>',"\n";
if($showType)
echo ' <td class="type"> '.$type.' </td>',"\n";
if($showLastMod)
echo ' <td class="lastmod"> '.$modDate.' </td>',"\n";
echo ' </tr>',"\n";
}
// ----------------------------------------------------------------------------
// print statistics -----------------------------------------------------------
if($printStat)
{
echo ' <tr class="stats">',"\n";
echo ' <td colspan="'.($showPic+$showName+$showSize+$showType+$showLastMod).'"> <em>'.count($folders).' Verzeichnis(se) | '.count($files).' Datei(en) | '.ceil($dirsize/1024).' kByte total</em> </td>',"\n";
echo ' </tr>',"\n";
}
// ----------------------------------------------------------------------------
echo '</table>',"\n";
/*****************************************************************************\
* Functions *
\*****************************************************************************/
// ----------------------------------------------------------------------------
// getDirContent() fills, filter and sort Arrays of files and folders
function getDirContent($dir)
{
global $files, $folders;
# fill arrays
$handle = @opendir($dir);
while( $file = readdir($handle) ) {
if( is_dir("$dir/$file") )
$folders[] = $file;
elseif( is_file("$dir/$file") )
$files[] = $file;
}
@closedir($handle);
}
// ----------------------------------------------------------------------------
// addLinker() adds '?' or '&' to the referer
function addLinker($referer)
{
// assume that last char is not '?' or '&'
return strchr($referer,'?') ? "$referer&" : "$referer?";
}
// ----------------------------------------------------------------------------
// formatDir() skip trailing and leading "/" in given $dir-string
// add
function formatDir($dir, $trailing=false, $leading=false)
{
$dir = trim($dir,' /');
if( $trailing && $dir )
$dir = "$dir/";
if( $leading ) #&& ($dir[0]!='/') )
$dir = "./$dir";
return $dir;
}
// ----------------------------------------------------------------------------
// filterArray() make regular expression from $filter-string
function filterArray( $array, $allow, $hide )
{
$allow = makeRegex($allow);
$hide = makeRegex($hide);
$tmp = array();
foreach( $array as $val )
if( ereg($allow,$val) && !ereg($hide,$val) )
$tmp[] = $val;
natcasesort( $tmp );
return $tmp;
}
// ----------------------------------------------------------------------------
// makeRegex() make regular expression from $filter-string
function makeRegex( $filter )
{
$regex = str_replace('.', '\.', $filter);
$regex = str_replace('*', '.+', $regex);
$regex = str_replace(',', '$|^', $regex);
return "^$regex$";
}
// ----------------------------------------------------------------------------
// isValidDir() return true if directory is valid/allowed
function isValidDir($dir)
{
global $su;
$strErr = "<p>Requested Directory Not Found</p>\n";
$strErr .= "<\/body></html>"; #close open tags
// check if folder exists (when manipulated manually)
is_dir($dir) or die($strErr);
// prevent cd with relative path '../'
return $su ? true : !(strpos($dir,'..')!==false);
}
// ----------------------------------------------------------------------------
// rawParam()
function rawParam( $param )
{
return ini_get('magic_quotes_gpc') ? stripslashes($_GET[$param]) : $_GET[$param];
}
// ----------------------------------------------------------------------------
// makeLink() return target of click
function makeLink( $target )
{
global $xAction, $xFilename;
$target = str_replace('%2F', '/', rawurlencode($target));
return $xAction ? "$xFilename?file=$target" : $target;
}
// ----------------------------------------------------------------------------
// getIcon() return icon-image based on filename extension
function getIcon( $filename )
{
global $picIcons, $picFile;
// extract filename extension
$ext = strtolower( strrchr( $filename, '.' ) );
// return default image if $picFile = false
// or extension is unknown
if( !$picFile || !array_key_exists($ext,$picIcons) )
return $picIcons['.*'];
// return matching image
return $picIcons[$ext];
}
?>