Temat: http/php manager plików
funkcje:
- usuwanie / kopiowanie / edycja plików
- tworzenie linków
- tworzenie i usuwanie katalogów
- graficzny chmod
- możliwość definiowania użytkowników bez prawa zapisu
- możliwość ukrycia zawartości wybranych katalogów
- ładowanie plików z poziomu przeglądarki
- szybkie udostępnianie plików i katalogów przez http
- przekazywanie komend do shella (z możliwością zastrzeżenia wybranych poleceń)
wymagania:
- serwer http (skrypt oczywiście ma tylko takie uprawnienia jak serwer)
- obsługa php
- prawo zapisu i odczytu w /tmp dla serwera
wodotryski:
narazie brak
skrypt będzie wymagał utworzenia pliku z użytkownikami (instrukcja jest wyświetlana po pierwszej próbie zalogowania się)
nazwa pliku zawierającego skrypt nie odgrywa roli.
komendy 'reboot' i 'firstboot' są domyślnie zablokowane (do zmiany w konfiguracji na początku skryptu - wszystko jest opisane)
zeby zablokować wyświetkanie wybranego katalogu umieść z nim plik 'zakaz_wjazdu' lub 'zakaz_wjazdu_admin'. pierwszy zablokuje wyświetlanie dla użytkownika, drugi dla wszystkich.
logowanie z uzyciem cookie i pliku-tokena.
blokując komende definiujesz TYLKO komende - nie jej patametry (zablokowanie 'ls' zablokuje również 'ls -al', 'ls /dir' itd)
do utworzenia listy użytkowników będzie potrzebny generator md5 (np. ten: http://patryk.x10.mx/php_file_manager/generator.php )
WAŻNE: przeczytaj komentarze w skrypcie. zeby działał upload plików wiekszych niz kilka kilo, konieczna jest konfiguracja.
(proste jak drut, ale trzeba to zrobić)
sam skrypt wtgląda tak:
<?php
//klasy CSS:
// link_dir - link przejścia do katalogu (tylko tabela)
// link_opcje - 'przycisk' [opcje]
//
// skrypt obsluguje dwa rodzaje użytkowników: admin i user
// admin ma pełną kontrole nad systemem plików, natomiast
// user może sobie tylko pooglądać ;)
// użytkowników definiujemy tworząc plik /etc/php_file_manager/users
// składnia pliku to: 'użytkownik:hash_md5_hasła:admin' - dla admina
// i 'użytkownik:hash_md5_hasła:user' - dla "read only"
// (bez apostrofów oczywiście)
// jeden użytkownik na wiersz. możesz ich zdefiniować ile chcesz
// serwer musi mieć też prawo zapisu i odczytu w /tmp
////////////////////////////////////////////konfiguracja///////////////////////////////////////////////////
$GLOBALS['sessionv'] = 60 * 60 * 24; //ważność sesji - po takiej ilości sekund zostaniesz wylogowany
$strefa_czasu = 'CET'; //strefa czasowa. jak trzeba, to zmienić ;)
$tabela_kolor1 = '#CCCCCC'; //
$tabela_kolor2 = '#FFFFFF'; //tych dwuch chyba nie trzeba tłumaczyć ;)
$date_format = 'd-m-Y H:i:s'; //format daty do tabeli(w internecie jest dobrze opisane, jak go zdefiniować dla php)
$link_tag = ' **link**'; //indykator linku (jeżeli element jest linkiem, to ten ciąg pojawi sie za jego nazwą)
$www_link_dir = '/www/public/'; //katalog, dla "szybkich linków" - żeby działało udostępnianie
//w ten sposób, serwer musi obsługiwać symlinki)
$www_link_prefix = 'http://twoja_domena.com/public/'; //adres, pod którym widać katalog $www_link_dir
//(np. do wygodnego wklejania w komunikatory)
//jeżeli nie zostanie ustawiony, wszystko dalej będzie działać.
//ale może sie to okazać upierdliwe ;)
$no_access = 'zakaz_wjazdu'; //jeżeli taki plik istnieje w jakimś katalogu, katalog nie
//zostanie wylistowany jeżeli użytkownik nie jest administratorem.
$no_access_admin = 'zakaz_wjazdu_admin'; //jeżeli istnieje, nikt nie zobaczy zawartości
//(to tak, zeby sobie samemu przez przypadek nie namieszać)
////filtr komend
$command_filter_list = '|reboot|firstboot|wget|'; //(każda konemda musi być między dwoma znakami "|").
$command_filter_mode = 'off'; //filtr obsluguje tryby 'allow', 'deny' i 'off'
//'deny' - nie można wykontwać komend z listy
//'allow' - można wykonywać tylko komendy z listy
//'off' - filtr jest wyłączony
////opcje istotne tylko przy ładowaniu plików
///niestety w ten sposób nie da sie zmienić wartości 'max_execution_time' i 'memory_limit' z php.ini
///musisz to zrobić "na piechotę" - sorry :D
///
///'max_execution_time' to paksymalny czas wykonywania skryptu (musi wystarczyć na załadowanie pliku, poskładanie plików
/// tymczasowych do kupy i skopiowanie gotowego pliku do docelowego katalogu)
///'memory_limit' to limit pamięci operacyjnej (pewnie nie bedzie odgrywał wiekszej roli, ale tak na wypadek W. napisałem)
$set_upload_ini = FALSE; // jeżeli FALSE, poniższe ustawienia zostaną pominięte (php użyje ustawień z php.ini)
// zmień wartość na TRUE, jeżeli chcesz ładować duże pliki na serwer
$max_input_time = 600; // maksymalny czas odbierania danych (w sekundach)
// (musi wystarczyć na przesłanie pliku)
$post_max_size = '200M'; // maksymalny rozmiar danych POST (czyli pliku w wypadku uploadu) - tu 200MB
$upload_max_filesize = '200M'; // maksymalny rozmiar pliku - tu 200MB
$upload_tmp_dir = '/mnt/nas/tmp'; // katalog na pliki tymczasowe .Jeżeli używasz lighttpd musisz zmienić jeszcze
// ustawienia samego serwera edytując plik lihttpd.conf (parametr 'server.upload-dirs'),
// bo z jakichś powodów lighttpd tam właśnie ładuje wsystkie pliki tymczasowe (oczywiście musi tam
// być odpowiednia ilość miejsca. w przypadku OpenWrt /tmp odpada - konieczna zmiana)
//odkomentowanie następnego wiersza (usuniecie '//' z przodu spowoduje zablokowanie wyświetlania błądów.
// ini_set('display_errors', 0);
////////////////////////////////////////////////////koniec konfiguracji////////////////////////////////////////
ini_set('date.timezone', $strefa_czasu);
if($set_upload_ini) {
ini_set('max_input_time', $max_input_time);
ini_set('post_max_size', $post_max_size);
ini_set('upload_max_filesize', $upload_max_filesize);
ini_set('upload_tmp_dir', $upload_tmp_dir);
}
if(isset($_GET['logout'])) {
$tokenfile = '/tmp/php_file_manager_' . $_COOKIE['user'] . '.hash';
unlink($tokenfile);
setcookie ("hash", $hash, - 86400, "/");
setcookie ("user", $nazwa, - 86400, "/");
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' . "\n";
echo '<html xmlns="http://www.w3.org/1999/xhtml">' . "\n";
echo '<head>' . "\n";
echo '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />' . "\n";
echo '<title>PHP File Manager</title>' . "\n";
echo '<pre>' . "\n";
echo 'Do zobaczenia ;)<br />' . "\n";
echo '<form action="' . $_SERVER['PHP_SELF'] . '" method="post">' . "\n";
echo 'login <input name="login" type="text" size="20" /><br />' . "\n";
echo 'hasło <input name="haslo" type="password" size="20" /><br />' . "\n";
echo '<input name="submit" type="submit" value=" Zaloguj " />' . "\n";
echo '</form>' . "\n";
echo '</pre>' . "\n";
echo '</body>' . "\n";
echo '</html>' . "\n";
die;
}
if(isset($_COOKIE['user'])) {
$GLOBALS['username'] = $_COOKIE['user'];
$GLOBALS['hash'] = $_COOKIE['hash'];
//logowanie ciasteczkowe
$file = '/tmp/php_file_manager_' . $_COOKIE['user'] . '.hash';
if(file_exists($file)) {
$data = explode("\n", file_get_contents($file));
if($data[0] === $_COOKIE['hash']) {
$GLOBALS['auth'] = TRUE;
if($data[1] === 'admin') {
$GLOBALS['admin'] = TRUE;
$GLOBALS['usertype'] = $data[1];
}else{
$GLOBALS['admin'] = FALSE;
$GLOBALS['usertype'] = $data[1];
}
}else{
$GLOBALS['auth'] = FALSE;
unlink($file);
}
}else{
$GLOBALS['auth'] = FALSE;
}
}else{
$GLOBALS['auth'] = FALSE;
}
if ($GLOBALS['auth'] === FALSE) {
if(file_exists('/etc/php_file_manager/users')) {
if(isset($_POST['login']) and isset($_POST['haslo'])) {
$users = file_get_contents('/etc/php_file_manager/users');
$users = explode("\n", $users);
$i = 0;
while(isset($users[$i])) {
$tmp = explode(':', $users[$i]);
$GLOBALS['users'][$tmp[0]][$tmp[1]] = $tmp[2]; ///$GLOBALS['users']['nazwa_użutkownika']['md5hash'] = typ_konta
$i++;
}
$nazwa = $_POST['login'];
$hash = md5($_POST['haslo']);
if(isset($GLOBALS['users'][$nazwa][$hash])) {
$GLOBALS['auth'] = TRUE;
$valid = time() + $GLOBALS['sessionv'];
$nazwa = $_POST['login'];
$hash = md5($_POST['haslo']);
setcookie ("hash", $hash, $valid, "/");
setcookie ("user", $nazwa, $valid, "/");
$GLOBALS['firstlogin'] = TRUE;
$toput = $hash ."\n". $GLOBALS['users'][$nazwa][$hash];
$tokenfile = '/tmp/php_file_manager_' . $nazwa . '.hash';
file_put_contents($tokenfile, $toput);
if ($GLOBALS['users'][$nazwa][$hash] === 'admin') {
$GLOBALS['admin'] = TRUE;
}else{
$GLOBALS['admin'] = FALSE;
}
}else{
$GLOBALS['auth'] = FALSE;
}
}
}else{
echo 'błąd: nie można otworzyć pliku haseł<br />';
echo 'upewnij się, czy plik \'/etc/php_file_manager/users\' istnieje<br />';
echo 'i czy serwer ma prawo odczytu do tego pliku<br />';
echo 'składnia pliku jest następująca: user:hasło(md5):typ. np.:<br />';
echo '<pre><code>';
echo 'kuba:1f3870be274f6c49b3e31a0c6728957f:admin' . "\n";
echo 'tomek:e734dc5328d5a555de5f06c7c9459667:user';
echo '</code></pre><br />';
echo 'pamiętaj! nazwy użytkowników nie mogą zawierać \':\'<br />';
echo 'do wygenerowania pliku z hasłami możesz użuc <a href="http://patryk.x10.mx/php_file_manager/generator.php">TEGO GENERATORA</a><br />';
}
}
unset ($GLOBALS['user']);
?>
<!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-2" />
<title>PHP File Manager</title>
<style type="text/css">
<!--
a:link {
color: #00F;
text-decoration: none;
}
a:visited {
color: #00F;
text-decoration: none;
}
a:hover {
color: #0C6;
text-decoration: underline;
}
a:active {
color: #F00;
text-decoration: none;
}
.x {
text-decoration: line-through;
color: #00F;
}
-->
</style>
</head>
<body>
<?php
$GLOBALS['www_prefix'] = $www_link_prefix;
$auth = $GLOBALS['auth'];
$admin = $GLOBALS['admin'];
//ustalenie bierzącego katalogu
if(isset($_GET['dir'])) {
$GLOBALS['katalog'] = $_GET['dir'];
}else{
$GLOBALS['katalog'] = '/';
}
$dir = $GLOBALS['katalog'];
///////////
////funkcje
///////////
function my_chmod($file, $rights) {
///funkcja chmod
$file = str_replace('//', '/', $file);
$komenda = 'chmod ' . $rights . ' "' . $file . '"';
shell_exec($komenda);
echo 'wykonano [ ' . $komenda . ' ]';
}
function my_link($target, $link) {
///funkcja link
$target = str_replace('//', '/', $target);
$komenda = 'ln -s "' . $target . '" "' . $link . '"';
shell_exec($komenda);
if(is_link($link)) {
echo 'utworzono link [ ' . $link . ' ]';
}else{
echo 'BŁĄD: tworzenie linku nie powiodło się';
}
}
function my_qlink($dir, $target) {
///szybki link do serwera
$target = str_replace('//', '/', $target);
$link = implode('[]', explode('/', $target));
$link = implode('_', explode(' ', $link));
$linkname = $link;
$link = $dir . $link;
$komenda = 'ln -s "' . $target . '" "' . $link . '"';
shell_exec($komenda);
if(is_link($link)) {
echo 'utworzono link [ ' . $link . ' ]<br />';
echo 'plik jest dostępny tutaj:<br />';
echo '<a href="' . $GLOBALS['www_prefix'] . $linkname . '">' . $GLOBALS['www_prefix'] . $linkname . '</a><br />';
echo 'aby zatrzymać udostępnianie pliku usuń<br />';
echo '[ ' . $linkname . ' ]<br />';
echo 'z katalogu [ ' . $dir . ' ]';
}else{
echo 'BŁĄD: tworzenie linku nie powiodło się';
}
}
function edytor($file) {
//edytor
if(isset($_POST['content'])) {
file_put_contents($file, trim(stripslashes($_POST['content'])));
}
echo '<pre><form action="' . $_SERVER['PHP_SELF'] . '?context=edytor&object=' . $file . '" method="post">';
echo '<textarea name="content" cols="57" rows="28">' . file_get_contents($file) .'</textarea><br />';
echo '<input name="submit" type="submit" value="zapisz" />';
echo '</form></pre>';
}
function my_copy($object, $cel, $typ) {
$komenda = 'cp -r "' . $object . '" "' . $cel . '"';
shell_exec($komenda);
if($typ === 'dir') {
if(is_dir($cel)) {
echo 'skopiowano';
}else{
echo 'BŁĄD';
}
}
if($typ === 'slink') {
if(file_exists($cel)) {
echo 'skopiowano';
}else{
echo 'BŁĄD';
}
}
if($typ === 'file') {
if(file_exists($cel)) {
echo 'skopiowano';
}else{
echo 'BŁĄD';
}
}
}
//tworzenie katalogu
if($auth) {
if($admin) {
if(isset($_POST['mkdir'])) {
$new_folder = $dir . $_POST['mkdir'];
mkdir($new_folder);
}
}
}
$command = 'ls -1a \'' . $dir . '\'';
$output0 = shell_exec($command);
$no_access = "\n" . $no_access . "\n";
$no_access_admin = "\n" . $no_access_admin . "\n";
//czy jest plik zakazu?
if($admin === FALSE) {
if(strpos($output0, $no_access)) {
unset($output0);
}
}
if(strpos($output0, $no_access_admin)) {
unset($output0);
}
if($auth) {
if(isset($_GET['context'])) {
if($admin) {
if($_GET['context'] === 'edytor') {
edytor($_GET['object']);
}
if($_GET['context'] === 'slink') {
//popup dla katalogu-linku//////////////////////////////////////////////////////
if(isset($_GET['rm'])) {
if(unlink($_GET['object'])) {
echo '<pre>symlink został usunięty</pre>';
}else{
echo '<pre>BŁĄD: SYMLINK NIE ZOSTAŁ USUNIĘTY</pre>';
}
}else{
echo '<pre>dir/symlink [ ' . $_GET['object'] . ' ]<hr />';
echo '<a href="' . $_SERVER['PHP_SELF'] . '?context=slink&object=' . $_GET['object'] . '&rm=yes">[[usuń]]</a> '; // ok
echo '<a href="' . $_SERVER['PHP_SELF'] . '?context=slink&object=' . $_GET['object'] . '&do=cp">[[skopiuj]]</a> ';
echo '<a href="' . $_SERVER['PHP_SELF'] . '?context=slink&object=' . $_GET['object'] . '&do=qlink">[[udostępnij]]</a> ';
echo '<form action="' . $_SERVER['PHP_SELF'] . '" method="get"><input name="do" type="hidden" value="cp" /><input name="context" type="hidden" value="slink" /><input name="object" type="hidden" value="' . $_GET['object'] . '" />cel <input name="cel" type="text" size="10" /><input name="submit" type="submit" value="skopiuj" /></form>';
echo '<form action="'. $_SERVER['PHP_SELF'] . '?context=slink&object=' . $_GET['object'] . '&do=chmod" method="post">chmod <input name="value" type="text" size="3" maxlength="3" /><input name="submit" type="submit" value="zmień" /></form>';
echo '<form action="'. $_SERVER['PHP_SELF'] . '?context=slink&object=' . $_GET['object'] . '&do=link" method="post"> link <input name="value" type="text" size="15" /><input name="submit" type="submit" value="utwórz" /></form>';
if(isset($_GET['do'])) {
// tworzenie linku
if($_GET['do'] === 'link') {
$target = '/' . implode('/', explode('/', $_GET['object']));
my_link($target, $_POST['value']);
}
if($_GET['do'] === 'qlink') {
my_qlink($www_link_dir, $_GET['object']);
}
if($_GET['do'] === 'chmod') {
my_chmod($_GET['object'], $_GET['value']);
}
if($_GET['do'] === 'cp') {
my_copy($_GET['object'], $_GET['cel'], $_GET['context']);
}
}
echo '</pre>';
}
////////////////////////////////////////////////////////////////////////////////////
}
if($_GET['context'] === 'file') { //context file
if(isset($_GET['object'])) {
//menu pliku (....?context=file&object=...)
if(isset($_GET['rm'])) {
if(unlink($_GET['object'])) {
echo '<pre>plik został usunięty</pre>';
}else{
echo '<pre>BŁĄD: PLIK NIE ZOSTAŁ USUNIĘTY</pre>';
}
}else{
echo '<pre>Plik [ ' . $_GET['object'] . ' ]<hr />';
echo '<a href="' . $_SERVER['PHP_SELF'] . '?context=file&object=' . $_GET['object'] . '&rm=yes">[[usuń]]</a> '; // ok
echo '<a href="' . $_SERVER['PHP_SELF'] . '?context=edytor&object=' . $_GET['object'] . '">[[edytuj]]</a> ';
echo '<a href="' . $_SERVER['PHP_SELF'] . '?context=file&object=' . $_GET['object'] . '&do=qlink">[[udostępnij]]</a> ';
echo '<form action="' . $_SERVER['PHP_SELF'] . '" method="get"><input name="do" type="hidden" value="cp" /><input name="context" type="hidden" value="file" /><input name="object" type="hidden" value="' . $_GET['object'] . '" />cel <input name="cel" type="text" size="10" /><input name="submit" type="submit" value="skopiuj" /></form>';
echo '<form action="'. $_SERVER['PHP_SELF'] . '?context=file&object=' . $_GET['object'] . '&do=chmod" method="post">chmod <input name="value" type="text" size="3" maxlength="3" /><input name="submit" type="submit" value="zmień" /></form>';
echo '<form action="'. $_SERVER['PHP_SELF'] . '?context=file&object=' . $_GET['object'] . '&do=link" method="post"> link <input name="value" type="text" size="15" /><input name="submit" type="submit" value="utwórz" /></form>';
if(isset($_GET['do'])) {
// tworzenie linku
if($_GET['do'] === 'link') {
$target = '/' . implode('/', explode('/', $_GET['object']));
my_link($target, $_POST['value']);
}
if($_GET['do'] === 'qlink') {
my_qlink($www_link_dir, $_GET['object']);
}
if($_GET['do'] === 'chmod') {
my_chmod($_GET['object'], $_POST['value']);
}
if($_GET['do'] === 'cp') {
my_copy($_GET['object'], $_GET['cel'], $_GET['context']);
}
}
echo '</pre>';
}
}
}
if($_GET['context'] === 'dir') { //context dir
if(isset($_GET['object'])) {
// menu katalogu (....?context=dir&object=...)
if(isset($_GET['rm'])) {
if(rmdir($_GET['object'])) {
echo 'Katalog [ ' . $_GET['object'] . ' ]<hr />';
echo '<pre>katalog został usunięty</pre>';
}else{
echo 'Katalog [ ' . $_GET['object'] . ' ]<hr />';
echo '<pre>BŁĄD: KATALOG NIE ZOSTAŁ USUNIĘTY<br />';
echo 'Prawdopodobnie nie jest pusty lub nie masz.<br />';
echo 'odpowiednich uprawnień';
echo 'Rekusywne usuwanie wiesza serwer...<br />';
echo 'Sprawdź swoje uprawnienia i/lub oprużnij katalog';
}
}else{
echo '<pre>Katalog [ ' . $_GET['object'] . ' ]<hr />';
echo '<a href="' . $_SERVER['PHP_SELF'] . '?context=dir&object=' . $_GET['object'] . '&rm=yes">[[usuń]]</a> '; //ok
echo '<a href="' . $_SERVER['PHP_SELF'] . '?context=dir&object=' . $_GET['object'] . '&do=qlink">[[udostępnij]]</a> ';
echo '<form action="' . $_SERVER['PHP_SELF'] . '" method="get"><input name="do" type="hidden" value="cp" /><input name="context" type="hidden" value="dir" /><input name="object" type="hidden" value="' . $_GET['object'] . '" />cel <input name="cel" type="text" size="10" /><input name="submit" type="submit" value="skopiuj" /></form>';
echo '<form action="'. $_SERVER['PHP_SELF'] . '?context=dir&object=' . $_GET['object'] . '&do=chmod" method="post">chmod <input name="value" type="text" size="3" maxlength="3" /><input name="submit" type="submit" value="zmień" /></form>';
echo '<form action="'. $_SERVER['PHP_SELF'] . '?context=dir&object=' . $_GET['object'] . '&do=link" method="post"> link <input name="value" type="text" size="15" /><input name="submit" type="submit" value="utwórz" /></form>'; // ok
if(isset($_GET['do'])) {
// tworzenie linku
if($_GET['do'] === 'link') {
$target = '/' . implode('/', explode('/', $_GET['object']));
my_link($target, $_POST['value']);
}
if($_GET['do'] === 'qlink') {
my_qlink($www_link_dir, $_GET['object']);
}
if($_GET['do'] === 'chmod') {
my_chmod($_GET['object'], $_POST['value']);
}
if($_GET['do'] === 'cp') {
my_copy($_GET['object'], $_GET['cel'], $_GET['context']);
}
}
echo '</pre>';
}
}
}
if($_GET['context'] === 'konsola') { //konsola
if(isset($_POST['command'])) {
if($command_filter_mode === 'deny') {
// jeżeli oprucz
$test_com = explode(' ', $_POST['command']);
$test_com2 = '|' . $test_com[0] . '|';
if(strpos($command_filter_list, $test_com2)) {
echo 'komenda [ ' . $test_com[0] . ' ] została zablokowana<ha />';
}else{
if(strpos($command_filter_list, $_POST['command'])) {
echo 'komenda [ ' . $test_com[0] . ' ] została zablokowana<ha />';
}else{
echo '<pre>wyjście z komendy ' . $_POST['command'] . '<hr />';
echo shell_exec($_POST['command']) . '</pre><hr />';
}
}
}
if($command_filter_mode === 'allow') {
//jeżeli tylko
$test_com = explode(' ', $_POST['command']);
$test_com2 = '|' . $test_com[0] . '|';
if(strpos($command_filter_list, $test_com2)) {
echo '<pre>wyjście z komendy ' . $_POST['command'] . '<hr />';
echo shell_exec($_POST['command']) . '</pre><hr />';
}else{
echo 'komenda [ ' . $test_com[0] . ' ] została zablokowana<ha />';
}
}
if($command_filter_mode === 'off') {
//jeżeli brak filtracji
echo '<pre>wyjście z komendy ' . $_POST['command'] . '<hr />';
echo shell_exec($_POST['command']) . '</pre><hr />';
}
}
echo '<pre><form action="' . $_SERVER['PHP_SELF'] . '?context=konsola" method="post">';
echo 'komenda do wykonania<br />';
echo '<input name="command" type="text" size="80" />';
//echo '<input name="submit" type="submit" value="go" />';
echo '</form></pre>';
//koniec konsoli
} //konsola
if($_GET['context'] === 'upload') {
echo '<pre>[upload] plik zostanie załadowany do:<br />';
echo '[ ' . $_GET['target'] . ' ]<hr />';
//upload
if(isset($_FILES['plik']['name'])) {
if(is_uploaded_file($_FILES['plik']['tmp_name'])) {
$zap_jako = $_GET['target'] . $_FILES['plik']['name'];
move_uploaded_file($_FILES['plik']['tmp_name'], $zap_jako);
echo 'Plik: ' . $_FILES['plik']['name'] . ' o rozmiarze ' . $_FILES['plik']['size'] . ' bajtów został załadowany';
}
}
//formulaż
echo '<form action="' . $_SERVER['PHP_SELF'] . '?context=upload&target=' . $_GET['target'] . '" enctype="multipart/form-data" method="post">';
echo '<input name="plik" type="file" />';
echo '<input type="submit" value="załaduj" />';
echo '</form></pre>';
} //context upload
}
// stopka wspólna dla wszystkich podstron z '?context'
}else{
///file explorer
//password parser
$data = explode("\n", file_get_contents('/etc/passwd'));
$i = 0;
while(isset($data[$i])) {
$data1 = explode(':', $data[$i]);
$GLOBALS['user'][$data1[2]] = $data1[0];
$i++;
}
//górne menu
if($admin) {
// konsola
echo '<pre><a href="' . $_SERVER['PHP_SELF'] . '?context=konsola" onclick="window.open(\'' . $_SERVER['PHP_SELF'] . '?context=konsola\',\'popup\',\'width=600,height=500,scrollbars=yes,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0\'); return false">[[konsola]]</a> ';
// upload
echo '<a href="' . $_SERVER['PHP_SELF'] . '?context=upload" onclick="window.open(\'' . $_SERVER['PHP_SELF'] . '?context=upload&target=' . $dir . '\',\'popup\',\'width=500,height=500,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0\'); return false">[[upload]]</a> ';
}else{
echo '<pre><span class="x">[[konsola]]</span> <span class="x">[[upload]]</span> ';
}
//logout
echo '<a href="' . $_SERVER['PHP_SELF'] . '?logout=do">[[logout]]</a></pre>';
//echo '<hr />';
//ścieżka z linkami
$dir_e = explode('/', $dir);
$i = 0;
$path = '/';
echo '<pre><a href="' . $_SERVER['PHP_SELF'] . '?dir=' . $path . '">[root]</a>/';
while(isset($dir_e[$i])) {
if($dir_e[$i] != '') {
$path = $path . $dir_e[$i] . '/';
echo '<a href="' . $_SERVER['PHP_SELF'] . '?dir=' . $path . '">' . $dir_e[$i] . '</a>/';
}
$i++;
}
echo '</pre>' . "\n";
//tabela
$kolor = $tabela_kolor1;
$togle = TRUE;
$i = 0;
$output = explode("\n", $output0);
echo '<pre><table border="1" cellspacing="1" cellpadding="0">' . "\n";
while(isset($output[$i])) {
if($output[$i] != '.') {
if($output[$i] != '..') {
if($output[$i] != '') {
$file = $dir . $output[$i];
$perms = fileperms($file);
if (($perms & 0xC000) == 0xC000) {
// Socket
$info = 's';
$isdir = FALSE;
} elseif (($perms & 0xA000) == 0xA000) {
// Symbolic Link
$info = 'l';
$isdir = FALSE;
} elseif (($perms & 0x8000) == 0x8000) {
// Regular
$info = '-';
$isdir = FALSE;
} elseif (($perms & 0x6000) == 0x6000) {
// Block special
$info = 'b';
$isdir = FALSE;
} elseif (($perms & 0x4000) == 0x4000) {
// Directory
$info = 'd';
$isdir = TRUE;
} elseif (($perms & 0x2000) == 0x2000) {
// Character special
$info = 'c';
$isdir = FALSE;
} elseif (($perms & 0x1000) == 0x1000) {
// FIFO pipe
$info = 'p';
$isdir = FALSE;
} else {
// Unknown
$info = 'u';
$isdir = FALSE;
}
// Owner
$info .= (($perms & 0x0100) ? 'r' : '-');
$info .= (($perms & 0x0080) ? 'w' : '-');
$info .= (($perms & 0x0040) ?
(($perms & 0x0800) ? 's' : 'x' ) :
(($perms & 0x0800) ? 'S' : '-'));
// Group
$info .= (($perms & 0x0020) ? 'r' : '-');
$info .= (($perms & 0x0010) ? 'w' : '-');
$info .= (($perms & 0x0008) ?
(($perms & 0x0400) ? 's' : 'x' ) :
(($perms & 0x0400) ? 'S' : '-'));
// World
$info .= (($perms & 0x0004) ? 'r' : '-');
$info .= (($perms & 0x0002) ? 'w' : '-');
$info .= (($perms & 0x0001) ?
(($perms & 0x0200) ? 't' : 'x' ) :
(($perms & 0x0200) ? 'T' : '-'));
echo '<tr bgcolor="' . $kolor . '" height="1">';
echo '<td width="90">' . $info . '</td>';
echo '<td align="right" width="60">' . $GLOBALS['user'][fileowner($file)] . '</td>';
echo '<td width="50">' . filegroup($file) . '</td>';
echo '<td align="right" width="70">' . filesize($file) . '</td>';
echo '<td align="right" width="160">' . date($date_format, filemtime($file)) . '</td>';
echo '<td width="220">';
if($isdir) {
echo '<a href="' . $_SERVER['PHP_SELF'] . '?dir=' . $dir . $output[$i] . '/" class="link_dir">' . $output[$i] . '/</a>';
}else{
echo $output[$i];
}
if(is_link($file)) {
echo $link_tag;
}
echo '</td>';
echo '<td width="60">';
if($admin) {
if($isdir) {
if(is_link($file)) { //jezeli katalog jest linkiem
echo '<a href="' . $_SERVER['PHP_SELF'] . '?context=slink&object=' . $file . '" onclick="window.open(\'' . $_SERVER['PHP_SELF'] . '?context=slink&object=' . $file . '\',\'popup\',\'width=500,height=500,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0\'); return false" class="link_opcje">[opcje]</a>';
}else{ //jeżeli katalog niejest linkiem
echo '<a href="' . $_SERVER['PHP_SELF'] . '?context=dir&object=' . $file . '" onclick="window.open(\'' . $_SERVER['PHP_SELF'] . '?context=dir&object=' . $file . '\',\'popup\',\'width=500,height=500,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0\'); return false" class="link_opcje">[opcje]</a>';
}
}else{ // jezeli plik lub link do pliku
echo '<a href="' . $_SERVER['PHP_SELF'] . '?context=file&object=' . $file . '" onclick="window.open(\'' . $_SERVER['PHP_SELF'] . '?context=file&object=' . $file . '\',\'popup\',\'width=500,height=500,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0\'); return false" class="link_opcje">[opcje]</a>';
}
}else{
echo '<span class="x">[opcje]</span>'; // jezeli brak uprawnień
}
echo '</td>';
echo '</tr>' . "\n";
}
}
}
if($togle) {
$togle = FALSE;
$kolor = $tabela_kolor1;
}else{
$togle = TRUE;
$kolor = $tabela_kolor2;
}
$i++;
}
if($admin) {
echo '</table>' . "\n";
echo '<form action="' . $_SERVER['PHP_SELF'] . '?dir=' . $dir . '" method="post">Nowy folder <input name="mkdir" type="text" size="15" /><input name="submit" type="submit" value="utwórz" /></form>';
echo '</pre>';
}
}
}else{
//moduł logowania
echo '<pre>';
echo 'Zaloguj się<br />';
echo '<form action="' . $_SERVER['PHP_SELF'] . '" method="post">';
echo 'login <input name="login" type="text" size="20" /><br />';
echo 'hasło <input name="haslo" type="password" size="20" /><br />';
echo '<input name="submit" type="submit" value=" Zaloguj " />';
echo '</form>';
echo '</pre>';
}
?>
</body>
</html>