26

Odp: http/php manager plików

no tam jest jeszcze kilka rzeczy do zrobienia
a udostemnij na pobierz mozesz sobie prtzeciez sam zmienic ;>
masz w notepadzie czy czego tam uzywasz ctrl+f ;>

27

Odp: http/php manager plików

prawie skończone. niestety dalej wywala błędy w katalogu '/proc' i jak na razie nie mam pomysłu, jak sobie z tym poradzic...
na obecną chwile zeby tego nie robił wystaczy odkomentować 'ini_set('display_errors', 0);' na początku kodu (linia 55)
konfiguracja jest opisana. gdyby coś nie było jasne to pytać wink
logowanie zrobię, jak bede mial chwilke - moze dziś w nocy wink
jak sie komuś chce troche potestować skrypt i podesłać mi ewentualne błędy, to jestem jaknajbardziej za big_smile

<!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
//klasy CSS:
// link_dir - link przejścia do katalogu (tylko tabela)
// link_opcje - 'przycisk' [opcje]

$auth = TRUE; //tylko do testów

//konfiguracja
$admin = TRUE;
$tabela_kolor1 = '#CCCCCC';
$tabela_kolor2 = '#FFFFFF';
$date_format = 'd-m-Y H:i:s';
$link_tag = ' **link**';
$www_link_dir = '/www/public/'; //katalog, dla "szybkich linków"
$www_link_prefix = 'http://twoja_domena.com/public/'; //adres, pod którym widać $www_link_dir
$no_access = 'zakaz_wjazdu'; //jeżeli taki plik istnieje i $admin = FALSE, katalog nie zostanie wylistowany
$no_access_admin = 'zakaz_wjazdu_admin'; //jeżeli istnieje, nikt nie zobaczy zawartości (to tak, zeby sobie samemu przez przypadek nie namieszać)
$forrbiden_commands = '|reboot|firstboot|whoami|'; //zakazane komendy (każda konemda musi być między dwoma znakami "|")

//koniec konfiguracji
$GLOBALS['www_prefix'] = $www_link_prefix;
// ini_set('display_errors', 0);

//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ę';
    }
}
    
//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'] === '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=edit">[[edytuj]]</a> ';
                    echo '<a href="' . $_SERVER['PHP_SELF'] . '?context=slink&object=' . $_GET['object'] . '&do=qlink">[[udostępnij]]</a> ';
                    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']);
                        }
                    }
                    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=file&object=' . $_GET['object'] . '&do=cp">[[skopiuj]]</a> ';
                    echo '<a href="' . $_SERVER['PHP_SELF'] . '?context=file&object=' . $_GET['object'] . '&do=edit">[[edytuj]]</a> ';
                    echo '<a href="' . $_SERVER['PHP_SELF'] . '?context=file&object=' . $_GET['object'] . '&do=qlink">[[udostępnij]]</a> ';
                    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']);
                        }
                    }
                    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=cp">[[skopiuj]]</a> ';
                    echo '<a href="' . $_SERVER['PHP_SELF'] . '?context=dir&object=' . $_GET['object'] . '&do=qlink">[[udostępnij]]</a> ';
                    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']);
                        }
                    }
                    echo '</pre>';
                }
            }
        }
        if($_GET['context'] === 'konsola') { //konsola
            if(isset($_POST['command'])) {
                $test_com = explode(' ', $_POST['command']);
                $test_com2 = '|' . $test_com[0] . '|';
                if(strpos($forrbiden_commands, $test_com2)) {
                    echo 'komenda [ ' . $test_com[0] . ' ] została zablokowana<ha />';
                }else{
                    if(strpos($forrbiden_commands, $_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 />';
                    }
                }
            }
            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
    }
    if($_GET['context'] === 'logout') {
        //logout
        echo 'TU BĘDZIE PROCEDURA KOŃCZĄCA SESJĘ';
    } //logout
     // 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'] . '?context=logout">[[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++;
}
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 'sorry dude';
}
?>
</body>
</html>

28 (edytowany przez patryk 2010-12-29 00:10:04)

Odp: http/php manager plików

ok wszystko śmiga, oprucz jednej rzeczy...
kopiowanie calych katalogów. (funkcja my_copy() )
funkcja przekazuje do shella komende 'cp -r $źródło $cel'... tylko ze coś nie idzie....
pewnie jakiś glupi błąd.... jak ktoś ma chwilke.... big_smile

<!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
//klasy CSS:
// link_dir - link przejścia do katalogu (tylko tabela)
// link_opcje - 'przycisk' [opcje]

$auth = TRUE; //tylko do testów

//konfiguracja
$admin = TRUE;
$tabela_kolor1 = '#CCCCCC';
$tabela_kolor2 = '#FFFFFF';
$date_format = 'd-m-Y H:i:s';
$link_tag = ' **link**';
$www_link_dir = '/www/public/'; //katalog, dla "szybkich linków"
$www_link_prefix = 'http://twoja_domena.com/public/'; //adres, pod którym widać $www_link_dir
$no_access = 'zakaz_wjazdu'; //jeżeli taki plik istnieje i $admin = FALSE, katalog nie zostanie wylistowany
$no_access_admin = 'zakaz_wjazdu_admin'; //jeżeli istnieje, nikt nie zobaczy zawartości (to tak, zeby sobie samemu przez przypadek nie namieszać)
$forrbiden_commands = '|reboot|firstboot|whoami|'; //zakazane komendy (każda konemda musi być między dwoma znakami "|")

//koniec konfiguracji
$GLOBALS['www_prefix'] = $www_link_prefix;
// ini_set('display_errors', 0);

//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'])) {
                $test_com = explode(' ', $_POST['command']);
                $test_com2 = '|' . $test_com[0] . '|';
                if(strpos($forrbiden_commands, $test_com2)) {
                    echo 'komenda [ ' . $test_com[0] . ' ] została zablokowana<ha />';
                }else{
                    if(strpos($forrbiden_commands, $_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 />';
                    }
                }
            }
            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
    }
    if($_GET['context'] === 'logout') {
        //logout
        echo 'TU BĘDZIE PROCEDURA KOŃCZĄCA SESJĘ';
    } //logout
     // 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'] . '?context=logout">[[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++;
}
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 'sorry dude';
}
?>
<form action="test.php" method="get">
<input name="context" type="hidden" value="wartosc" />
</form>
</body>
</html>

29

Odp: http/php manager plików

Zrób sobie zwykłe echo $komenda a później wykonaj to w konsoli i się dowiesz dlaczego.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

30

Odp: http/php manager plików

ok. to była literówka. w poście powyżej jest kod gotowy do testów. brakuje tylko logowania wink

31

Odp: http/php manager plików

Troche mieszam u siebie z serwerami. W starszej wersji wywala mi

Warning:  move_uploaded_file(/udostepniony/2097152.txt) [function.move-uploaded-file]: failed to open stream: Permission denied in /www2/prv/index.php on line 235

Gdzie szukac bledu?

Linksys WRT3200ACM (Gargoyle)
PC Engines APU.4C4 Platforma 4x i211AT LAN, 4GB RAM, AMD GX-412TC CPU (Gargoyle)
Tp-link 1043NDv2 (Gargoyle)

32

Odp: http/php manager plików

teraz to jajuz niewiem, co masz w linii 235....
przejdź na ostatnią wersje skryptu.
jaki to serwer?

moze nie masz uprawnien

33 (edytowany przez badziewiak 2010-12-29 00:57:19)

Odp: http/php manager plików

Serwer to apache.

Warning:  move_uploaded_file(/www2/512000.txt) [function.move-uploaded-file]: failed to open stream: Permission denied in /www2/prv/index.php on line 323

Blad jest podczas uploadowania pliku, w logu apache jest

[Tue Dec 28 23:48:31 2010] [error] [client 192.168.1.102] PHP Warning:  move_uploaded_file() [<a href='function.move-uploaded-file'>function.move-uploaded-file</a>]: Unable to move '/tmp/phpys52eq' to '/www2/512000.txt' in /www2/prv/index.php on line 323, referer: http://192.168.1.1/prv/index.php?context=upload&target=/www2/

Wyglada mi na to, ze PHP uzywa /tmp, ktory jest podmontowany we flashu routera (w konfiguracji zmienilem na /tmpPhp). W ostatecznosci moze podpowiedzcie mi, jak przeniesc tmp na zewnetrzny pendrive (mam extroota).

Linksys WRT3200ACM (Gargoyle)
PC Engines APU.4C4 Platforma 4x i211AT LAN, 4GB RAM, AMD GX-412TC CPU (Gargoyle)
Tp-link 1043NDv2 (Gargoyle)

34

Odp: http/php manager plików

co masz w konfiguracji apacha?
user = nobody i group = nogroup?
jezeli tak to najprawdopodobniej serwer nie ma prawa zapisu w katalogu

35

Odp: http/php manager plików

patryk napisał/a:

co masz w konfiguracji apacha?
user = nobody i group = nogroup?
jezeli tak to najprawdopodobniej serwer nie ma prawa zapisu w katalogu

Czyli chyba powinienem dodac usera do systemu i wpisac go do apache, zgadlem? A i jeszcze podpowiedzcie mi z tym cholernym /tmp na pendrive, bo z tym bankowo beda problemy.

Linksys WRT3200ACM (Gargoyle)
PC Engines APU.4C4 Platforma 4x i211AT LAN, 4GB RAM, AMD GX-412TC CPU (Gargoyle)
Tp-link 1043NDv2 (Gargoyle)

36

Odp: http/php manager plików

Zanim zaczne znowu mieszac z serwerami, to chcialbym zwiekszyc mozliwosci folderu /tmp przez przeniesienie go na pendrive. Jak to zrobic w openwrt?

Linksys WRT3200ACM (Gargoyle)
PC Engines APU.4C4 Platforma 4x i211AT LAN, 4GB RAM, AMD GX-412TC CPU (Gargoyle)
Tp-link 1043NDv2 (Gargoyle)

37

Odp: http/php manager plików

powinienes poczytać o koncepcie praw dostępu w linuxie ;>
w kazdym razie serwer musi miec prawo zapisu w katalogu do którego ładujesz pliki i do katalogu plików tymczasowych
utworzenie uzytkownika dla serwera pewnie nie jest zlym pomyslem... w wiekszosci systemow taki jest i pewnie nie bez powodu wink
ale po co chcesz przenosić /tmp? nie mozesz konfiguracji php/serwera zminic?

38

Odp: http/php manager plików

[Tue Dec 28 23:48:31 2010] [error] [client 192.168.1.102] PHP Warning:  move_uploaded_file() [<a href='function.move-uploaded-file'>function.move-uploaded-file</a>]: Unable to move '/tmp/phpys52eq' to '/www2/512000.txt' in /www2/prv/index.php on line 323, referer: http://192.168.1.1/prv/index.php?context=upload&target=/www2/

a przeciez w PHP mam ustawiony inny folder! Chce go zwyczajnie przeniesc i pozbyc sie tych problemow. Byc moze lighttpd zatrybi?

Linksys WRT3200ACM (Gargoyle)
PC Engines APU.4C4 Platforma 4x i211AT LAN, 4GB RAM, AMD GX-412TC CPU (Gargoyle)
Tp-link 1043NDv2 (Gargoyle)

39

Odp: http/php manager plików

narazie skonczone wink
jak instrukcje są niejasne, to pytać wink

<?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; //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(winternesie 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ć)

$forrbiden_commands = '|reboot|firstboot|';    //zakazane komendy (każda konemda musi być między dwoma znakami "|").
                                            //nie będzie ich można wykonywać
                                            //w ten sposób można dodać "idioto odporność"

//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(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'])) {
    //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;
            }else{
                $GLOBALS['admin'] = FALSE;
            }
        }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, "/");
                $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 />';
    }
}
///odnowienie sesji
//$valid = $GLOBALS['sessionv'];
//$hash = $_COOKIE['hash'];
//$user = $_COOKIE['user'];
//setcookie ("hash", $hash, $valid, "/");
//setcookie ("user", $user, $valid, "/");
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'])) {
                $test_com = explode(' ', $_POST['command']);
                $test_com2 = '|' . $test_com[0] . '|';
                if(strpos($forrbiden_commands, $test_com2)) {
                    echo 'komenda [ ' . $test_com[0] . ' ] została zablokowana<ha />';
                }else{
                    if(strpos($forrbiden_commands, $_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 />';
                    }
                }
            }
            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>

40

Odp: http/php manager plików

Zaktualizuj jeszcze pierwszy post, żeby zbytnio nie trzeba było szukać aktualnej wersji.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

41 (edytowany przez badziewiak 2010-12-29 15:56:09)

Odp: http/php manager plików

Wlasnie zainstalowalem na lapku (wingroza) serwer apache i php5. Pomijam taki drobiazg, ze tam sie wszystko wyklikuje podczas instalacji i wszystko dziala... Mam pytanko: Czy dasz rade przygotowac wersje pod winde? Chodzi glownie o sciezki. Dokladniej, to zeby na samej gorze byly zmienne ze sciezkami, ktore mozna ewentualnie dopasowac do windy.

Linksys WRT3200ACM (Gargoyle)
PC Engines APU.4C4 Platforma 4x i211AT LAN, 4GB RAM, AMD GX-412TC CPU (Gargoyle)
Tp-link 1043NDv2 (Gargoyle)

42

Odp: http/php manager plików

hmmmm
takiego jak to pewnie nie, bo ten sktypt w sporej czesci polega na shellu
ale powiedz co dokładnie jest ci potrzebne, to pomysle wink

43

Odp: http/php manager plików

Ta lista poleceń zabronionych jest takim sobie pomysłem. jeżeli masz dostęp do lini poleceń to możesz ściągnąć nowy skrypt pod inną nazwą, zrobic cat na flash czy coś innego smile. Jak ktoś ma prawo do wykonania poleceń to raczej może wszystko.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

44

Odp: http/php manager plików

prawda. o tym nie pomyslalem wink

45

Odp: http/php manager plików

patryk napisał/a:

hmmmm
takiego jak to pewnie nie, bo ten sktypt w sporej czesci polega na shellu
ale powiedz co dokładnie jest ci potrzebne, to pomysle wink

W takim razie nie ma tematu. Postawilem na probe serwer na windzie i myslalem, ze pojdzie bez przeszkod. W tym ukladzie widze, ze trza bawic sie routerem.

Linksys WRT3200ACM (Gargoyle)
PC Engines APU.4C4 Platforma 4x i211AT LAN, 4GB RAM, AMD GX-412TC CPU (Gargoyle)
Tp-link 1043NDv2 (Gargoyle)

46

Odp: http/php manager plików

Cezary napisał/a:

Ta lista poleceń zabronionych jest takim sobie pomysłem. jeżeli masz dostęp do lini poleceń to możesz ściągnąć nowy skrypt pod inną nazwą, zrobic cat na flash czy coś innego smile. Jak ktoś ma prawo do wykonania poleceń to raczej może wszystko.

dopisałem możliwość wyboru trybu filtracji (tylko komendy z listy, oprucz komend z listy i wyłączenie filtracji)
zmodyfikowany kod jest w pierwszym poście

47

Odp: http/php manager plików

rozgryzłem sprawe uploadu.
jak to zwykle bywa - była to kwestia braku logicznego myślenia.
jakoś nie wpadłem na to, ze jak plik jest wysyłany przyez POST, to maksymalny rozmiar danych POST też trzeba ustawić big_smile

wiekszość rzeczy można teraz ustawić w konfiguracji skryptu - wszystko opisane w komentach.
poprawiona wersja jest w pierwszym poście wink

48

Odp: http/php manager plików

Mam pytanko:
W gargoyle jest postawiony serwer www z ssl. Czy jest mozliwe wykorzystanie go do celow tego skryptu (wrzucic go np. do /www/fm), czy musze instalowac lighttpd? Mam zainstalowany php5.

Linksys WRT3200ACM (Gargoyle)
PC Engines APU.4C4 Platforma 4x i211AT LAN, 4GB RAM, AMD GX-412TC CPU (Gargoyle)
Tp-link 1043NDv2 (Gargoyle)

49

Odp: http/php manager plików

Gargoyle ma serwer httpd przerobiony po swojemu. Sprawdź czy zadziała na ten sposób: http://eko.one.pl/?p=openwrt-php#httpd

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

50

Odp: http/php manager plików

Czyli musze po prostu doinstalowac inny serwer?

Linksys WRT3200ACM (Gargoyle)
PC Engines APU.4C4 Platforma 4x i211AT LAN, 4GB RAM, AMD GX-412TC CPU (Gargoyle)
Tp-link 1043NDv2 (Gargoyle)