<?php include("config.php"); $signout = '<a href="' . basename($_SERVER['PHP_SELF']) . '?signout">Sign out</a>'; // Respect HTTPS or not if (isset($_SERVER['HTTPS'])) { $url = preg_replace("/^http:\/\//", "https://", $url); } else { $url = preg_replace("/^https:\/\//", "http://", $url); } if (isset($_GET) && count($_GET) > 0) { $getstring = "?" . http_build_query($_GET); } else { $getstring = ""; } if (isset($_GET['signout'])) { if (isset($_COOKIE['password'])) { unset($_COOKIE['password']); setcookie("password", null, -1, "/", $_SERVER['SERVER_NAME']); header("Location: " . $url); } } if ($_POST && $pass) { if ((hash("sha256", $_POST['password']) == $pass)) { if (isset($_POST['rememberme'])) { /* Set cookie to last 1 year */ setcookie("password", hash("sha256", $_POST['password']), time()+60*60*24*365, "/", $_SERVER['SERVER_NAME'] ); } else { /* Cookie expires when browser closes */ setcookie("password", hash("sha256", $_POST['password']), false, "/", $_SERVER['SERVER_NAME'] ); } header("Location: " . $url . $getstring); } else { header("Location: " . $url); exit(); } } else if ($pass) { if (!isset($_COOKIE["password"]) || (isset($_COOKIE["password"]) && $_COOKIE["password"] != $pass)) { ?> <html> <head> <title><?php echo $logontitle ?></title> <script type="text/javascript"> function formfocus() { document.getElementById("password").focus(); } window.onload = formfocus; </script> </head> <body> <form name="form" method="post" action="./<?php echo $getstring ?>"> <p><input type="password" title="Enter your password" name="password" id="password"> <br><input type="checkbox" name="rememberme" value="rememberme">Remember me</p> <p><input type="submit" name="Submit" value="Login"></p> </form> </body> </html> <?php exit(); } } else { $signout = ""; } function size_readable($size, $max = null, $system = "si", $retstring = "%01.2f %s") { // Pick units $systems['si']['prefix'] = array('B', 'K', 'MB', 'GB', 'TB', 'PB'); $systems['si']['size'] = 1000; $systems['bi']['prefix'] = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB'); $systems['bi']['size'] = 1024; $sys = isset($systems[$system]) ? $systems[$system] : $systems['si']; // Max unit to display $depth = count($sys['prefix']) - 1; if ($max && false !== $d = array_search($max, $sys['prefix'])) { $depth = $d; } // Loop $i = 0; while ($size >= $sys['size'] && $i < $depth) { $size /= $sys['size']; $i++; } return sprintf($retstring, $size, $sys['prefix'][$i]); } $nameurl = "?C=N;O=A"; $modifiedurl = "?C=M;O=A"; $sizeurl = "?C=S;O=A"; // Set default sort $sort = ['M', 'A']; if (isset($_GET['C'])) { $sort = preg_split("/;O=/", $_GET['C']); if ($_GET['C'] == "N;O=A") { $nameurl = "?C=N;O=D"; } else if ($_GET['C'] == "M;O=A") { $modifiedurl = "?C=M;O=D"; } else if ($_GET['C'] == "S;O=A") { $sizeurl = "?C=S;O=D"; } } $listing = array(); date_default_timezone_set("GB"); #print_r(listdir_by_date("./")); $files_directory = "./"; $fileCollection = array(); $files = array(); $fdirectory = opendir("$files_directory"); while ($file = readdir($fdirectory)) { if (($file == ".") || ($file == "..")) { } else { array_push($files, $file); } } foreach ($files as $key => $file) { $c_date = filemtime("$files_directory/$file"); $fileCollection[] = [ 'date' => $c_date, 'file' => $file, 'size' => filesize("$files_directory/$file") ]; } if (isset($sort)) { // Sort by modified date if ($sort[0] == "M") { if ($sort[1] == "A") { usort( $fileCollection, function($a, $b) { return $a['date'] > $b['date']; } ); } else { usort( $fileCollection, function($a, $b) { return $a['date'] < $b['date']; } ); } // Sort by name } else if ($sort[0] == "N") { if ($sort[1] == "A") { usort( $fileCollection, function($a, $b) { return $a['file'] > $b['file']; } ); } else { usort( $fileCollection, function($a, $b) { return $a['file'] < $b['file']; } ); } // Sort by size } else if ($sort[0] == "S") { if ($sort[1] == "A") { usort( $fileCollection, function($a, $b) { return $a['size'] > $b['size']; } ); } else { usort( $fileCollection, function($a, $b) { return $a['size'] < $b['size']; } ); } } } else { krsort($fileCollection); } $listsize = 0; foreach ($fileCollection as $item) { // Only show last X entries if requested if (isset($_GET['last']) && ($listsize > $_GET['last'] - 1)) { break; } // Drop if on index ignore list if (in_array($item['file'], $indexignore)) { continue; } // Drop if outside (optional) date range if (isset($_GET['from'])) { $from = $_GET['from']; // If $from has a -, assume not Unix time if (strpos($from, "-") !== false) { $from = strtotime($from); } if (isset($_GET['to'])) { $to = $_GET['to']; // If $to has a -, assume not Unix time if (strpos($to, "-") !== false) { $to = strtotime($to); } } else { $to = time(); } if ($item['date'] < $from || $item['date'] > $to) { continue; } } $fileparts = explode(".", strtolower($item['file'])); $icon = "unknown"; switch ($fileparts[count($fileparts)-1]) { case "png": case "jpg": case "gif": case "bmp": case "jpeg": case "svg": $icon="image2"; break; case "exe": case "jar": case "class": case "apk": $icon="binary"; break; case "c": case "cpp": case "h": $icon="c"; break; case "doc": case "docx": case "dot": case "dotx": case "odt": case "ott": case "oth": case "odm": case "xls": case "xlsx": case "ppt": case "pptx": $icon="layout"; break; case "avi": case "mkv": case "wmv": case "ogv": case "3gp": case "divx": case "mov": $icon="movie"; break; case "pdf": $icon="pdf"; break; case "ps": $icon="ps"; break; case "java": case "php": case "html": case "htm": case "xml": case "cs": case "sh": case "bat": case "js": case "jsp": case "py": case "cgi": case "pl": $icon="script"; break; case "wav": $icon="sound1"; break; case "mp3": case "ogg": case "wma": case "aac": $icon="sound2"; break; case "tex": $icon="tex"; case "txt": case "rtf": case "log": $icon="text"; break; case "zip": case "rar": case "gz": case "bz2": case "tar": case "tgz": case "7z": case "iso": $icon="compressed"; break; default: $icon="unknown"; break; } $listing[$listsize]['filename'] = utf8_encode($item['file']); $listing[$listsize]['type'] = $icon; $listing[$listsize]['modified'] = $item['date']; $listing[$listsize]['size'] = $item['size']; $listsize++; } clearstatcache(); if (!isset($_GET['format']) || $_GET['format'] == "html") { ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <html> <head> <link rel="stylesheet" type="text/css" href="css/sprite.css"> <title>Index of /</title> </head> <body> <?php if ($headerfile) { echo file_get_contents($headerfile); } ?> <pre><div class="icon iconblank"></div><a href="<?php echo $nameurl; ?>">Name</a> <a href="<?php echo $modifiedurl; ?>">Last modified</a> <a href="<?php echo $sizeurl; ?>">Size</a> <?php echo $signout; ?> <hr><?php for ($i = 0; $i < count($listing); $i++) { if (strlen($listing[$i]['filename']) > 23) { $preview = substr($listing[$i]['filename'], 0, 20) . "..>"; } else { $preview = $listing[$i]['filename']; } $spaces = ""; for ($j = 0; $j < (24 - strlen($preview)); $j++) { $spaces = $spaces . " "; } echo '<div class="icon icon' . $listing[$i]['type'] . '"></div><a href="' . rawurlencode($listing[$i]['filename']) . '">' . $preview . "</a>" . $spaces . date("d-M-Y H:i", $listing[$i]['modified']) . " " . size_readable($listing[$i]['size'], null, "bi") . " " . "\n"; } ?> <hr></pre> <?php echo "<address>Apache Server at " . $_SERVER['SERVER_NAME'] . " Port " . $_SERVER['SERVER_PORT'] . "</address>"; ?> </body></html> <?php } else if ($_GET['format'] == "json") { header("Content-type: application/json"); echo json_encode($listing); } else if ($_GET['format'] == "raw") { print_r($listing); } else if ($_GET['format'] == "plain") { header("Content-type: text/plain"); for ($i = 0; $i < count($listing); $i++) { echo $listing[$i]['filename'] . "\n"; } } else if ($_GET['format'] == "light") { for ($i = 0; $i < count($listing); $i++) { echo '<a href="' . rawurlencode($listing[$i]['filename']) . '">' . $listing[$i]['filename'] . '</a><br>'; } } ?>