<?
####################################################################################################################################
####################################[[[ SCROLL TO BOTTOM OF THIS FILE TO CHANGE THE TEMPLATE ]]]####################################
####################################################################################################################################
/**
* PHPDL - PHP Directory Lister
*
* {@link
http://greg-j.com/some-url PHDL} is an all-in-one directory listing script.
* What sets it apart from other scripts of similar nature is that it includes all
* its resources in itself in base64 format, allowing PHPDL to deliver an asthetic
* and interactive experience without the need for any external files.
*
* @name PHPDL
* @version 2.0
* @author Greg Johnson <greg@greg-j.com>
* @link
http://greg-j.com/some-url* @license
http://creativecommons.org/licenses/by-sa/3.0/us/*/
/** ---------------------------------------------------------------------------------------------------------------------[ SETTINGS ]
*
* @var $ext_filter Excludes file types from being downloaded. If you have PHPDL
* in a directory with other php files you do not want people to
* be able to see the source of, do not change this.
*
* Adding the value '*' will disable the feature altogether.
*
* @var $sort Set the default sorting properties. The first array sets the
* initial sort column and order whereas the second array sets
* the sort column and order for items that match the first array's
* paramters
*
* @var $vWidth Width of the popup video player
* @var $vHeight Height of the popup video player
*/
$ext_filter = array('php', 'php4', 'php5');
$sort = array(
array('key'=>'mtime', 'sort'=>'desc'),
array('key'=>'lname', 'sort'=>'desc'),
array('key'=>'size', 'sort'=>'desc')
);
$vWidth = '800';
$vHeight = '450';
/** ---------------------------------------------------------------------------------------------------------------[ EMBEDED IMAGES ]
* @desc Are we requesting a file type icon? If so, deliver the appropriate
* image for the file extension being requested.
*/
if(isset($_GET['image']))
{
// Accomidate uppercase & lowercase file extensions
$image = strtolower($_GET['image']);
// Set filetypes (most of this list is from
http://www.filezed.com)
$filetype = array(
'text' => array('doc', 'docx', 'txt', 'rtf', 'odf', 'text', 'nfo'),
'audio' => array('aac', 'mp3', 'wav', 'wma', 'm4p'),
'graphic' => array('ai', 'bmp', 'eps', 'gif', 'ico', 'jpg', 'jpeg', 'png', 'psd', 'psp', 'raw', 'tga', 'tif', 'tiff'),
'video' => array('mv4', 'bup', 'mkv', 'ifo', 'flv', 'vob', '3g2', 'bik', 'xvid', 'divx', 'wmv', 'avi', '3gp', 'mp4', 'mov', '3gpp', '3gp2', 'swf', 'mpg', 'mpeg'),
'archive' => array('7z', 'dmg', 'rar', 'sit', 'zip', 'bzip', 'gz', 'tar'),
'app' => array('exe', 'msi', 'mse', 'bat'),
'script' => array('js', 'html', 'htm', 'xhtml', 'jsp', 'asp', 'aspx', 'php', 'xml', 'css')
);
// Set the mimetype and cache the image for a year so we don't have to call them again.
header("Content-type: image/png");
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 60 * 60 *24 * 365) . ' GMT');
// Deliver the correct image ...
if($image == '.') echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAk1JREFUeNqMU01oE0EU/mY2u22qMSE2UaFKiwdLD0WE+nPx6MFDQfGmBw9evSmKeBE8C/XixZvowR+QXlQQb14KaiAnY9OKjU0Q11hSN012Z8b3JrtJWhBc+JidN+/75nvv7YrKggQ/QuAiLYfwf883Y/CYX1ImjlBgcvLC/bvd5hrC1g+4mSK87ASt+yGkM6A6DioPz91Otiml+0fS230A7tg+GGgSqWPLX8Vm9T1yM/PkUPScui6II/skFoghtYqgux2Ybgh3tIDM5Cm021uoN36h+bsFe07g3IQ37MAxSoFhS7J9EWi1/mAsDLFJyKRdSIoRp19TKtohwDf07UmJIOhgJArtXtFqSIA4DvWM+0YCaiCgVWiTBgoCId2sYlF7RjHisIOjJFCS7CBGStOJjqIhKBKglUQSGNrP3YxuUP4ltdOBiZtkL6dxtfwGCXBZSQldGqnARruduNgmQA7olrgErr/07hnGD58kYgTPc2wJkr6JZhCwQMrmfVoFb2yAbasY/B5ycCRjRXO7XLsawpWVvTafefL6I42PJNKJhNebcxgjQsQ90VEPcXlaK/h+YPOZx19U+tYTnd8IsIfnomnIOv4eNDXJdbxtkBC49ir7/HUJL4iX5jpGCfkPK2gU374sH5k9fjCbL+YEidW+fvlZKt8rc63jGXSSZi030HjwRlWYywJNxud1c/VYdWm+vrx0JleYmJ6anpsiM9U7T9Xl0zPSP39C9AUod9D54X+ULC/SfBfXv9dma2u1s1qjQGGf0PnXf/1XgAEADr97lE6is6IAAAAASUVORK5CYII=');
elseif($image == 'pdf') echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHhSURBVDjLjZPLSxtRFIfVZRdWi0oFBf+BrhRx5dKVYKG4tLhRqlgXPmIVJQiC60JCCZYqFHQh7rrQlUK7aVUUfCBRG5RkJpNkkswrM5NEf73n6gxpHujAB/fOvefjnHM5VQCqCPa1MNoZnU/Qxqhx4woE7ZZlpXO53F0+n0c52Dl8Pt/nQkmhoJOCdUWBsvQJ2u4ODMOAwvapVAqSJHGJKIrw+/2uxAmuJgFdMDUVincSxvEBTNOEpmlIp9OIxWJckMlkoOs6AoHAg6RYYNs2kp4RqOvfuIACVFVFPB4vKYn3pFjAykDSOwVta52vqW6nlEQiwTMRBKGygIh9GEDCMwZH6EgoE+qHLMuVBdbfKwjv3yE6Ogjz/PQ/CZVDPSFRRYE4/RHy1y8wry8RGWGSqyC/nM1meX9IQpQV2JKIUH8vrEgYmeAFwuPDCHa9QehtD26HBhCZnYC8ucGzKSsIL8wgsjiH1PYPxL+vQvm5B/3sBMLyIm7GhhCe90BaWykV/Gp+VR9oqPVe9vfBTsruM1HtBKVPmFIUNusBrV3B4ev6bsbyXlPdkbr/u+StHUkxruBPY+0KY8f38oWX/byvNAdluHNLeOxDB+uyQQfPCWZ3NT69BYJWkjxjnB1o9Fv/ASQ5s+ABz8i2AAAAAElFTkSuQmCC');
elseif($image == 'download') echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAftJREFUeNqkU0trE1EUPnceIWbRTMe0625ciZDfIM1KKKm/oP0JXXYjxY1L+w+s4EaoEAQpuFE3IqJSWhDpooxYiAvtI5kkdzL34TlnOpNJZ+lhDvd1zne/8825wloL/2NePnnbe9UOW0vdhaAZLTSDSAhnLnAyGQej4bDdP/sVra6t7+X7ghi82X+5EYbhM6M13Ll7D8LlZUjGY6CzCY6e74M1Bg4/f4L6rQaMRvFeZ219kwD4mlqt9jRNU1AIoDGwbB8/vIOjr194rvE8Hg7A87yN/RfPuzMA3w/o9tzLdjUYQBzHBQCxmiYJjtAuNMgPSE9iMmeohcSE6TRhho4QYIyFIQIXAEopXhDI6ckPnruug4EG7nc6vP5+fMRrhU5xeakZANHGTYOepgqOv2HNlj7LSeY6iYxut9Yw61kJSnMwfcaa68AsKEtmfkUygSmtZgAykRicHQissbm4CHMNhvPzv3+wVM0XcAm6VML5xQUn3m4twYPuQ6g3GpWOk9gPB6978Lvfz9ipOQZTVreFDSQcAaPBVQXAcV0IwhB+RlEmZlkDKSUDkICO44Dr+RUAAqa/JWWS6VV+C4gYYUUrueLG6CoDcFnMUnKv6ES0LfRL3kAGtXq94q7nloXd3d55fFgwwEXvyc6j9xjA7WlvvIcbdpknk/0TYADQcEsPXv/LfAAAAABJRU5ErkJggg==');
elseif(in_array($image, $filetype['text'])) echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADoSURBVBgZBcExblNBGAbA2ceegTRBuIKOgiihSZNTcC5LUHAihNJR0kGKCDcYJY6D3/77MdOinTvzAgCw8ysThIvn/VojIyMjIyPP+bS1sUQIV2s95pBDDvmbP/mdkft83tpYguZq5Jh/OeaYh+yzy8hTHvNlaxNNczm+la9OTlar1UdA/+C2A4trRCnD3jS8BB1obq2Gk6GU6QbQAS4BUaYSQAf4bhhKKTFdAzrAOwAxEUAH+KEM01SY3gM6wBsEAQB0gJ+maZoC3gI6iPYaAIBJsiRmHU0AALOeFC3aK2cWAACUXe7+AwO0lc9eTHYTAAAAAElFTkSuQmCC');
elseif(in_array($image, $filetype['audio'])) echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdRJREFUeNqkU89rE1EQ/maz2STbQKTV1AqRWovFBgKCQsFToEfRmxfBP0DwIl56KkUPglfP0lOhBQVpDz305EmpeNAWPAQaSBoDTUuz2SabZN97nRdN0uqmFhz49s3Oj+8x82ZIKYX/EbOrPNwYGKNvGGEcdA0rs32ncc6LnulPva5weChPOc5LMMe4f2YJmn2QFAo/c6nU2JIQyPLvZiBBsegPJIhGk3e2t0vriURyzXHkLSBS+osgHnMRMsPwpY1crnWKIBIhxzQvZnd3yx8N49IrNj0e2APbNjAxYUEpowfPI/i+0SQafaRU40FgCSclHjcwNWWhst+3xWJAq4WyEJbxT4JfdQNXxoA2t4aIA0MdvdZo4NpZz5hQUrxmbDEUQSjLFAiHBDp6uJOcDyTw2000G+6yHXOfT07K9M1p4jIIbnVP1GsHkNInnVxaXQieg/1yUR/ZdCaNvYqeNomjqqPtO9ohvn3AzruXv6PnewTUXSYrlYF9b2Hz6vXU7eHL46hVayjkfsDLf33qfVl+0y5+7y/HiQXsERDRBUreyNDdJy9gDc1wWAX5T4vy89v37NaD4TCqDJdz/CCCqJ4Z/QCM0B/NFYwmw9NknNPbqGMBBgDJpb7OvDYMdwAAAABJRU5ErkJggg==');
elseif(in_array($image, $filetype['graphic'])) echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdlJREFUeNqkkz9v00AYxp9zzvblLnac0lLiUKpmKFKDqGBgQ0KCoQsDCxJVP0A/RAcGRsTMgtQpEh3oF+haNia2qiukCzSlieP4b987d+hIk5Ne2Wf5+d3z/jlWliXmWRbmXPz9wcFrerZn1A94lmXhh+3tz7Oo9/r9XZ6lKSuoDs8/MVgMsGtkiyLJAF0dX1TBKdnuItAjr1kBvH1aQmt5kiTICbB5n8Hl9HMdWFTA2T+gbldiEHgYAY9CYLMDRCmMRmv5NEmY3oSNY6zfW0NLhebkh8vAsleBJiTo3qlgU3IWiAqgtXwaxywvChz9+ILvQmLryRu86L00lh1e2daABQmkOX2j9KRLANJorQGktDk5PUHQDPD1ch8Xl7+wsvQA7YUV3PVbqDs6D2mAygEEpRbn14A4ji1j56KDPyOO8V8H34Y/URenUFJBKQWv4Zloej6BQ6wtdfBs1YXWagDLyEG3/QqO48B1XUgp4XkKQeCbaLVI3FTwqQhS2rCERZ2INMA4MG28ufR4Z9SrKErA2ITeLYzHJc7PcwghzCGPe2UFOBsMajXbxuHHd/85PjQEmKBmO9Ba5m9s7FiNRjjLJBaj0W8aEVBdEeh7cUs9TQSGbN7rfCXAAJNovyFuktgQAAAAAElFTkSuQmCC');
elseif(in_array($image, $filetype['video'])) echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdxJREFUeNqMU81KI0EQ7t9EhNU3CHjw4s0nyLKEnLz5HotP4AP4AAp5B2FZ2BxCDsoKQm57yhIU3Bwig2IwEyczY3fVVo2dTUY3uzb0dHfV91V9XdUjEVF0u90zIUS92WyeineMTqezT8t5o9H4aNgAAHVaJM3To6OTndksAw5MAwFQ8B4RsFKx6vDw4CfhGVsA5gFEMHxJkhTG48dnIgUyiPneWsNEBXwIYzkAO78655BnkZTIjKUzjEZR7r1nol5WoPhDDhGcynvgBMgf2mOaZv7q6tfs7m5MATBgPDLnTwBWQAaOqhnE2cmEee7h5maUpqnzWluG4wvGy6B6oSDcS5F6YD+Z8Pb2IXNOeGMqgqeUxY3Vizq/qAHdkZySFXR7vW9VWqtRFLnBYCBft5BgGSvA0CYzVxCKcr67u5ckycxvbt5nW1ufYJlsjFbt9rHhIpe6EAJwtu+IEvIcnRAWrLWl7EotalB6B3yFYLj0XlMA4a1dW/UQ9b8U9Ki4TkqN1lb/RmaieaMgp5TB8ANR50pxxXGVggrhywomk0nRBSrsNaKKtTYr2YT5EMdxuQv9fv+iVquxIWq1Pm//72+cTqc4HA4vintzIEq+TvuN+cN6x+D2xsR9+i3AAEgKanVYjEzGAAAAAElFTkSuQmCC');
elseif(in_array($image, $filetype['archive'])) echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEUSURBVCjPXdFNSsMAEIbh0Su4teAdIgEvJB5C14K4UexCEFQEKfivtKIIIlYQdKPiDUTRKtb0x6ZJ+volraEJ3+zmycwkMczGzTE3lwkbxeLE5XTqQfTIjhIm6bCy9E/icoOoyR4v7PLDN+8ibxQHxGzE3JBfHrgUalDnQ6BNk1WRFPjs66kDNTxqg0Uh5qYg4IkrjrS9pTWfmvKaBaGaNU4EY+Lpkq88eKZKmTAhbd3i5UFZg0+TzV1d1FZy4FCpJCAQ8DUnA86ZpciiXjbQhK7aObDOGnNsUkra/WRAiQXdvSwWpBkGvQpnbHHMRvqRlCgBqkm/dd2745YbtofafsOcPiiMTc1fzNzHma4O/XLHCtgfTLBbxm6KrMIAAAAASUVORK5CYII=');
elseif(in_array($image, $filetype['app'])) echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFiSURBVBgZpcEhbpRRGIXh99x7IU0asGBJWEIdCLaAqcFiCArFCkjA0KRJF0EF26kkFbVVdEj6/985zJ0wBjfp8ygJD6G3n358fP3m5NvtJscJYBObchEHx6QKJ6SKsnn6eLm7urr5/PP76cU4eXVy/ujouD074hDHd5s6By7GZknb3P7mUH+WNLZGKnx595JDvf96zTQSM92vRYA4lMEEO5RNraHWUDH3FV48f0K5mAYJk5pQQpqIgixaE1JDKtRDd2OsYfJaTKNcTA2IBIIesMAOPdDUGYJSqGYml5lGHHYkSGhAJBBIkAoWREAT3Z3JLqZhF3uS2EloQCQ8xLBxoAEWO7aZxros7EgISIIkwlZCY6s1OlAJTWFal5VppMzUgbAlQcIkiT0DXSI2U2ymYZs9AWJL4n+df3pncsI0bn5dX344W05dhctUFbapZcE2ToiLVHBMbGymS7aUhIdoPNBf7Jjw/gQ77u4AAAAASUVORK5CYII=');
elseif(in_array($image, $filetype['script'])) echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJwSURBVDjLjZPdT1JhHMetvyO3/gfLKy+68bLV2qIAq7UyG6IrdRPL5hs2U5FR0MJIAqZlh7BVViI1kkyyiPkCyUtztQYTYbwJE8W+Pc8pjofK1dk+OxfP+X3O83srAVBCIc8eQhmh/B/sJezm4niCsvX19cTm5uZWPp/H3yDnUKvVKr6ELyinwWtra8hkMhzJZBLxeBwrKyusJBwOQ6PRcJJC8K4DJ/dXM04DOswNqNOLybsRo9N6LCy7kUgkEIlEWEE2mwX9iVar/Smhglqd8IREKwya3qhg809gPLgI/XsrOp/IcXVMhqnFSayurv6RElsT6ZCoov5u1fzUVwvcKRdefVuEKRCA3OFHv2MOxtlBdFuaMf/ZhWg0yt4kFAoVCZS3Hd1gkpOwRt9h0LOES3YvamzPcdF7A6rlPrSbpbhP0kmlUmw9YrHYtoDku2T6pEZ/2ICXEQ8kTz+g2TkNceAKKv2nIHachn6qBx1MI5t/Op1mRXzBd31AiRafBp1vZyEcceGCzQ6p24yjEzocGT6LUacS0iExcrkcK6Fsp6AXLRnmFOjyPMIZixPHmAAOGxZQec2OQyo7zpm6cNN6GZ2kK1RAofPAr8GA4oUMrdNNkIw/wPFhDwSjX3Dwlg0CQy96HreiTlcFZsaAjY0NNvh3QUXtHeHcoKMNA7NjqLd8xHmzDzXDRvRO1KHtngTyhzL4SHeooAAnKMxBtUYQbGWa0Dc+AsWzSVy3qkjeItLCFsz4XoNMaRFFAm4SyTXbmQa2YHQSGacR/pAXO+zGFif4JdlHCpShBzstEz+YfJtmt5cnKKWS/1jnAnT1S38AGTynUFUTzJcAAAAASUVORK5CYII=');
else echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABbSURBVCjPzdAxDoAgEERRzsFp95JbGI2ASA2SCOX3Ahtr8tuXTDIO959bCxRfpOitWS5vA+lMJg9JbKCTTmMQ1QS3ThqVQbBBlsbgpXLYE8lHCXrqLptf9km7Dzv+FwGTaznIAAAAAElFTkSuQmCC');
// Exit this script when the correct image has been served
exit();
}
/** ----------------------------------------------------------------------------------------------------------[ FORCE FILE DOWNLOAD ]
* @desc Process the request for direct file download based on the
* value(s) in the $ext_filter setting.
*/
if(isset($_GET['download']) && !in_array('*', $ext_filter))
{
// Get the file to download
$file = $_GET['download'];
// Make sure the file is delivered properly.
if(ini_get('zlib.output_compression'))
{
ini_set('zlib.output_compression', 'off');
}
// Prevent abuse
$file = str_replace(array("/", ".."), "", $file);
// Get file extension
$file_extension = strtolower(substr(strrchr($file,"."),1));
if (in_array($file_extension, $ext_filter))
{
exit('File Type Invalid');
}
elseif(!file_exists($file))
{
exit('File Does Not Exist');
}
// Special delivery
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=\"".basename($file)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($file));
readfile("$file");
exit();
}
/** ---------------------------------------------------------------------------------------------------------------[ READ DIRECTORY ]
* @desc This is where all the magic happens. We read the current directory and
* build an array of images and folders to list.
*/
// Get this folder and files name.
$this_script = basename(__FILE__);
$this_folder = str_replace('/'.$this_script, '', $_SERVER['SCRIPT_NAME']);
// Declare vars used beyond this point.
$file_list = array();
$folder_list = array();
$total_size = 0;
// Open the current directory...
if ($handle = opendir('.'))
{
// ...start scanning through it.
while (false !== ($file = readdir($handle)))
{
// Make sure we don't list this folder, file or their links.
if ($file != "." && $file != ".." && $file != $this_script)
{
// Get file info.
$stat = stat($file); // ... slow, but faster than using filemtime() & filesize() instead.
$info = pathinfo($file);
// Organize file info.
$item['name'] = $info['filename'];
$item['lname'] = strtolower($info['filename']);
$item['ext'] = $info['extension'];
if($info['extension'] == '') $item['ext'] = '.';
$item['bytes'] = $stat['size'];
$item['size'] = bytes_to_string($stat['size'], 2);
$item['mtime'] = $stat['mtime'];
$item['link'] = '<a href="'.$this_script.'?download='.$item['name'].'.'.$item['ext'].'">'.$item['name'].'.'.$item['ext'].'</a>';
// Add files to the file list...
if($info['extension'] != '')
{
array_push($file_list, $item);
}
// ...and folders to the folder list.
else
{
array_push($folder_list, $item);
}
// Clear stat() cache to free up memory (not really needed).
clearstatcache();
// Add this items file size to this folders total size
$total_size += $item['bytes'];
}
}
// Close the directory when finished.
closedir($handle);
}
// Sort folder list.
if($folder_list)
$folder_list = php_multisort($folder_list, $sort);
// Sort file list.
if($file_list)
$file_list = php_multisort($file_list, $sort);
// Calculate the total folder size
if($file_list && $folder_list)
$total_size = bytes_to_string($total_size, 2);
/** -------------------------------------------------------------------------------------------------------------------[ FUNCTIONS ]
* @desc Define functions used in this script
*/
/**
* @author
http://us.php.net/manual/en/function.array-multisort.php#83117* @desc Sorts a multidimensional array akin to sorting an SQL result
*/
function php_multisort($data,$keys)
{
foreach ($data as $key => $row)
{
foreach ($keys as $k)
{
$cols[$k['key']][$key] = $row[$k['key']];
}
}
$idkeys = array_keys($data);
$i=0;
foreach ($keys as $k)
{
if($i>0){$sort.=',';}
$sort.='$cols['.$k['key'].']';
if($k['sort']){$sort.=',SORT_'.strtoupper($k['sort']);}
if($k['type']){$sort.=',SORT_'.strtoupper($k['type']);}
$i++;
}
$sort .= ',$idkeys';
$sort = 'array_multisort('.$sort.');';
eval($sort);
foreach($idkeys as $idkey)
{
$result[$idkey]=$data[$idkey];
}
return $result;
}
/**
* @author
http://us3.php.net/manual/en/function.filesize.php#84652* @desc Gets a filesize in bytes, returns a string representation
* of that file in an easily readable format.
*/
function bytes_to_string($size, $precision = 0) {
$sizes = array('YB', 'ZB', 'EB', 'PB', 'TB', 'GB', 'MB', 'KB', 'Bytes');
$total = count($sizes);
while($total-- && $size > 1024) $size /= 1024;
$return['num'] = round($size, $precision);
$return['str'] = $sizes[$total];
return $return;
}
/**
* @author
http://us.php.net/manual/en/function.time.php#71342* @desc Returns the time between now and timestamp provided
*/
function time_ago($timestamp, $recursive = 0){
$current_time = time();
$difference = $current_time - $timestamp;
//$periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
$dansk_ental = array("sekund", "minut", "time", "dag", "uge", "måned", "år", "årti");
$dansk_flertal = array("sekunder", "minutter", "timer", "dage", "uger", "måneder", "år", "årtier");
$lengths = array(1, 60, 3600, 86400, 604800, 2630880, 31570560, 315705600);
for ($val = sizeof($lengths) - 1; ($val >= 0) && (($number = $difference / $lengths[$val]) <= 1); $val--);
if ($val < 0) $val = 0;
$new_time = $current_time - ($difference % $lengths[$val]);
$number = floor($number);
if($number > 1){
$periods = $dansk_flertal;
}else{
$periods = $dansk_ental;
}
$text = sprintf("%d %s ", $number, $periods[$val]);
if (($recursive == 1) && ($val >= 1) && (($current_time - $new_time) > 0)){
$text .= time_ago($new_time);
}
return $text;
}
/**
* @desc Used to allow download/show download icon based on disallowed file types
* @todo extend this function to base a files download elegibility on its relation
* to ini_get('memory_limit') && memory_get_usage() so files that are too
* big to process are not attempted.
*/
function isDL($true, $false = '')
{
global $ext_filter;
if(!in_array('*', $ext_filter))
{
return $true;
}
else
{
return $false;
}
}
/** ----------------------------------------------------------------------------------------------------[ TEMPLATE: DIRECTORY LIST ]
* @desc This is the template used for the directory listing
*/
if(!isset($_GET['display'])) :
?>
<!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>PHPDL - PHP Directory Lister</title>
<style type="text/css">
body{
font-family: "Lucida Grande",Calibri,Arial;
font-size: 9pt;
color: #333;
background: #ffffff;
}
a{
color: #b00;
font-size: 11pt;
font-weight: bold;
text-decoration: none;
}
a:hover{
color: #000;
}
img{
vertical-align: bottom;
padding: 0 3px 0 0;
}
sup{
color: #999;
}
table{
margin: 0 auto;
padding: 0;
width: 600px;
}
table td{
padding: 5px;
}
thead td{
padding-left: 0;
font-family: "Trebuchet MS";
font-size: 11pt;
font-weight: bold;
}
tbody td.name{
width: 99%;
}
tbody .folder td{
border: solid 1px #ffffff;
}
tbody .file td{
background: #fff;
border: solid 1px #ddd;
}
tbody tr.file:hover td{
background: #ffff9d;
}
tbody tr.file:hover td.dl{
background: #ffffff;
}
tbody .file td.size,
tbody .file td.time{
white-space: nowrap;
padding: 5px 10px;
}
tbody .file td.size span{
color: #999;
font-size: 8pt;
}
tbody .file td.time{
color: #555;
}
tbody td.dl{
padding: 5px 0;
width: 1%;
border-color: #f8f8f8;
background: #ffffff;
}
tbody td.dl img{
padding: 0 0 0 5px;
border: none;
}
tfoot td{
padding: 5px 0;
color: #777;
font-size: 8pt;
background: #ffffff;
border-color: #ffffff;
}
tfoot td.copy{
text-align: right;
white-space: nowrap;
}
tfoot td.cc{
padding: 40px;
text-align: center;
}
tfoot td.cc img{
padding: 0;
border: none;
}
</style>
<link rel="stylesheet" type="text/css" href="<?=$this_script?>?resource=thickbox.css" />
<script type="text/javascript">
var tb_pathToImage = "<?=$this_script?>?resource=loadingAnimation.gif";
</script>
<script type="text/javascript" src="<?=$this_script?>?resource=jquery.packed.js"></script>
<script type="text/javascript" src="<?=$this_script?>?resource=thickbox.packed.js"></script>
</head>
<body>
<table cellpadding="0" cellspacing="1">
<thead>
<tr>
<td colspan="4"><?=$this_folder?></td>
</tr>
</thead>
<tfoot>
<tr>
<td class="total"><? if($folder_list): ?>This folder has <?=count($file_list)?> files totaling <?=$total_size['num']?> <?=$total_size['str']?> in size<? endif; ?></td>
</tr>
</tfoot>
<tbody>
<!-- folders -->
<? if($folder_list): ?>
<? foreach($folder_list as $item) : ?>
<tr class="folder">
<td colspan="<?=isDL('4','3')?>" class="name"><img src="<?=$this_script?>?image=<?=$item['ext']?>" alt="<?=$item['ext']?>" /> <a href="<?=$item['name']?>/">./<?=$item['name']?></a></td>
</tr>
<? endforeach; ?>
<? endif; ?>
<!-- /folders -->
<!-- files -->
<? if($file_list): ?>
<? foreach($file_list as $item) : ?>
<tr class="file">
<td class="name"><img src="<?=$this_script?>?image=<?=$item['ext']?>" alt="<?=$item['ext']?>" /> <?=$item['link']?></td>
<td class="size"><?=$item['size']['num']?><span><?=$item['size']['str']?></span></td>
<td class="time"><?=time_ago($item['mtime'])?> siden</td>
<?=isDL('<td class="dl"><a href="'.$this_script.'?download='.$item['name'].'.'.$item['ext'].'"><img src="'.$this_script.'?image=download" alt="Download '.$item['name'].'.'.$item['ext'].'" /></a></td>')?>
</tr>
<? endforeach; ?>
<? endif; ?>
<!-- /files -->
</tbody>
</table>
</body>
</html>
<?
/** ----------------------------------------------------------------------------------------------------------[ TEMPLATE: LIGHTBOX ]
* @desc This is the template used to display the lightbox popup
*/
else :
?>
<!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>PHPDL - lightbox</title>
<style type="text/css">
body{
margin: 0;
padding: 0;
}
div{
text-align: center;
}
</style>
</head>
<body>
<div>
<? if($_GET['display'] == 'quicktime' && isset($_GET['file'])) :?>
<embed
src="<?=$_GET['file']?>"
width="<?=$vWidth?>"
height="<?=$vHeight?>"
autoplay="true"
controller="true"
scale="aspect"
/>
<? endif; ?>
<? if($_GET['display'] == 'flv' && isset($_GET['file'])) :?>
<embed
src="<?=$this_script?>?resource=player.swf"
width="<?=$vWidth?>"
height="<?=$vHeight?>"
allowscriptaccess="always"
allowfullscreen="true"
flashvars="file=<?=$_GET['file']?>&autostart=true&controlbar=over&bufferlength=3&displayclick=play&fullscreen=true&stretching=fill&volume=100"
/>
<? endif; ?>
<? if($_GET['display'] == 'mp3' && isset($_GET['file'])) :?>
<embed
src="<?=$this_script?>?resource=player_mp3_mini.swf"
width="200"
height="20"
allowscriptaccess="always"
flashvars="mp3=<?=$_GET['file']?>&bgcolor=ffffff&loadingcolor=bb0000&buttoncolor=bb0000&slidercolor=999999&autoplay=1"
/>
<? endif; ?>
</div>
</body>
</html>
<? endif; ?>