<?php
##########################
# #
# WebServer Explorer #
# #
# Av Martin Nordal #
# nerdvar.com/wse/ #
# #
##########################
@session_start();
@ini_set("session.gc_maxlifetime" , (3600 * 24 * 7));
@ini_set("arg.separator.output" , "&");
// Stigma security fix
if($_SERVER['HTTPS'] != 'on')
{
header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
exit();
}
$Skript = "wse.php";
$Handler = "hand";
$OverRot = FALSE; // Bestemmer om WSE skal ha adgang over mappa den selv er plassert i.
$AdmBrk = array(); // N�kkel er brukernavn, og verdi er md5-kryptert passord.
$BrkFil = "wse.brk";
$BrkMappe = ".";
$AllPlass = 1024 * 1024 * 1024 * 15;
$BrkPlass = 1024 * 1024 * 512;
if (!eregi($Skript , $_SERVER["REQUEST_URI"])) {
Header("Location: $Skript");
die();
}
if (strlen($_POST["wse_bruker"]) > 0 && strlen($_POST["wse_passord"]) > 0) {
$_SESSION["wse_bruker"] = $_POST["wse_bruker"];
$_SESSION["wse_passord"] = md5($_POST["wse_passord"]);
$_SESSION["wse_iltid"] = time();
Header("Location: $_SERVER[REQUEST_URI]");
die();
}
$Sikker = md5(mt_rand(999,99999));
$Adgang = 0;
if (strlen($_SESSION["wse_bruker"]) > 0 && strlen($_SESSION["wse_passord"]) > 0) {
$Brukere = @file($BrkFil);
$Brukere = is_array($Brukere) ? $Brukere : array();
foreach ($Brukere as $Nok => $Linje) {
$Linje = explode("=" , trim($Linje));
unset($Brukere[$Nok]);
$Brukere[($Linje[0])] = array($Linje[1]);
if ($Linje[0] == $_SESSION["wse_bruker"]) {
if (strlen($Linje[2]) > 0) {
$Linje[2] = (array)explode(";" , $Linje[2]);
foreach ($Linje[2] as $Ver) {
$Brukere[($Linje[0])][substr($Ver , 0 , strpos($Ver , ":"))] = substr($Ver , strpos($Ver , ":") + 1);
}
}
}
}
if ($_SESSION["wse_passord"] == $AdmBrk[($_SESSION["wse_bruker"])]) {
$LoggInn[$Sikker] = $Sikker;
$Adgang = 2;
}
elseif ($_SESSION["wse_passord"] == $Brukere[($_SESSION["wse_bruker"])][0]) {
$LoggInn[$Sikker] = $Sikker;
$Adgang = 1;
}
}
$Handling = $_GET["hand"] ? $_GET["hand"] : "vismappe";
if ($LoggInn[$Sikker] == $Sikker) {
if ($Handling == "loggut") {
unset($_SESSION["wse_bruker"] , $_SESSION["wse_passord"]);
Header("Location: $Skript");
die();
}
elseif ($Handling == "vismappe") {
$Sti = SjekkSti(urldecode($_GET["sti"]));
if ($Les = @opendir(StiAdgang($Sti))) {
$Objekter = array("Mapper" => array() , "Filer" => array());
while ($Objekt = @readdir($Les)) {
if ($Objekt <> "." && $Objekt <> "..") {
$Objekter[(is_dir(StiAdgang("$Sti/$Objekt")) ? "Mapper" : "Filer")][strtolower($Objekt)] = $Objekt;
}
}
$Vis = "<h1>Vis mappe: $Sti</h1>\n\n";
$Vis .= "<p>[ <a href=\"$Skript?$Handler=vismappe&sti=" . urlencode(OppMappe($Sti)) . "\">Opp en mappe</a> ] \n";
$Vis .= "[ <a href=\"$Skript?$Handler=nyttobj&sti=" . urlencode($Sti) . "\">Nytt objekt</a> ] \n";
$Vis .= "[ <a href=\"$Skript?$Handler=lastopp&sti=" . urlencode($Sti) . "\">Last opp</a> ]";
$Vis .= "</p>\n\n<table class=\"tabell\">\n";
$Vis .= "<tr>\n<td class=\"nok\">Objekt</td>\n<td class=\"nok\">Størrelse</td>\n";
$Vis .= "<td class=\"nok\">Vis</td>\n";
$Vis .= "<td class=\"nok\">Rediger</td>\n<td class=\"nok\">Nytt navn</td>\n";
$Vis .= "<td class=\"nok\">Kopier</td>\n<td class=\"nok\">Flytt</td>\n";
$Vis .= "<td class=\"nok\">Slett</td>\n<td class=\"nok\">Ekstra</td>\n</tr>\n";
$Stor1 = filesize(StiAdgang($Sti));
foreach ($Objekter as $Type => $Liste) {
ksort($Liste);
foreach ($Liste as $Objekt) {
$ObjektURL = urlencode($Sti . "/$Objekt");
$Stor2 = Storrelse(StiAdgang($Sti) . "/$Objekt");
$Vis .= "<tr>\n<td class=\"ver\"><a href=\"" . substr(StiAdgang($Sti) , 2) . "/" . urlencode($Objekt) . "\"";
$Vis .= $Type == "Mapper" ? " style=\"font-weight: bold;\"" : "";
$Vis .= ">" . htmlspecialchars(substr($Objekt , 0 , 64)) . "</a></td>\n";
$Vis .= "<td class=\"ver\">" . VisTall($Stor2) . "</td>\n";
if ($Type == "Mapper") {
$Vis .= "<td class=\"ver\"><a href=\"$Skript?$Handler=vismappe&sti=$ObjektURL\">Utforsk</a></td>\n";
$Vis .= "<td class=\"ver\">­</td>\n";
}
else {
$Vis .= "<td class=\"ver\"><a href=\"$Skript?$Handler=viskilde&sti=$ObjektURL\">Kilde</a></td>\n";
$Vis .= "<td class=\"ver\"><a href=\"$Skript?$Handler=rediger&sti=$ObjektURL\">Rediger</a></td>\n";
}
$Vis .= "<td class=\"ver\"><a href=\"$Skript?$Handler=nyttnavn&sti=$ObjektURL\">Nytt navn</a></td>\n";
$Vis .= "<td class=\"ver\"><a href=\"$Skript?$Handler=kopier&sti=$ObjektURL\">Kopier</a></td>\n";
$Vis .= "<td class=\"ver\"><a href=\"$Skript?$Handler=flytt&sti=$ObjektURL\">Flytt</a></td>\n";
$Vis .= "<td class=\"ver\"><a href=\"$Skript?$Handler=slett&sti=$ObjektURL\">Slett</a></td>\n";
$Vis .= "<td class=\"ver\"><a href=\"$Skript?$Handler=ekstra&sti=$ObjektURL\">Ekstra</a></td>\n</tr>\n";
$Stor1 += $Stor2;
}
}
if (count($Objekter["Mapper"]) <= 0 && count($Objekter["Filer"]) <= 0) {
$Vis .= "<tr>\n<td class=\"ver\" colspan=\"11\">Mappa inneholder ikke noe.</td>\n</tr>\n";
}
$Vis .= "</table>\n\n";
$Vis .= "<p>[ Plassforbruk: " . VisTall($Stor1) . " ] \n";
$Vis .= "[ Mapper: " . VisTall(count($Objekter["Mapper"])) . " ] \n";
$Vis .= "[ Filer: " . VisTall(count($Objekter["Filer"])) . " ] \n";
$Vis .= "[ Objekter totalt: " . VisTall(count($Objekter["Mapper"]) + count($Objekter["Filer"])) . " ]</p>\n\n";
@closedir($Les);
}
else {
$Vis = "<h1>Advarsel</h1>\n\n";
$Vis .= "<p>Mappa «$Sti» kan ikke åpnes.</p>\n\n";
}
}
elseif ($Handling == "nyttobj") {
$Sti = SjekkSti(urldecode($_GET["sti"]));
if (is_dir(StiAdgang($Sti)) && is_writeable(StiAdgang($Sti))) {
$Vis = "<h1>Nytt objekt $Sti</h1>\n\n";
$Vis .= "<form action=\"$Skript?$Handler=nyttobj&sti=" . urlencode($Sti) . "\" method=\"post\">\n";
$Vis .= "<table class=\"skjema\">\n";
$Vis .= "<tr>\n<td class=\"nok\">Ny mappe:</td>\n";
$Vis .= "<td class=\"ver\"><input type=\"text\" name=\"nymappe\" /></td>\n";
$Vis .= "<td class=\"ver\"><input type=\"submit\" class=\"knapp\" value=\"Opprett\" /></td>\n</tr>\n";
$Vis .= "<tr>\n<td class=\"nok\">Ny fil:</td>\n";
$Vis .= "<td class=\"ver\"><input type=\"text\" name=\"nyfil\" /></td>\n";
$Vis .= "<td class=\"ver\"><input type=\"submit\" class=\"knapp\" value=\"Opprett\" /></td>\n</tr>\n";
$Vis .= "</table>\n</form>\n\n";
if ($_POST["nymappe"]) {
if (@opendir(StiAdgang(SjekkSti("$Sti/$_POST[nymappe]")))) {
$Vis .= "<p>Mappa «$_POST[nymappe]» finnes fra før av.</p>\n\n";
}
elseif (@mkdir(StiAdgang(SjekkSti("$Sti/$_POST[nymappe]")))) {
$Vis .= "<p>Mappa «$Sti/$_POST[nymappe]» ble lagt til.</p>\n\n";
Logg("Mappa «$Sti/$_POST[nymappe]» ble lagt til.");
}
else {
$Vis .= "<p>Mappa «$_POST[nymappe]» kan ikke legges til.</p>\n\n";
}
}
if ($_POST["nyfil"]) {
if (@opendir(StiAdgang(SjekkSti("$Sti/$_POST[nyfil]")))) {
$Vis .= "<p>Fila «$_POST[nyfil]» finnes fra før av.</p>\n\n";
}
elseif (@fopen(StiAdgang(SjekkSti("$Sti/$_POST[nyfil]")) , "w")) {
$Vis .= "<p>Fila «$_POST[nyfil]» ble lagt til.</p>\n\n";
Logg("Fila «$Sti/$_POST[nyfil]» ble lagt til.");
}
else {
$Vis .= "<p>Fila «$_POST[nyfil]» kan ikke legges til.</p>\n\n";
}
}
$Kommando = array(
".tar" => "tar cf",
".tar.gz" => "tar czf",
".tar.bz2" => "tar cjf",
".zip" => "zip",
".rar" => "rar e");
$Vis .= "<h2>Nytt arkiv</h2>\n\n";
$Vis .= "<form action=\"$Skript?$Handler=nyttobj&sti=" . urlencode($Sti) . "\" method=\"post\">\n";
$Vis .= "<table class=\"skjema\">\n";
$Vis .= "<tr>\n<td class=\"nok\">Arkivnavn:</td>\n";
$Vis .= "<td class=\"ver\"><input type=\"text\" name=\"arkivnavn\" /> <select name=\"arkivtype\">\n";
foreach ($Kommando as $Type => $Skriv) {
$Vis .= " <option value=\"$Type\">$Type</option>\n";
}
$Vis .= "</select></td>\n</tr>\n";
$Vis .= "<tr>\n<td class=\"nok\">Objekter:</td>\n";
$Vis .= "<td class=\"ver\"><input type=\"text\" name=\"objekter\" size=\"30\" /> ";
$Vis .= "(adskilles med mellomrom)</td>\n</tr>\n";
$Vis .= "<tr>\n<td class=\"ver\">­</td>\n";
$Vis .= "<td class=\"ver\"><input type=\"submit\" class=\"knapp\" value=\"Pakk\" /></td>\n</tr>\n";
$Vis .= "</table>\n</form>\n\n";
if ($_POST["arkivnavn"] && $_POST["arkivtype"] && $_POST["objekter"]) {
$_POST["arkivnavn"] = str_replace(" " , "_" , $_POST["arkivnavn"]);
@exec($Kommando[($_POST["arkivtype"])]." ".StiAdgang("$Sti/$_POST[arkivnavn]$_POST[arkivtype]")." ".StiAdgang("$Sti/$_POST[objekter]"));
$Vis .= "<p>Arkivfila «$Sti/$_POST[arkivnavn]$_POST[arkivtype]» ble oppretta.</p>\n\n";
Logg("Arkivfila «$Sti/$_POST[arkivnavn]$_POST[arkivtype]» ble oppretta.");
}
}
else {
$Vis = "<h1>Advarsel</h1>\n\n";
$Vis .= "<p>Enten er ingen mappe definert, eller den kan ikke \n";
$Vis .= "åpnes for skriving.</p>\n\n<p>$Sti</p>\n\n";
}
}
elseif ($Handling == "lastopp") {
$Sti = SjekkSti(urldecode($_GET["sti"]));
if (is_readable(StiAdgang($Sti))) {
$Vis = "<h1>Last opp $Sti</h1>\n\n";
if ($_FILES["lastopp"]) {
$Vis .= "<p>Resultater:</p>\n\n<ul>\n";
$Logg = array();
foreach ($_FILES["lastopp"]["name"] as $ID => $Navn) {
if (strlen($Navn) > 0) {
if (!$_POST["mellomrom"]) {
$Navn = str_replace(" " , "_" , $Navn);
}
$Midl = $_FILES["lastopp"]["tmp_name"][$ID];
$Nytt = str_replace("/./" , "/" , StiAdgang(SjekkSti($Sti)) . "/" . $Navn);
if (@move_uploaded_file($Midl , $Nytt)) {
$Logg[] = "Fila «$Navn» ble lasta opp som «$Sti/$Navn».";
$Vis .= "<li>Fila «$Navn» ble lasta opp som «$Sti/$Navn».</li>\n";
}
else {
$Vis .= "<li>«$Navn» kunne ikke lastes opp som «$Nytt».</li>\n";
}
}
}
Logg(implode(" " , $Logg));
$Vis .= "</ul>\n\n";
}
else {
$Vis .= "<p><strong>Merk:</strong> Allerede eksisterende filer med samme navn vil bli overskrevet.</p>\n\n";
$Vis .= "<form action=\"$Skript?$Handler=lastopp&sti=" . urlencode($Sti) . "\" ";
$Vis .= "method=\"post\" enctype=\"multipart/form-data\">\n";
$Vis .= "<p><input type=\"file\" name=\"lastopp[]\" /><br />\n";
$Vis .= "<input type=\"file\" name=\"lastopp[]\" /><br />\n";
$Vis .= "<input type=\"file\" name=\"lastopp[]\" /><br />\n";
$Vis .= "<input type=\"file\" name=\"lastopp[]\" /><br />\n";
$Vis .= "<input type=\"file\" name=\"lastopp[]\" /></p>\n";
$Vis .= "<p><input type=\"checkbox\" name=\"mellomrom\" value=\"hakmed\" /> ";
$Vis .= "Ikke gjør om mellomrom til understrek i filnavnene.</p>\n\n";
$Vis .= "<p><input type=\"submit\" class=\"knapp\" value=\"Last opp\" /></p>\n</form>\n\n";
}
}
else {
$Vis = "<h1>Advarsel</h1>\n\n";
$Vis .= "<p>Enten er ingen mappe definert, eller den kan ikke \n";
$Vis .= "åpnes for skriving.</p>\n\n<p>$Sti</p>\n\n";
}
}
elseif ($Handling == "viskilde") {
$Sti = SjekkSti(urldecode($_GET["sti"]));
if (is_readable(StiAdgang($Sti))) {
$Kode = file_get_contents(StiAdgang($Sti));
$Kode = htmlspecialchars($Kode);
$Vis = "<h1>Kilde $Sti</h1>\n\n";
if ($_GET["vis"] == "lnr") {
$Vis .= "<p>[ <a href=\"$Skript?$Handler=viskilde&sti=" . urlencode($Sti) . "\">Ikke vis linjenummer</a> ]</p>\n\n";
}
else {
$Vis .= "<p>[ <a href=\"$Skript?$Handler=viskilde&sti=" . urlencode($Sti) . "&vis=lnr\">Vis linjenummer</a> ]</p>\n\n";
}
$Vis .= "<p></p>\n\n<div class=\"kode\"><pre>";
if ($_GET["vis"] == "lnr") {
$Kode = explode("\n" , $Kode);
$Linjer = count($Kode);
foreach ($Kode as $Nr => $Linje) {
$Nr++;
$Vis .= "<span style=\"color: rgb(100,100,100);\">";
$Vis .= str_repeat(" " , strlen($Linjer) - strlen($Nr));
$Vis .= $Nr . "</span> " . $Linje . "\n";
}
}
else {
$Vis .= "$Kode";
}
$Vis .= "</pre></div>\n\n";
}
else {
$Vis = "<h1>Advarsel</h1>\n\n";
$Vis .= "<p>Enten er ingen fil definert, eller den kan ikke \n";
$Vis .= "åpnes for lesing.</p>\n\n<p>$Sti</p>\n\n";
}
}
elseif ($Handling == "rediger") {
$Sti = SjekkSti(urldecode($_GET["sti"]));
if (is_readable(StiAdgang($Sti)) && is_writeable(StiAdgang($Sti))) {
$Innmat = @file_get_contents(StiAdgang($Sti));
if (strlen($_POST["innmat"]) > 0) {
$Innmat = $_POST["innmat"];
$S1 = strlen($Innmat);
$Innmat = str_replace("\\" , "\\\\" , $Innmat);
$Innmat = str_replace("\\\"" , "\"" , $Innmat);
$Innmat = str_replace("\\\'" , "\'" , $Innmat);
$Innmat = str_replace("\\\\" , "\\" , $Innmat);
$S2 = strlen($Innmat);
if ($S1 == $S2) {
$Innmat = stripslashes($Innmat);
}
$Skriv = fopen(StiAdgang($Sti) , "w+");
fwrite($Skriv , $Innmat);
fclose($Skriv);
$_SESSION["wse_redigert"][$Sti]++;
Logg("Fila «$Sti» ble redigert.");
Header("Location: $Skript?$Handler=rediger&sti=" . urlencode($Sti));
die();
}
$Innmat = htmlspecialchars($Innmat);
$Redigert = (int) $_SESSION["wse_redigert"][$Sti];
$Vis = "<h1>Rediger $Sti</h1>\n\n";
$Vis .= "<p>Du har i løpet av den siste sesjonen redigert fila $Redigert gang(er).</p>\n\n";
$Vis .= "<form action=\"$Skript?$Handler=rediger&sti=" . urlencode($Sti) . "\" method=\"post\">\n";
$Vis .= "<p><textarea name=\"innmat\" rows=\"35\" class=\"rediger\">$Innmat</textarea></p>\n"; // cols=\"200\"
$Vis .= "<p><input type=\"submit\" class=\"knapp\" value=\"Send\" /></p>\n</form>\n";
}
else {
$Vis = "<h1>Advarsel</h1>\n\n";
$Vis .= "<p>Enten er ingen fil definert, eller den kan ikke \n";
$Vis .= "åpnes for både lesing og skriving.</p>\n\n<p>$Sti</p>\n\n";
}
}
elseif ($Handling == "nyttnavn") {
$Sti = SjekkSti(urldecode($_GET["sti"]));
if (is_writeable(StiAdgang($Sti))) {
$Vis = "<h1>Nytt navn $Sti</h1>\n\n";
if ($_POST["nyttnavn"]) {
$NySti = SjekkSti(dirname($Sti)) . "/" . basename($_POST["nyttnavn"]);
if (@rename(StiAdgang($Sti) , StiAdgang($NySti))) {
$Vis .= "<p>«$Sti» fikk navnet «" . htmlentities($NySti) . "».</p>\n\n";
Logg("«$Sti» fikk navnet «" . htmlentities($NySti) . "».");
}
else {
$Vis .= "<p>«$Sti» kunne ikke få et nytt navn.</p>\n\n";
}
}
else {
$Vis .= "<form action=\"$Skript?$Handler=nyttnavn&sti=" . urlencode($Sti) . "\" method=\"post\">\n";
$Vis .= "<table class=\"skjema\">\n";
$Vis .= "<tr>\n<td class=\"nok\">Navn:</td>\n";
$Vis .= "<td class=\"ver\"><input type=\"text\" name=\"nyttnavn\" value=\"" . basename($Sti) . "\" /></td>\n";
$Vis .= "<td class=\"ver\"><input type=\"submit\" class=\"knapp\" value=\"Send\" /></td>\n</tr>\n";
$Vis .= "</table>\n</form>\n\n";
}
}
else {
$Vis = "<h1>Advarsel</h1>\n\n";
$Vis .= "<p>Enten er ingen fil eller mappe definert, eller den kan ikke \n";
$Vis .= "åpnes for skriving.</p>\n\n<p>$Sti</p>\n\n";
}
}
elseif ($Handling == "kopier") {
$Sti = SjekkSti(urldecode($_GET["sti"]));
if (is_readable(StiAdgang($Sti))) {
$Vis = "<h1>Kopier $Sti</h1>\n\n";
if ($_POST["kopinavn"]) {
$NySti = SjekkSti(dirname($Sti)) . "/" . basename($_POST["kopinavn"]);
if (KopierObjekt(StiAdgang($Sti) , StiAdgang($NySti))) {
$Vis .= "<p>«$Sti» ble kopiert som «" . htmlentities($NySti) . "».</p>\n\n";
Logg("«$Sti» ble kopiert som «" . htmlentities($NySti) . "».");
}
else {
$Vis .= "<p>«$Sti» kunne ikke kopieres.</p>\n\n";
}
}
else {
$Vis .= "<form action=\"$Skript?$Handler=kopier&sti=" . urlencode($Sti) . "\" method=\"post\">\n";
$Vis .= "<table class=\"skjema\">\n";
$Vis .= "<tr>\n<td class=\"nok\">Navn:</td>\n";
$Vis .= "<td class=\"ver\"><input type=\"text\" name=\"kopinavn\" value=\"kopi_" . basename($Sti) . "\" /></td>\n";
$Vis .= "<td class=\"ver\"><input type=\"submit\" class=\"knapp\" value=\"Send\" /></td>\n</tr>\n";
$Vis .= "</table>\n</form>\n\n";
}
}
else {
$Vis = "<h1>Advarsel</h1>\n\n";
$Vis .= "<p>Enten er ingen fil eller mappe definert, eller den kan ikke \n";
$Vis .= "åpnes for lesing.</p>\n\n<p>$Sti</p>\n\n";
}
}
elseif ($Handling == "flytt") {
$Sti = SjekkSti(urldecode($_GET["sti"]));
if (is_writeable(StiAdgang($Sti))) {
$Vis = "<h1>Flytt $Sti</h1>\n\n";
$Mappe = dirname($Sti);
$NyMappe = $_POST["nymappe"];
if ($NyMappe) {
$Fil = basename($Sti);
if (substr(strrev($NyMappe) , 0 , 1) == "/") {
$NyMappe = substr($NyMappe , 0 , strlen($NyMappe) - 2);
}
if (FlyttObjekt(StiAdgang($Sti) , StiAdgang(SjekkSti("$NyMappe/$Fil")))) {
$Vis .= "<p>«$Sti» ble flyttet til «" . htmlentities("$NyMappe/$Fil") . "».</p>\n\n";
Logg("«$Sti» ble flyttet til «" . htmlentities("$NyMappe/$Fil") . "».");
}
else {
$Vis .= "<p>«$Sti» kunne ikke flyttes til «" . htmlentities("$NyMappe/$Fil") . "».</p>\n\n";
}
}
else {
$Vis .= "<form action=\"$Skript?$Handler=flytt&sti=" . urlencode($Sti) . "\" method=\"post\">\n";
$Vis .= "<table class=\"skjema\">\n";
$Vis .= "<tr>\n<td class=\"nok\">Plassering:</td>\n";
$Vis .= "<td class=\"ver\"><input type=\"text\" name=\"nymappe\" value=\"$Mappe\" /></td>\n";
$Vis .= "<td class=\"ver\"><input type=\"submit\" class=\"knapp\" value=\"Send\" /></td>\n</tr>\n";
$Vis .= "</table>\n</form>\n\n";
}
}
else {
$Vis = "<h1>Advarsel</h1>\n\n";
$Vis .= "<p>Enten er ingen fil eller mappe definert, eller den kan ikke \n";
$Vis .= "åpnes for skriving.</p>\n\n<p>$Sti</p>\n\n";
}
}
elseif ($Handling == "slett") {
$Sti = SjekkSti(urldecode($_GET["sti"]));
if (is_writeable(StiAdgang($Sti))) {
$Vis = "<h1>Slett $Sti</h1>\n\n";
if ($_POST["slettobjekt"] == "hakmed") {
if (SlettObjekt(StiAdgang($Sti))) {
$Vis .= "<p>«$Sti» er nå sletta.</p>\n\n";
Logg("«$Sti» ble sletta.");
}
else {
$Vis .= "<p>«$Sti» kunne ikke slettes.</p>\n\n";
}
}
else {
$Vis .= "<p>Vil du slette «$Sti»?</p>\n\n";
$Vis .= "<form action=\"$Skript?$Handler=slett&sti=" . urlencode($Sti) . "\" method=\"post\">\n";
$Vis .= "<input type=\"hidden\" name=\"slettobjekt\" value=\"hakmed\" />\n";
$Vis .= "<p><input type=\"submit\" class=\"knapp\" value=\"Ja, slett\" /></p>\n";
$Vis .= "</form>\n\n";
}
}
else {
$Vis = "<h1>Advarsel</h1>\n\n";
$Vis .= "<p>Enten er ingen fil eller mappe definert, eller den kan ikke \n";
$Vis .= "åpnes for skriving.</p>\n\n<p>$Sti</p>\n\n";
}
}
elseif ($Handling == "ekstra") {
$Sti = SjekkSti(urldecode($_GET["sti"]));
if (is_readable(StiAdgang($Sti))) {
$FilType = FilType(StiAdgang($Sti));
$Tabell = @unserialize(@file_get_contents(StiAdgang($Sti)));
$Stor = VisTall(filesize(StiAdgang($Sti)));
$Vis = "<h1>Ekstra $Sti</h1>\n\n";
if (is_array($Tabell)) {
$PrintR = $Tabell;
}
elseif (substr($FilType , 0 , 6) == "image/") {
$Info = GetImageSize(StiAdgang($Sti));
$Vis .= "<table class=\"skjema\">\n";
$Vis .= "<tr>\n<td class=\"nok\">Type:</td>\n<td class=\"ver\">$Info[mime]</td>\n</tr>\n";
$Vis .= "<tr>\n<td class=\"nok\">Bredde:</td>\n<td class=\"ver\">$Info[0]</td>\n</tr>\n";
$Vis .= "<tr>\n<td class=\"nok\">Høyde:</td>\n<td class=\"ver\">$Info[1]</td>\n</tr>\n";
$Vis .= "<tr>\n<td class=\"nok\">Størrelse:</td>\n<td class=\"ver\">$Stor</td>\n</tr>\n";
$Vis .= "</table>\n\n<p><img src=\"" . StiAdgang($Sti) . "\" style=\"width: $Info[0]px; height: $Info[1]px;\" alt=\"$Sti\" /></p>\n\n";
}
elseif ($FilType == "audio/mpeg") {
$Vis .= "<table class=\"skjema\">\n";
$Vis .= "<tr>\n<td class=\"nok\">Filtype:</td>\n";
$Vis .= "<td class=\"ver\">$FilType</td>\n</tr>\n";
$Vis .= "<tr>\n<td class=\"nok\">Størrelse:</td>\n";
$Vis .= "<td class=\"ver\">" . VisTall(Storrelse(StiAdgang($Sti))) . "</td>\n</tr>\n";
$Vis .= "</table>\n\n";
$Les = fopen(StiAdgang($Sti) , "r");
fseek($Les , -128 , SEEK_END);
if (fgets($Les , 4) == "TAG") {
$Tittel = trim(fgets($Les , 31));
$Artist = trim(fgets($Les , 31));
$Album = trim(fgets($Les , 31));
$Aor = trim(fgets($Les , 5));
$Kommentar = trim(fgets($Les , 29));
$Midl = trim(fgets($Les , 2));
$SporNr = hexdec(bin2hex(fgets($Les , 2)));
$Tittel = $Tittel ? $Tittel : " ";
$Artist = $Artist ? $Artist : " ";
$Album = $Album ? $Album : " ";
$Aor = $Aor ? $Aor : " ";
$Kommentar = $Kommentar ? $Kommentar : " ";
$SporNr = $SporNr ? $SporNr : " ";
$Vis .= "<table class=\"skjema\">\n";
$Vis .= "<tr>\n<td class=\"nok\">Tittel:</td>\n<td class=\"ver\">$Tittel</td>\n</tr>\n";
$Vis .= "<tr>\n<td class=\"nok\">Artist:</td>\n<td class=\"ver\">$Artist</td>\n</tr>\n";
$Vis .= "<tr>\n<td class=\"nok\">Album:</td>\n<td class=\"ver\">$Album</td>\n</tr>\n";
$Vis .= "<tr>\n<td class=\"nok\">År:</td>\n<td class=\"ver\">$Aor</td>\n</tr>\n";
$Vis .= "<tr>\n<td class=\"nok\">Kommentar:</td>\n<td class=\"ver\">$Kommentar</td>\n</tr>\n";
$Vis .= "<tr>\n<td class=\"nok\">Spornr:</td>\n<td class=\"ver\">$SporNr</td>\n</tr>\n";
$Vis .= "</table>\n\n";
}
else {
$Vis .= "<p>Kan ikke lese ID3-taggene til denne MP3-fila.</p>\n\n";
}
}
elseif (in_array(substr($FilType , 12) , array("x-tar, POSIX" , "x-gzip" , "x-bzip2" , "x-zip"))) {
$Vis .= "<table class=\"skjema\">\n";
$Vis .= "<tr>\n<td class=\"nok\">Filtype:</td>\n";
$Vis .= "<td class=\"ver\">$FilType</td>\n</tr>\n";
$Vis .= "<tr>\n<td class=\"nok\">Størrelse:</td>\n";
$Vis .= "<td class=\"ver\">" . VisTall(Storrelse(StiAdgang($Sti))) . "</td>\n</tr>\n";
$Vis .= "</table>\n\n";
$Kommando = array(
".tar" => "tar xf",
".tar.gz" => "tar zxf",
".tar.bz2" => "tar jxf",
".zip" => "unzip",
".rar" => "rar a");
if ($_POST["pakkut"] == "hakmed") {
foreach ($Kommando as $Type => $Skriv) {
if (substr($Sti , strlen($Sti) - strlen($Type)) == $Type) {
$FilEnd = $Type;
}
}
if ($Kommando[$FilEnd]) {
$Sti1 = dirname($Sti);
$Sti2 = basename($Sti);
@exec("cd ".StiAdgang($Sti1)." ; $Kommando[$FilEnd] $Sti2");
$Vis .= "<p>«$Sti» ble pakka ut.</p>\n\n";
Logg("«$Sti» ble pakka ut.");
}
else {
$Vis .= "<p>Finner ikke filending til «$Sti».</p>\n\n";
}
}
else {
$Vis .= "<form action=\"$Skript?$Handler=ekstra&sti=" . urlencode($Sti) . "\" method=\"post\">\n";
$Vis .= "<input type=\"hidden\" name=\"pakkut\" value=\"hakmed\" />\n";
$Vis .= "<p><input type=\"submit\" class=\"knapp\" value=\"Pakk ut\" /></p>\n</form>\n\n";
}
}
elseif ($FilType == "application/pdf") {
$Vis .= "<table class=\"skjema\">\n";
$Vis .= "<tr>\n<td class=\"nok\">Filtype:</td>\n";
$Vis .= "<td class=\"ver\">$FilType</td>\n</tr>\n";
$Vis .= "<tr>\n<td class=\"nok\">Størrelse:</td>\n";
$Vis .= "<td class=\"ver\">" . VisTall(Storrelse(StiAdgang($Sti))) . "</td>\n</tr>\n";
$Vis .= "</table>\n\n";
$Vis .= "<p>Eksportere fra PDF til HTML:</p>\n\n";
$Vis .= "<form action=\"$Skript?$Handler=ekstra&sti=" . urlencode($Sti) . "\" method=\"post\">\n";
$Vis .= "<p>Filbane: <input type=\"text\" name=\"htmlfil\" value=\"" . substr($Sti , 0 , strrpos($Sti , ".")) . ".html\" /> \n";
$Vis .= "<input type=\"submit\" class=\"knapp\" value=\"Send\" /></p>\n</form>\n\n";
if ($_POST["htmlfil"]) {
$_POST["htmlfil"] = StiAdgang(SjekkSti($_POST["htmlfil"]));
@exec("pdftohtml $Sti $_POST[htmlfil]");
$Vis .= "<p>«$Sti» ble eksportert som «$_POST[htmlfil]».</p>\n\n";
Logg("«$Sti» ble eksportert som «$_POST[htmlfil]».");
}
}
$Innmat = @file_get_contents(StiAdgang($Sti));
$Vis .= "<table class=\"skjema\">\n";
$Vis .= "<tr>\n<td class=\"nok\">md5:</td>\n";
$Vis .= "<td class=\"ver\">" . md5($Innmat) . "</td>\n</tr>\n";
$Vis .= "<tr>\n<td class=\"nok\">sha1:</td>\n";
$Vis .= "<td class=\"ver\">" . sha1($Innmat) . "</td>\n</tr>\n";
$Vis .= "</table>\n\n";
}
else {
$Vis = "<h1>Advarsel</h1>\n\n";
$Vis .= "<p>Enten er ingen fil definert, eller den kan ikke \n";
$Vis .= "åpnes for lesing.</p>\n\n<p>$Sti</p>\n\n";
}
}
elseif ($Handling == "vislogg") {
$Vis = "<h1>Vis logg</h1>\n\n";
if ($Adgang == 2) {
$Vis .= "<form action=\"wse.php\" method=\"get\">\n";
$Vis .= "<input type=\"hidden\" name=\"hand\" value=\"vislogg\" />\n";
$Vis .= "<p>Bruker: <select name=\"brk\">\n <option value=\"\">- admin -</option>\n";
foreach ($Brukere as $Bruker => $Info) {
$Vis .= " <option value=\"$Bruker\"" . ($_GET["brk"] == $Bruker ? " selected=\"selected\"" : "") . ">$Bruker</option>\n";
}
$Vis .= "</select>\n";
if ($_GET["vis"] == "stat") {
$Vis .= "<input type=\"hidden\" name=\"vis\" value=\"stat\" />\n";
}
$Vis .= "<input type=\"submit\" class=\"knapp\" value=\"Vis\" /></p>\n</form>\n\n";
if ($Brukere[($_GET["brk"])]) {
$LoggFil = "$BrkMappe/$_GET[brk]/wse.log";
}
else {
$LoggFil = "./wse.log";
}
}
else {
$LoggFil = "./wse.log";
}
if (is_readable(StiAdgang($LoggFil))) {
$LoggData = unserialize(@file_get_contents(StiAdgang($LoggFil)));
$LoggData = is_array($LoggData) ? $LoggData : array();
krsort($LoggData , SORT_NUMERIC);
if ($_GET["bld"] == "loggstat") {
$UkerA = array();
foreach ($LoggData as $Tid => $Logg) {
$UkerA[date("W" , $Tid)]++;
}
$UkerN = array_keys($UkerA);
$Maks = ceil(max($UkerA) / 5) * 5;
$Snitt = array_sum($UkerA) / count($UkerA);
$Bilde = ImageCreate(200,130);
$BG = ImageColorAllocate($Bilde,20,20,20);
$Grao = ImageColorAllocate($Bilde,50,50,50);
$Gronn = ImageColorAllocate($Bilde,160,210,0);
ImageLine($Bilde,0,0,199,0,$Grao);
ImageLine($Bilde,0,9,199,9,$Grao);
ImageLine($Bilde,0,120,199,120,$Grao);
ImageLine($Bilde,0,129,199,129,$Grao);
foreach (range(0 , 20) as $A) {
ImageLine($Bilde,$A*10,0,$A*10,9,$Grao);
ImageLine($Bilde,$A*10,120,$A*10,129,$Grao);
}
ImageLine($Bilde,199,0,199,9,$Grao);
ImageLine($Bilde,199,120,199,129,$Grao);
foreach ($UkerN as $Nr => $Uke) {
ImageLine($Bilde,199-($Nr*5)+5,114-(($UkerA[$FrUke]/$Maks)*100),199-($Nr*5),114-(($UkerA[$Uke]/$Maks)*100),$Gronn);
$FrUke = $Uke;
}
Header("Content-type: image/png");
ImagePNG($Bilde);
ImageDestroy($Bilde);
die();
}
$Vis .= "<p>";
$Vis .= $Adgang == 2 ? "All logg lagres i «$LoggFil». \n" : "";
$Vis .= "Alle tider er «dd.mm.åååå - tt:mm:ss».</p>\n\n<p></p>\n\n<div class=\"kode\"><h2 style=\"margin: 0;\">Statistikk ";
if ($_GET["vis"] == "stat") {
$Vis .= "<a href=\"$Skript?$Handler=vislogg" . ($Adgang == 2 && $_GET["brk"] ? "&brk=$_GET[brk]" : "") . "\" style=\"font-weight: bold;\">«</a>";
}
else {
$Vis .= "<a href=\"$Skript?$Handler=vislogg" . ($Adgang == 2 && $_GET["brk"] ? "&brk=$_GET[brk]" : "") . "&vis=stat\" style=\"font-weight: bold;\">»</a>";
}
$Vis .= "</h2>\n";
if ($_GET["vis"] == "stat") {
$Vis .= "<p>Kurva nedenfor viser antall loggføringer per uke de siste 40 ukene.</p>\n<p></p>\n\n";
$Vis .= "<div style=\"width: 200px; height: 130px; background-image: url('$Skript?$Handler=vislogg&bld=loggstat" . ($Adgang == 2 && $_GET["vis"] == "stat" ? "&brk=$_GET[brk]" : "") . "');\"> </div>\n";
$UkerA = array();
foreach ($LoggData as $Tid => $Logg) {
$UkerA[date("W" , $Tid)]++;
}
$UkerN = array_reverse(array_keys($UkerA));
$Vis .= "<p>[ Maksimum: " . max($UkerA) . " ] [ Gjennomsnitt: " . round(array_sum($UkerA) / count($UkerA) , 2) . " ] \n";
$Vis .= "[ Denne uka (nr " . date("W") . "): " . intval($UkerA[($UkerN[count($UkerN)-1])]) . " ]</p>\n";
}
$Vis .= "</div>\n\n<p>";
$A = 0;
foreach ($LoggData as $Tid => $Logg) {
$Vis .= $A > 0 ? "<br />\n" : "";
$Vis .= "<strong>" . date("d.m.Y - H:i:s" , $Tid) . "</strong> $Logg";
$A++;
}
$Vis .= "</p>\n\n";
}
else {
$Vis .= "<p>Loggfila kan ikke åpnes.</p>\n\n";
}
}
elseif ($Handling == "visplass") {
if ($_GET["vis"] == "diagram") {
$Tilg = $Adgang == 2 ? $AllPlass : ($Brukere[($_SESSION["wse_bruker"])]["plass"] ? $Brukere[($_SESSION["wse_bruker"])]["plass"] : $BrkPlass);
$Bruk = Storrelse(StiAdgang("."));
$Pros = ($Bruk / $Tilg) * 100;
$Grad = min(360 , $Pros * 3.6);
$Bilde = ImageCreate(600,200);
$BG = ImageColorAllocate($Bilde,0,0,0);
$Skrift = ImageColorAllocate($Bilde,200,200,200);
$Ledig = ImageColorAllocate($Bilde,50,50,50);
if ($Pros < 90) {
$Brukt = ImageColorAllocate($Bilde,100,200,0);
}
else {
$Brukt = ImageColorAllocate($Bilde,200,100,0);
}
ImageString($Bilde,3,350,50,"Plass tilgjengelig:",$Skrift);
ImageString($Bilde,3,350,70,VisTall($Tilg)." B",$Skrift);
ImageString($Bilde,3,350,120,"Brukt plass:",$Skrift);
ImageString($Bilde,3,350,140,VisTall($Bruk)." B (".number_format($Pros,2,",","")." %)",$Skrift);
ImageFilledArc($Bilde,175,100,300,150,$Grad,359,$Ledig,IMG_ARC_PIE);
ImageFilledArc($Bilde,175,90,300,150,0,$Grad,$Brukt,IMG_ARC_PIE);
Header("Content-type: image/png");
ImagePNG($Bilde);
ImageDestroy($Bilde);
die();
}
$Vis = "<h1>Plassforbruk</h1>\n\n";
$Vis .= "<div style=\"width: 600px; height: 200px; background-color: transparent; background-image: url('$Skript?$Handler=visplass&vis=diagram'); background-repeat: no-repeat;\">­</div>\n\n";
}
elseif ($Handling == "mappeov") {
$Vis = "<h1>Mappeoversikt</h1>\n\n";
}
else {
$Vis = "<h1>Advarsel</h1>\n\n";
$Vis .= "<p>Du har valgt en handling som ikke er definert.</p>\n\n";
}
}
else {
$Vis = "<h1>Logg inn</h1>\n\n";
$Vis .= "<form action=\"$_SERVER[REQUEST_URI]\" method=\"post\" name=\"skjema\">\n";
$Vis .= "<table class=\"skjema\">\n";
$Vis .= "<tr>\n<td class=\"nok\">Bruker:</td>\n";
$Vis .= "<td class=\"ver\"><input type=\"text\" name=\"wse_bruker\" /></td>\n</tr>\n";
$Vis .= "<tr>\n<td class=\"nok\">Passord:</td>\n";
$Vis .= "<td class=\"ver\"><input type=\"password\" name=\"wse_passord\" /></td>\n</tr>\n";
$Vis .= "<tr>\n<td class=\"ver\">­</td>\n";
$Vis .= "<td class=\"ver\"><input type=\"submit\" class=\"knapp\" value=\"Logg inn\" /></td>\n</tr>\n";
$Vis .= "</table>\n</form>\n\n";
}
function Logg ($Logg) {
global $Adgang , $_SESSION , $BrkMappe;
if ($Adgang == 1) {
$LoggFil = "$BrkMappe/$_SESSION[wse_bruker]/wse.log";
}
else {
$LoggFil = "./wse.log";
}
$LoggData = unserialize(@file_get_contents($LoggFil));
$LoggData = is_array($LoggData) ? $LoggData : array();
if ($Skriv = @fopen($LoggFil , "w+")) {
$Nokkler = array_reverse(array_keys($LoggData));
$LoggData[time()] = $Logg;
if ($Logg == $LoggData[($Nokkler[0])]) {
unset($LoggData[($Nokkler[0])]);
}
$Nokler = array_keys($LoggData);
while (time() - $Nokler[0] > (3600 * 24 * 7 * 20) && count($Nokler) > 1000) {
unset($LoggData[($Nokler[0])]);
$Nokler = array_keys($LoggData);
}
@fwrite($Skriv , serialize($LoggData));
@fclose($Skriv);
return TRUE;
}
else {
return FALSE;
}
}
function SjekkSti ($Sti) {
global $OverRot;
$Drep1 = substr($Sti , 0 , 2) == "..";
$Drep2 = substr($Sti , 0 , 1) == "/";
$Drep3 = ereg("[a-zA-Z]://" , $Sti);
if (!$Sti or ($Drep1 && !$OverRot) or $Drep2 or $Drep3) {
$Sti = ".";
}
return $Sti;
}
function StiAdgang ($Sti) {
global $Adgang , $_SESSION , $BrkMappe , $Brukere;
if ($Adgang == 2) {
return $Sti;
}
elseif ($Adgang == 1) {
$Under = $Brukere[($_SESSION["wse_bruker"])]["mappe"] ? $Brukere[($_SESSION["wse_bruker"])]["mappe"] : "$BrkMappe/$_SESSION[wse_bruker]";
$Sti = (substr($Sti , 0 , 2) == "./" or $Sti == ".") ? substr($Sti , 2) : $Sti;
return $Under . (strlen($Sti) > 0 ? "/$Sti" : "");
}
}
function Storrelse ($Sti) {
$Stor = filesize($Sti);
if (is_dir($Sti)) {
$Les = @opendir($Sti);
while ($Obj = @readdir($Les)) {
if ($Obj <> "." && $Obj <> "..") {
$Stor += Storrelse("$Sti/$Obj");
}
}
@closedir($Les);
}
return $Stor;
}
function VisTall ($Tall) {
return str_replace("," , " " , number_format($Tall));
}
function OppMappe ($Sti) {
if ($Sti == ".") {
return "..";
}
elseif (strlen(str_replace(array("." , "/") , "" , $Sti)) <= 0) {
return "../$Sti";
}
else {
if (substr(strrev($Sti) , 0 , 1) == "/") {
$Sti = substr($Sti , 0 , strlen($Sti) - 1);
}
return substr($Sti , 0 , strrpos($Sti , "/"));
}
}
function FilType ($FilNavn) {
$Res = `file -bi '$FilNavn'`;
if ($SemiPos = strpos($Res , ";")) {
$FilType = substr($Res, 0 , $SemiPos);
}
else {
$FilType = $Res;
}
return trim($FilType);
}
function KopierObjekt ($Sti1 , $Sti2) {
if (is_dir($Sti1)) {
$Res = @mkdir($Sti2);
$Les = @opendir($Sti1);
while ($Obj = @readdir($Les)) {
if ($Obj <> "." && $Obj <> "..") {
$Res = KopierObjekt("$Sti1/$Obj" , "$Sti2/$Obj") && $Res ? TRUE : FALSE;
}
}
@closedir($Les);
return $Res;
}
else {
return @copy($Sti1 , $Sti2);
}
}
function FlyttObjekt ($Sti1 , $Sti2) {
$Res = KopierObjekt($Sti1 , $Sti2);
if ($Res) {
$Res = SlettObjekt($Sti1) && $Res ? TRUE : FALSE;
}
return $Res;
}
function SlettObjekt ($Sti) {
if (is_dir($Sti)) {
$Slett = TRUE;
$Les = @opendir($Sti);
while ($Obj = @readdir($Les)) {
if ($Obj <> "." && $Obj <> "..") {
$Slett = SlettObjekt("$Sti/$Obj") ? $Slett : FALSE;
}
}
@closedir($Les);
return @rmdir($Sti) ? $Slett : FALSE;
}
else {
return @unlink($Sti) ? TRUE : FALSE;
}
}
function MappeOv ($Sti) {
global $Skript , $Handler;
$Liste = array();
$Les = @opendir(StiAdgang(SjekkSti($Sti)));
while ($Obj = @readdir($Les)) {
if (is_dir(StiAdgang(SjekkSti("$Sti/$Obj"))) && $Obj <> "." && $Obj <> "..") {
$Liste[] = $Obj;
}
}
@closedir($Les);
if (count($Liste) > 0) {
sort($Liste);
echo "<ul>\n";
foreach ($Liste as $Obj) {
echo "<li><a href=\"$Skript?$Handler=vismappe&sti=$Sti/$Obj\">$Obj</a>";
echo MappeOv("$Sti/$Obj");
echo "</li>\n";
}
echo "</ul>";
}
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo $_SERVER["HTTP_HOST"]; ?> - WebServer Explorer</title>
<link rel="shortcut icon" type="image/icon" href="wse.ico" />
<link rel="stylesheet" type="text/css" href="wse.css" />
</head>
<body<?php
if ($LoggInn[$Sikker] <> $Sikker) {
echo " onload=\"document.skjema.wse_bruker.focus()\"";
}
?>>
<div id="ramme">
<div id="topp"><span>WebServer Explorer</span><br />- De væi tu kønnekt tu jør særver vittøtt FTP</div>
<div id="innhold">
<?php
echo $Vis;
if ($PrintR) {
echo "<div class=\"kode\"><pre>";
print_r($PrintR);
echo "</pre></div>\n\n";
die();
}
elseif ($Handling == "mappeov") {
echo MappeOv(".") . "\n\n";
}
?>
</div>
</div>
<div id="bunn"><?php
$Sign = $_SERVER["SERVER_SIGNATURE"];
echo substr($Sign , 9 , strlen($Sign) - 20);
?> | Sist oppdatert: <?php
echo date("d.m.Y - H:i:s" , filemtime($Skript));
?> | <a href="<?php
echo "$Skript?$Handler";
?>=vislogg">Vis logg</a> | <a href="<?php
echo "$Skript?$Handler";
?>=visplass">Plassforbruk</a> | <a href="<?php
echo "$Skript?$Handler";
?>=mappeov">Mappeoversikt</a> | <a href="<?php
echo "$Skript?$Handler";
?>=loggut">Logg ut</a></div>
</body>
</html>