[РЕШЕНО] Редактор файлов на PHP
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
[РЕШЕНО] Редактор файлов на PHP - 2009-07-27 20:17:39.586666
|
|
|
Ltonid
Сообщений: 4970
Оценки: 740
Присоединился: 2008-12-29 13:21:56.166666
|
Для своего развития и изучения php + javasсriрt, написал редактор файлов. Функционал: создание, удаление, редактирование, предпросмотр. Пока что работает только с одной жестко установленной директорией. Задача стояла: сделать понятно, и в объеме одного файла. Вот итог <?
// Отключение хеширование
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// Константы
$fname=$_SERVER['PHP_SELF'];
$foldername="text";
// Редактирование заголовка
echo ("<html><head><title>");
if (isset($_POST["test"])){
$a=$_POST["test"];
$b=substr(strrchr($a,":"),1);
$c=str_replace(":".$b,"",$a);
echo ">>>".$b;}else{
$b="Редактор"; echo $b;}
echo ("</title></head>");
?>
<bоdу оnlоаd="document.form.test.focus();" style="background: #000000; color: #009900;">
<form action="<?echo $fname;?>" method="post" name="form">
<input type="text" size="200%" name="test" style="background-color: #000000; color: #006600; border: #000000;">
</form>
<?
// отображение списка файлов
$dir=opendir("text");
echo "Files:<br>";
?>
<table width=100%><tr><td>
<?
echo ("<table border=0 width=200>");
while ($file=readdir($dir))
{
if(($file !=".") && ($file !="..")){
echo "<tr><td>";
echo "<a href=$foldername/$file target=_blank>$file</a>";
echo "</td>";
echo "<td><form method=post action=$fname name=edit><INPUT TYPE=hidden name=test value=writefile:$file><INPUT TYPE=submit value=Edit></form></td>";
echo "<td><form method=post action=$fname name=edit><INPUT TYPE=hidden name=test value=deletefile:$file><INPUT TYPE=submit value=Delete></form></td>";
echo "</tr>";}
}
echo ("</table>");
closedir($dir);
?>
</td><td>
<?
if (isset($_POST["test"]))
{
// Воодимая строка разбивется и выделяется команда и параметр
$a=$_POST["test"]; // строка
$b=substr(strrchr($a,":"),1); // параметр
$c=str_replace(":".$b,"",$a); // команда
// чтение из файла
if ($c=="readfile")
{
echo "<br>";
$file=fopen($foldername."/".$b,"r");
$buffer=fread($file,100);
print $buffer;
fclose ($file);
}
// редактирование файла
if ($c=="writefile")
{
echo "<form name=text action=$fname method=post>";
echo "<TEXTAREA NAME=test1 ROWS=10 COLS=100>";
$file=fopen($foldername.'/'.$b,'r');$buff=readfile($foldername.'/'.$b);fclose($file);
echo "</TEXTAREA><br><INPUT TYPE=hidden NAME=filename value=".$b."><input type=submit value=Сохранить>";
echo "<input type=button value=Обновить оnclick='document.info.location.reload();'>";
echo "</form>";
echo "</td></tr></table>";
echo ("<ifrаmе name=info width=100% height=300 src=".$foldername."/".$b." name=form frameborder=1></ifrаmе>"); // предпросмотр
}
// создание файла
if ($c=="mkf")
{
echo "<br>";
$file=fopen($foldername.'/'.$b,'w');fclose($file);
echo "Файл ".$b." создан успешно";
$url="$fname";
echo '<sсriрt type="text/javasсriрt">window.location.href="'.$url.'";</sсriрt>'; // обновление страницы
exit;
}
// удаление файла
if ($c=="deletefile")
{
echo "<br>";
unlink($foldername.'/'.$b);
echo "Файл ".$b." удален успешно";
$url="$fname";
echo '<sсriрt type="text/javasсriрt">window.location.href="'.$url.'";</sсriрt>'; // обновление страницы
exit;
}
// помощь
if ($_POST["test"]=="help")
{
echo "Доступлные команды: <br>
-- mkf:[filename] - создание файла <br>
-- writefile:[filename] - редактирование файла <br>
-- readfile:[filename] -- чтение файла (только для текстовых) <br>
-- deletefile:[fileanme] - удаление файла";
}
}
// блок записи в файл
if (isset($_POST["test1"])){
$_POST['test1']=str_replace('\\',"",$_POST['test1']); // удаляет обратные слеши!!! т.к. функция fputs ствит "\" перед кавычками
$text=$_POST["test1"]; //текст
$filename=$_POST["filename"]; //имя файла
$file=fopen($foldername.'/'.$filename,"w+"); //создается файл (старый стирается)
fputs($file,$text); // запись в файл
fclose($file);}
?>
</bоdу>
</html> А теперь вопрос: Когда жмешь "сохранить" то все нормально проходит, но потом снова открывать файл и жать обновить, чтобы в окне предпросмотра изображение обновилось. Вот как сделать так, чтобы исключить перезагрузку страницы (идиальный вариант) или чтобы сразу после перезагрузки, открылся тот файл, который редактировал. Принимаются любые варианты, но так сказать применимые на бесплатных хостингах (иногда функционал ограничен). В инете поискал, предлагают сохранять нужное в куки или файл и тд и тп, есть ли способ проще? P.S. я знаю, что таких вещей полным полно и с лучшим функционалом, но при их вскрытии обнаруживаются такие извращения, что изменнение количества пробелов может привести к краху (сарказм). P.S.S. прошу пока что реализацию не обсуждать т.к. все пишется с нуля, руководствуясь книгами, а не готовыми примерами. спс, что переместили, буду знать.
|
|
|
RE: Редактор файлов на PHP - 2009-07-28 00:37:57.366666
|
|
|
codeismy.name
Сообщений: 618
Оценки: 0
Присоединился: 2009-07-19 00:30:13.200000
|
вообще посоветовал бы подучить какойнить фрэймворк яваскриптовый.. например жквэри… код селектора можно выплёвывать в хэдер если очень большое желание всё в одном файле делать и делать всё аяксом.. при использовании фрэймвокра всё будет в разы проще :)
|
|
|
RE: Редактор файлов на PHP - 2009-07-28 05:50:54.096666
|
|
|
Ltonid
Сообщений: 4970
Оценки: 740
Присоединился: 2008-12-29 13:21:56.166666
|
quote:
ORIGINAL: codeismy.name при использовании фрэймвокра всё будет в разы проще :) Да как бы и в блокноте все делать проще, но цель изучить php +/- javasсriрt, фрэймворк это совем другой раздел. Если можно его приделать прямо к этому примеру без потерь, то можешь привести пример? или надо все переделывать? Почитал, ты предлагаешь ajax как я понял. Но ajax не пишет в файл, да и ваще не работает с ними как php. Если можно с помощью ajax передать параметры из формы php, приведи пример.
|
|
|
RE: Редактор файлов на PHP - 2009-07-28 08:48:37.196666
|
|
|
codeismy.name
Сообщений: 618
Оценки: 0
Присоединился: 2009-07-19 00:30:13.200000
|
ну сам фрэймворк это всего один файлик… можно просто весь его контент через echo выплюнуть… типо echo "<script type=\"text/javascript\">тут сам фрэймворк</script>"; и на мой взглялад такой подход вписывается в рамки "цель изучить php +/- javasсriрt" так как научиться работать с фрэймворками полезно тоже. насчёт аякса, а кто сказал что он не пишет в файл?:) да сам аяксе нет, но ты можеш посылать аяксом данные из скрипта сам в себя и добавить доп параметр гет, и если он установлен то ты не выводиш редактор, а выводиш респонс и сохраняеш полученные данные
|
|
|
RE: Редактор файлов на PHP - 2009-07-29 22:07:01.016666
|
|
|
Ltonid
Сообщений: 4970
Оценки: 740
Присоединился: 2008-12-29 13:21:56.166666
|
В общем, после двух дней мучений, я понял что ты написал. Научился передавать параметры из формы PHP в JS и потом из JS в скрипт записи в файл, но страница все равно перезагружается. Можно ли пердать данные в JS который будет во фрэйме, и там же будет скрипт записи, что тогда перезагрузиться?
|
|
|
RE: Редактор файлов на PHP - 2009-07-30 09:01:38.473333
|
|
|
codeismy.name
Сообщений: 618
Оценки: 0
Присоединился: 2009-07-19 00:30:13.200000
|
вообщето не должен скрипт перегружаться если делать аяксом, но вариант с фрэймом тоже можно использовать. делаеш простую форму и ставиш ей target="my_frame" , а фрэйму ставиш имя name = "my_frame" таким образом при сабмите формы все данные будут идти во фрєйм а не в текущую страницу
|
|
|
RE: Редактор файлов на PHP - 2009-07-30 12:08:17.390000
|
|
|
Pashkela
Сообщений: 3756
Оценки: 736
Присоединился: 2007-01-03 06:19:40.900000
|
http://www.linkexchanger.su/2008/45.html
|
|
|
RE: Редактор файлов на PHP - 2009-07-30 16:44:23.306666
|
|
|
Ltonid
Сообщений: 4970
Оценки: 740
Присоединился: 2008-12-29 13:21:56.166666
|
quote:
ORIGINAL: Pashkela http://www.linkexchanger.su/2008/45.html Спасибо за ссылку, очень хорошая вещь, в будущем может воспользуюсь, но увы эти примеры не подпадают под условие "одним файлом". Всем спасибо проблему решил. Забил на перезагрузку и замудрения с js (иначе лучше и форму делать на js, тобишь все переделать). Теперь после сохранения снова открывается редактируемый документ, жмем обновить и обновляется предпросмотр, жмем завершить и заканчиваем редактирование. Авось кому пригодиться. <?
// Отключение хеширование
Header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); //Дата в прошлом
Header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
Header("Pragma: no-cache"); // HTTP/1.1
//Header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT");
// Константы
$fname=$_SERVER['PHP_SELF'];
$foldername="text"; // каталог с где будут файлы, создать заранее
// Редактирование заголовка
echo ("<html><head><title>");
if (!isset($_POST["delfile"])) //если нажали завершить редактирование
{
if (isset($_POST["test"])){ //начало редактирования
$a=$_POST["test"];
$b=substr(strrchr($a,":"),1);
$c=str_replace(":".$b,"",$a);
echo ">>>".$b;}
else {
if(@fopen("temp.txt", "r")){ // нажали сохранить
$tempopen=fopen("temp.txt", "r");
$btemp=fread($tempopen,20);
$b=$btemp;
echo ">>>".$b;fclose($tempopen);}
else{
$b="Редактор"; echo $b;} // ниче не делали
}
}
else{
$b="Редактор"; echo $b;} // нажали завершить редактирование
echo ("</title></head>");
?>
<bоdу оnlоаd="document.form.test.focus();" style="background: #000000; color: #009900;">
<form action="<?echo $fname;?>" method="post" name="form">
<input type="text" size="200%" name="test" style="background-color: #000000; color: #006600; border: #000000;">
</form>
<?
// отображение списка файлов
$dir=opendir("text");
echo "Files:<br>";
?>
<table width=100%><tr><td>
<?
echo ("<table border=0 width=200>");
while ($file=readdir($dir))
{
if(($file !=".") && ($file !="..")){
echo "<tr><td>";
echo "<a href=$foldername/$file target=_blank>$file</a>";
echo "</td>";
echo "<td><form method=post action=$fname name=edit><INPUT TYPE=hidden name=test value=writefile:$file><INPUT TYPE=submit value=Edit></form></td>";
echo "<td><form method=post action=$fname name=edit><INPUT TYPE=hidden name=test value=deletefile:$file><INPUT TYPE=submit value=Delete></form></td>";
echo "</tr>";}
}
echo ("</table>");
closedir($dir);
?>
</td><td>
<?
//возврат в редактирование
$temtfile="temp.txt";
if (@fopen($temtfile, "r")) {
if (!isset($_POST["delfile"])){
echo "Файл существует ";
$tempopen=fopen($temtfile, "r");
$btemp=fread($tempopen,20);
$b=$btemp;
print $btemp;
fclose ($tempopen);
$temp=fopen("temp.txt","w+");
fputs($temp,$b);
fclose($temp);
echo "<form name=text action=$fname method=post>";
echo "<TEXTAREA NAME=test1 ROWS=10 COLS=100>";
$file=fopen($foldername.'/'.$b,'r');$buff=readfile($foldername.'/'.$b);fclose($file);
echo "</TEXTAREA><br><INPUT TYPE=hidden NAME=filename value=".$b."><input type=submit value=Сохранить>";
echo "<input type=button value=Обновить оnclick='document.info.location.reload();'>";
echo "</form>";
echo "<form action=$fname method=post name=deletefile><input type=hidden name=delfile value=1><input type=submit value='Закончить редактирование'></form>";
echo "</td></tr></table>";
echo ("<ifrаmе name=info width=100% height=300 src=".$foldername."/".$b." name=form frameborder=1></ifrаmе>"); // предпросмотр
}} else {
echo "Файл не найден";
}
if (isset($_POST["test"]))
{
// Воодимая строка разбивется и выделяется команда и параметр
$a=$_POST["test"]; // строка
$b=substr(strrchr($a,":"),1); // параметр
$c=str_replace(":".$b,"",$a); // команда
// чтение из файла
if ($c=="readfile")
{
echo "<br>";
$file=fopen($foldername."/".$b,"r");
$buffer=fread($file,100);
print $buffer;
fclose ($file);
}
// редактирование файла
if ($c=="writefile")
{
$temp=fopen("temp.txt","w+");
fputs($temp,$b);
fclose($temp);
echo "<form name=text action=$fname method=post>";
echo "<TEXTAREA NAME=test1 ROWS=10 COLS=100>";
$file=fopen($foldername.'/'.$b,'r');$buff=readfile($foldername.'/'.$b);fclose($file);
echo "</TEXTAREA><br><INPUT TYPE=hidden NAME=filename value=".$b."><input type=submit value=Сохранить>";
echo "<input type=button value=Обновить оnclick='document.info.location.reload();'>";
echo "</form>";
echo "<form action=$fname method=post name=deletefile><input type=hidden name=delfile value=1><input type=submit value='Закончить редактирование'></form>";
echo "</td></tr></table>";
echo ("<ifrаmе name=info width=100% height=300 src=".$foldername."/".$b." name=form frameborder=1></ifrаmе>"); // предпросмотр
}
// создание файла
if ($c=="mkf")
{
echo "<br>";
$file=fopen($foldername.'/'.$b,'w');fclose($file);
echo "Файл ".$b." создан успешно";
$url="$fname";
echo '<sсriрt type="text/javasсriрt">window.location.href="'.$url.'";</sсriрt>'; // обновление страницы
exit;
}
// удаление файла
if ($c=="deletefile")
{
echo "<br>";
unlink($foldername.'/'.$b);
echo "Файл ".$b." удален успешно";
$url="$fname";
echo '<sсriрt type="text/javasсriрt">window.location.href="'.$url.'";</sсriрt>'; // обновление страницы
exit;
}
// помощь
if ($_POST["test"]=="help")
{
echo "Доступлные команды: <br>
-- mkf:[filename] - создание файла <br>
-- writefile:[filename] - редактирование файла <br>
-- readfile:[filename] -- чтение файла (только для текстовых) <br>
-- deletefile:[fileanme] - удаление файла";
}
}
// блок записи в файл
if (isset($_POST["test1"])){
$_POST['test1']=str_replace('\\',"",$_POST['test1']); // удаляет обратные слеши!!! т.к. функция fputs ствит "\" перед кавычками
$text=$_POST["test1"]; //текст
$filename=$_POST["filename"]; //имя файла
$file=fopen($foldername.'/'.$filename,"w+"); //создается файл (старый стирается)
fputs($file,$text); // запись в файл
fclose($file);
$url="$fname";
echo '<sсriрt type="text/javasсriрt">window.location.href="'.$url.'";</sсriрt>'; // обновление страницы
}
// удаление файла temp
if (isset($_POST["delfile"])){
if (@fopen("temp.txt", "r")) {
unlink ("temp.txt");}}
?>
</bоdу>
</html>
|
|
|
|
|