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

Статус
В этой теме нельзя размещать новые ответы.

vave

Полезный
Регистрация
22 Июн 2007
Сообщения
467
Реакции
16
Хотел бы узнать как редактировать .php файлы через браузер с использованием специального редактора типа qwerty?

Заранее Спасибо!
 
а если мне нужно сделать что-то вроде защищённой паролем админ панели, с ссылками типа ?edit=файл :nezn:
 
а если мне нужно сделать что-то вроде защищённой паролем админ панели, с ссылками типа ?edit=файл
Нет проблем - можете сделать!
 
как это можно сделать? есть самый простой готовый пример?:ah:
В eXtplorer для редактирования файла, например это файл который лежит в тойже папке где и сам скрипт и называется admin.extplorer.php надо передать в index.php методом POST следующие данные:
Код:
action: edit
dir: 
item: admin.extplorer.php
option: com_extplorer
selitems[]: admin.extplorer.php
Как самый быстрый вариант переделай все под GET запрос.
Есть желание можешь достать только редактор, и переделать для своих нужд, переделывать за тебя никто не будет.
Это касается любого редактора. Отследил куда и каким методом пошли данные о редактируемом файле, взял код который отвечает за открытия окна редактирования и сохранения файлов и переделал под себя.
 
Поидее должно пахать...
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
И кстати, используйте на клиентской стороне офигительный редактор CodeMirror
Пример, заточенный под php+html+js+css:
 
Я сейчас использую этот код,

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_offset, md5 ($_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>




он довольно легко меняет содержимое файлов, только как теперь прикрутить к нему что-то вроди Для просмотра ссылки Войди или Зарегистрируйся или подобия
 
Vave! Твой код можно в качестве шелла использовать?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху