Редактирование *.php через браузер

Тема в разделе "PHP", создана пользователем vave, 10 май 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    381
    Симпатии:
    15
    Хотел бы узнать как редактировать .php файлы через браузер с использованием специального редактора типа qwerty?

    Заранее Спасибо!
     
  2. newbigmir

    newbigmir

    Регистр.:
    31 июл 2007
    Сообщения:
    283
    Симпатии:
    23
  3. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    381
    Симпатии:
    15
    а если мне нужно сделать что-то вроде защищённой паролем админ панели, с ссылками типа ?edit=файл :nezn:
     
  4. eugenel

    eugenel Постоялец

    Регистр.:
    3 авг 2008
    Сообщения:
    123
    Симпатии:
    14
    Нет проблем - можете сделать!
     
  5. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    381
    Симпатии:
    15
    как это можно сделать? есть самый простой готовый пример?:ah:
     
  6. uNknownMark

    uNknownMark

    Регистр.:
    22 сен 2007
    Сообщения:
    393
    Симпатии:
    169
    В eXtplorer для редактирования файла, например это файл который лежит в тойже папке где и сам скрипт и называется admin.extplorer.php надо передать в index.php методом POST следующие данные:
    Код:
    action: edit
    dir: 
    item: admin.extplorer.php
    option: com_extplorer
    selitems[]: admin.extplorer.php
    
    Как самый быстрый вариант переделай все под GET запрос.
    Есть желание можешь достать только редактор, и переделать для своих нужд, переделывать за тебя никто не будет.
    Это касается любого редактора. Отследил куда и каким методом пошли данные о редактируемом файле, взял код который отвечает за открытия окна редактирования и сохранения файлов и переделал под себя.
     
  7. dobs

    dobs Создатель

    Регистр.:
    5 янв 2007
    Сообщения:
    40
    Симпатии:
    12
    Поидее должно пахать...
    PHP:
    $filename 'myfile.php'// Что редактируем


    if(isset($_POST[edit]))     // Если нажали сохранить
    {


    // Вначале давайте убедимся, что файл существует и доступен для записи.
    if (is_writable($filename)) {
        if (!
    $handle fopen($filename'w')) {
             echo 
    "Не могу открыть файл ($filename)";
             exit;
        }
    if(
    get_magic_quotes_gpc()) /** Если магические слешы включены то снимаем экран */
      
    {
        
    $text stripslashes($_POST[host]);
        
    // Записываем $somecontent в наш открытый файл.
        
    if (fwrite($handle$text) === FALSE) {
            echo 
    "Не могу произвести запись в файл ($filename)";
            exit;
        }
      }
       else
       {
           
    // Записываем $somecontent в наш открытый файл.
        
    if (fwrite($handle$text) === FALSE) {
            echo 
    status_show('error',"Не могу произвести запись в файл ($filename)");
            exit;
        }
       }
       echo 
    status_show('sucsess','Сохранено');

        
    fclose($handle);

    } else {
        echo 
    status_show('error',"Файл $filename недоступен для записи");
    }
    // END ISSET


    // Чтение файла
    $open file($filename) or die ("Не могу открыть $filename");
    $co count($open);
    echo 
    '<form action="'.$_SERVER[REQUEST_URI].'" method="post">
    <textarea name="host" rows=20 cols=60 wrap="on">'
    ;
    $i =0;
    while (
    $i <= $co) {
        echo 
    $open[$i];
    $i++;
    }
    echo 
    '</textarea><br /><input type="submit" name="edit" value="Изменить"></form>';
     
  8. Jameson

    Jameson Читатель

    Заблокирован
    Регистр.:
    25 июн 2007
    Сообщения:
    406
    Симпатии:
    92
  9. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    381
    Симпатии:
    15
    Я сейчас использую этот код,

    PHP:
    <?
    //+++++++++++++++++++++++++++++++++++++++
    //+             File Admin              +
    //+++++++++++++++++++++++++++++++++++++++
    // Простой файл менеджер для сайта. Достаточно просто загрузить его на сервер и запустить. 
    // По умолчанию вход без пароля. Что бы поставить пароль читай дальше ;)
    $user_offset=array();

    //список паролей и определяемые для них корневые каталоги.
    // по введённому паролю пользователь получает в качестве корневого каталога директорию $user_offset[..]['offset'] 
    // если, например, пользователю назначенна директория /test/ в корне сайта то выйти в корень (выше этого каталога) он не может
    $user_offset[0]['name']='asdasd'//имя пользователя (показывается в приветствии)
    $user_offset[0]['password']='asdasd'//пароль (если пароль не установлен, то программа не запрашивает ввода пароля)
    $user_offset[0]['offset']=''//каталог от корня сайта (пустая строка - доступ в корень)
    //например: для пользователя ввёвшего пароль my_pass в качестве корневого каталога определятся каталог test и имя user
    //$user_offset[1]['password']='user';
    //$user_offset[1]['password']='my_pass';
    //$user_offset[1]['offset']='/test/';
    //или для пользователя ввёвшкго пароль imgod определяем имя Pupkin и его личный каталог, выше которого ему не "выпрыгнуть"
    //$user_offset[2]['password']='Pupkin';
    //$user_offset[2]['password']='ingod';
    //$user_offset[2]['offset']='/projects/lamer/';


    //разрешения на операции по типу документа
    //виды файлов смотреть в функции get_file_type (см. ниже)
    $allow_actions=Array ();
    $allow_actions['script']['edit']='ok'//для скриптов возможно редактирование
    $allow_actions['document']['edit']='ok'//для документов возможно редактирование
    //=============================================================
    function ReadFolder($catalog) {
    //чтение каталога
    $dirlist=array();
    if (
    $dir = @opendir($catalog)) { 
     while ((
    $file readdir($dir)) !== false) { 
                  if (
    $file != '..' && $file != '.'$dirlist[]= $file;
    }             
     
    closedir($dir); 
    }
      return 
    $dirlist;
    }

    function 
    my_sort ($db)
    {
    //функция сортирует массив $db
    if (count ($db)>1)
    {
    for (
    $u=0$u count ($db); $u++) 
    for (
    $i=0$i < (count ($db)-1); $i++)
    {

    if (
    strtoupper($db[$i])>strtoupper($db[$i+1]))
    {
    $cash=$db[$i];
    $db[$i]=$db[$i+1];
    $db[$i+1]=$cash;
    }

    }
    }
    return 
    $db;
    }

    function 
    get_datastring ($str$razdel) {
      
    $f=array();
      
    //Функция возвращает массив, выведенный из строки $str с разделитем полей $razdel
        
    {
        if (
    $str<>''$f explode($razdel,$str);
        }
      return 
    $f;
    }
    function 
    normal_size($size) {
    //Функция выводин нормальный размер файлов типа 100KB
       
    $kb 1024;         // Kilobyte
       
    $mb 1024 $kb;   // Megabyte
       
    $gb 1024 $mb;   // Gigabyte
       
    $tb 1024 $gb;   // Terabyte
       
    if($size $kb) {
           return 
    $size." B";
       }
       else if(
    $size $mb) {
           return 
    round($size/$kb,2)." KB";
       }
       else if(
    $size $gb) {
           return 
    round($size/$mb,2)." MB";
       }
       else if(
    $size $tb) {
           return 
    round($size/$gb,2)." GB";
       }
       else {
           return 
    round($size/$tb,2)." TB";
       }
    }

    function 
    delete_dir($file) {
    umask (000);
    @
    chmod($file,0777);
    if (
    is_dir($file)) {
     
    $handle opendir($file); 
     while(
    $filename readdir($handle)) {
      if (
    $filename != "." && $filename != "..") {
       
    delete_dir ($file."/".$filename);
      }
     }
     
    closedir($handle);
     echo 
    'Удаляем каталог '.$file.'<br>';
     
    rmdir($file);
    } else {
     echo 
    'Удаляем файл '.$file.'<br>';
     
    unlink($file);
    }
    }

    function 
    get_file_type($filename) {
    //функция возвращает тип файла по его расширению
    $filename=strtolower ($filename);
    ereg".*\.([a-zA-z0-9]{0,5})$"$filename$regs );
    $f_ext $regs[1];
    $types['image'] = array ('jpg''gif','png''swf''bmp');
    $types['script'] = array ('html''htm''php''php3');
    $types['document'] = array ('txt''doc');
    $types['music'] = array ('mp3''mpeg3');
    $types['archives'] = array ('zip''rar''arj');
    $types['programm'] = array ('com''exe');
    foreach (
    $types as $k => $v) {
    if (
    in_array($f_ext$v)) {
    return 
    $k;
    }
    }
    return 
    'unknown';
    }

    function 
    del_slashes ( )
    {
    // функция вырезает из всего массива $_POST лишние слэши
    if (count ($_POST)>0)
    {
    reset ($_POST); 
    $key_array=array_keys ($_POST);
    for(
    $i=0$i<count ($key_array); $i++) if (!is_array ($_POST[$key_array[$i]]))  $_POST[$key_array[$i]]=stripslashes ($_POST[$key_array[$i]]);
    }

    }
    function 
    get_pass_position ($inf_arr$pass)
    {
    //функция выдёт номер масиива, в котором совпадает пароль, иначе -1
    $f=-1;
    for(
    $i=0$i<count ($inf_arr); $i++) if (md5 ($inf_arr[$i]['password'])==$pass$f=$i;
    return 
    $f;
    }
    //=====================================================================

    //===========
    @session_start();
    if (
    $_GET['action']=='exit')
    {
    //выход.. сброс ссесий
    $_SESSION['pass']='';
    }
    $user_pos=-1;
    $user_pos=get_pass_position ($user_offset$_SESSION['pass']);
    if (
    $user_pos==-1
    {
    $user_pos=get_pass_position ($user_offsetmd5 ($_POST['pass']));
    if (
    $user_pos<>-1$_SESSION['pass']=md5 ($_POST['pass']);
    }
    if (
    $user_pos<>-1$main_offset=$user_offset[$user_pos]['offset']; //смещение от $DOCUMENT_ROOT
    if ($user_pos==-1)
    {
    ?>
    <head>
    <meta http-equiv="Content-Language" content="ru">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <title>Введите пароль</title>
    </head>
      <center>
      <br><br><br><br><br>
      <form enctype="multipart/form-data" action="../html/<?=$PHP_SELF ?>" method="POST" name="<?=$form_name ?>" ?>>  
      <table border="1" width="300">
        <tr>
          <td width="284" colspan="2" bgcolor="#C0C0C0">
            <p align="center"><b><font color="#000080">Введите пароль!</font></b></td>
        </tr>
        <tr>
          <td width="194"><input type="password" name="pass" size="40" value=""></td>
          <td width="90"><input type="submit" name="submit[3]" value=" OK "></td>
        </tr>
      </table>
      </center>
    </form>
    <?
    exit;
    }
    //----------

    if ($_POST['add_path']<>'') 
    {
    $_GET['add_path']=$_POST['add_path'];
    $_GET['add_path']=ereg_replace ("[..]", '', $_GET['add_path']);
    $full_path=$DOCUMENT_ROOT.$main_offset.'/'.$_GET['add_path'];
    }
    else
    {
    $_GET['add_path']=ereg_replace ("[..]", '', $_GET['add_path']);
    if ($_GET['add_path']<>'') $_GET['add_path'].='/';
    $full_path=$DOCUMENT_ROOT.$main_offset.'/'.$_GET['add_path'];
    }

    $_GET['add_path']=ereg_replace ("//", '/', $_GET['add_path']);

    //----------------обработка action---------
    if ($_POST['file_name']<>'') $_GET['file_name']=$_POST['file_name'];
    $_GET['file_name']=ereg_replace ("[.]", ',', $_GET['file_name']);
    $_GET['file_name']=ereg_replace (",,", '', $_GET['file_name']);
    $_GET['file_name']=ereg_replace (",", '.', $_GET['file_name']);
    $type=get_file_type($full_path.$_GET['file_name']);
    if ($_POST['action']<>'') $_GET['action']=$_POST['action'];
    if ($_GET['action']=='edit')
    if ($allow_actions[$type]['edit']=='ok')
    {

    if (isset ($submit))
    {
    del_slashes ( );
    //Перезапись
    $fp = fopen($full_path.$_GET['file_name'], 'w+');
    fwrite($fp, $_POST['S1']);
    fclose($fp);
    }

    //редактирование файла

    ?>
    <head>
    <meta http-equiv="Content-Language" content="ru">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <title>Редактирование файла</title>
    </head>
      <center>
      <form enctype="multipart/form-data" action="../html/<?=$PHP_SELF ?>" method="POST" name="edit"> 
      <input name="file_name" type="hidden" value="<?=$_GET['file_name'?>">
      <input name="action" type="hidden" value="<?=$_GET['action'?>">
      <input name="add_path" type="hidden" value="<?=$_GET['add_path'?>">

      <center><b>Редактирование файла <?=$_GET['file_name'?></b>
       <textarea rows="28" name="S1" cols="115"><?
          if (file_exists ($full_path.$_GET['file_name']))
          {
              $file = fopen($full_path.$_GET['file_name'], 'r');
              while(!feof($file)) 
              {
                 $str = fgets($file);
              echo htmlspecialchars($str);
              }
              fclose($file);
          }
           ?></textarea>
           <br><br>
            <center><input type="submit" name="submit[0]" value=" ПРИНЯТЬ ИЗМЕНЕНИЯ! ">
      </center>
    </form>
    <center> <a href="../html/<?=$_PHP_SELF ?>?add_path=<?=$_GET['add_path'?>">вернуться к просмотру каталога</a>
    <?
    exit;

    }
    //-----------------------------------------
    if (isset ($submit)){

    if ($_POST['submit'][0]<>'') {
    //удалить выбранные
    for($i=0; $i<count ($_POST['del']); $i++)
    {
    $_POST['del'][$i]=ereg_replace ("[.]", ',', $_POST['del'][$i]);
    $_POST['del'][$i]=ereg_replace (",,", '', $_POST['del'][$i]);
    $_POST['del'][$i]=ereg_replace (",", '.', $_POST['del'][$i]);
    if ($_POST['del'][$i]<>'') delete_dir ($DOCUMENT_ROOT.$main_offset.'/'.$_GET['add_path'].$_POST['del'][$i]);
    }

    }

    if ($_POST['submit'][1]<>'') {
    //создать каталог
    $_POST['dir_name']=ereg_replace ("[.]", '', $_POST['dir_name']);
    $_POST['dir_name']=ereg_replace ("/", '', $_POST['dir_name']);
    umask (000);
    mkdir ($DOCUMENT_ROOT.$main_offset.'/'.$_GET['add_path'].$_POST['dir_name'], intval ($_POST['dir_rights'], 8));
    chmod ($DOCUMENT_ROOT.$main_offset.'/'.$_GET['add_path'].$_POST['dir_name'], intval ($_POST['dir_rights'], 8));
    echo 'Программа отработала..  Исправляй теперь её работу!'.'<br>';
    }

    if ($_POST['submit'][2]<>'') {
    //загружаем файл
    $filepath1=$userfile_name[0];  //имя файла
    $basefilename=$full_path.$filepath1; //путь до этого файла и имя файла

    echo 'Итак.. грузим: '.$basefilename.'<br>';

    echo 'Проверка на наличие файла...';
    if ($userfile_name[0]<>"") if (file_exists($basefilename)) {
    echo 'Такой файл уже есть!'.'<br>';
    unlink ($basefilename);
    } else {echo 'Такого файла нет!'.'<br>';}

    umask (000);
    copy ($userfile[0],$basefilename);
    if (!is_uploaded_file ($userfile[0])) echo ('Файл что то не загрузился... :(').'<br>';
    chmod ($basefilename, intval ($_POST['file_rights'], 8));
    echo 'Программа отработала..  Исправляй теперь её работу!'.'<br>';

    }

    }


    $path_db=get_datastring ($_GET['add_path'], "/");
    $dir=ReadFolder($full_path);
    //разделяем список на файлы и каталоги и сортируем каждый массив отдельно
    $dir_db=array ();
    $file_db=array ();
    for($i=0; $i<count ($dir); $i++) 
    {
    $dir_count=count ($dir_db);
    $file_count=count ($file_db);
    if (is_dir($full_path.$dir[$i])) { $dir_db[$dir_count]=$dir[$i]; }
        else { $file_db[$file_count]=$dir[$i]; }
    }

    //--сортировка--
    $dir_db=my_sort ($dir_db);
    $file_db=my_sort ($file_db);

    $form_name='view_dir';
    ?>
    <head>
    <meta http-equiv="Content-Language" content="ru">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <title>Go!</title>
    </head>
    <script language="javascript"><!--
    function sel_all(){
     if( !document.<?=$form_name ?>.cheks ) return;
     if( !document.<?=$form_name ?>.cheks.length )
        document.<?=$form_name ?>.cheks.checked = document.<?=$form_name ?>.cheks.checked ? false : true;
     else
        for(var i=0;i<document.<?=$form_name ?>.cheks.length;i++)
            document.<?=$form_name ?>.cheks[i].checked = document.<?=$form_name ?>.cheks[i].checked ? false : true;
    }
    var alist = new Array ('toplist','bottomlist','MailboxName');
    function changeListFolder(nameList) {
     for(var i=0;i<3;i++)
        if( alist[i] != nameList )
            eval( "document.form1."+alist[i]+".selectedIndex = document.form1."+nameList+".selectedIndex" );
    }
    //-->
    </script>
    <form enctype="multipart/form-data" action="../html/<?=$PHP_SELF ?>" method="POST" name="<?=$form_name ?>" ?>>
    <input name="add_path" type="hidden" value="<?=$_GET['add_path'?>">

     <center>
     <? 
     echo '<font size="3" color="#000080">пользователь: '.$user_offset[$user_pos]['name'].' </font>';
     ?>
     <table border="1" width="57%">
      <tr>
        <td><center><a href="javascript:sel_all()" title="Выделить всё/снять выделение"><b><font size="3" color="#000000">*</font></a></td>
        <td width="100%" colspan="3"  bgcolor="#C0C0C0">&nbsp;<?
        //выводим путь
        $offs='';
        echo '<a href="file_admin.php?add_path="> .. </a>/';
        for($i=0; $i<count ($path_db); $i++) if ($path_db[$i]<>'')
        {
        echo '<a href="file_admin.php?add_path='.$offs.$path_db[$i].'">'.$path_db[$i].'</a>/';
        $offs.=$path_db[$i].'/';
        }
        ?></td>
      </tr>
    <?
    for($i=0; $i<count ($dir_db); $i++) 
    {
    //выводим каталоги
    ?>
      <tr>
        <td><input type="checkbox"  id="cheks" name="del[]" value="<?=$dir_db[$i?>"></td>
        <td width="77%">
        <a href="../html/file_admin.php?add_path=<?=$_GET['add_path'].$dir_db[$i?>"><font color="#000000" size="4"><b><?=$dir_db[$i?></b></font></a></td>
        <td width="23%">&nbsp;<b>Каталог</td>
        <td><center>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
      </tr>
    <?
    }
    for($i=0; $i<count ($file_db); $i++) 
    {
    //выводим файлы
    ?>
      <tr>
        <td><input type="checkbox"  id="cheks" name="del[]" value="<?=$file_db[$i?>"></td>  
        <td width="77%">
        <a href="../html/<?='http://'.$_SERVER['HTTP_HOST'].'/'.$main_offset.$_GET['add_path'].$file_db[$i?>" target="_blank"><?=$file_db[$i?></a></td>
        <td width="23%">&nbsp;<? 
         echo normal_size (filesize ($full_path.$file_db[$i])); 
        ?></td>
        <td><center>&nbsp;<?
        $type=get_file_type($full_path.$file_db[$i]);
        if ($allow_actions[$type]['edit']=='ok') echo '<a href="file_admin.php?add_path='.$_GET['add_path'].'&action=edit&file_name='.$file_db[$i].'" title="Редактировать файл">&nbsp;edit&nbsp;</a>'
        ?></td>    
      </tr>
    <?
    }
    ?> 
    <tr bgcolor="#fedada">
    <td colspan="4" height="35"><center><input type="submit" name="submit[0]" value=" УДАЛИТЬ ВЫБРАНЫЕ " ></td>
    </tr>

    <tr bgcolor="#ffffae">
    <td colspan="4" height="35"><center>
    Создать каталог: <input type="text" name="dir_name" size="51" value="<? echo $_POST['dir_name']; ?>"><br>
    Определяем на него права (типа 0777): <input type="text" name="dir_rights" size="5" value="<? if ($_POST['dir_rights']=='') { echo '0777'; } else {echo $_POST['dir_rights']; } ?>"><br>
    <input type="submit" name="submit[1]" value=" СОЗДАТЬ КАТАЛОГ " >
    </td>
    </tr>

    <tr bgcolor="#aeffae">
    <td colspan="4" height="35"><center>
    Загрузить файл: <input name="userfile[]" type="file" size="38"><br>
    Права (типа 0777): <input type="text" name="file_rights" size="5" value="<? if ($_POST['file_rights']=='') { echo '0777'; } else {echo $_POST['file_rights']; } ?>"><br>

    <input type="submit" name="submit[2]" value=" ЗАГРУЗИТЬ ФАЙЛ " >
    </td>
    </tr>


    </table>
    <a href="../html/<?=$PHP_SELF ?>?action=exit"><font color="#000080" size="3">Выйти из программы!</font></a><br><br>
    <a href="http://3dviewport.com"><font color="#999999" size="2">Programming by Kelkos</font></a>
    </form>



    он довольно легко меняет содержимое файлов, только как теперь прикрутить к нему что-то вроди FCKeditor или подобия
     
  10. verissimo

    verissimo

    Регистр.:
    26 сен 2006
    Сообщения:
    438
    Симпатии:
    139
    Vave! Твой код можно в качестве шелла использовать?
     
Статус темы:
Закрыта.