Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

[РЕШЕНО] Редактор файлов на PHP

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> [РЕШЕНО] Редактор файлов на PHP
Имя
Сообщение << Старые топики   Новые топики >>
[РЕШЕНО] Редактор файлов на PHP - 2009-07-27 20:17:39.586666   
Ltonid

Сообщений: 4970
Оценки: 740
Присоединился: 2008-12-29 13:21:56.166666
Для своего развития и изучения php + javasсriрt, написал редактор файлов.
Функционал: создание, удаление, редактирование, предпросмотр.
Пока что работает только с одной жестко установленной директорией.
Задача стояла: сделать понятно, и в объеме одного файла.
Вот итог
&lt;? // Отключение хеширование header("Cache-Control: no-cache, must-revalidate"); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Константы $fname=$_SERVER['PHP_SELF']; $foldername="text"; // Редактирование заголовка echo ("&lt;html&gt;&lt;head&gt;&lt;title&gt;"); if (isset($_POST["test"])){ $a=$_POST["test"]; $b=substr(strrchr($a,":"),1); $c=str_replace(":".$b,"",$a); echo "&gt;&gt;&gt;".$b;}else{ $b="Редактор"; echo $b;} echo ("&lt;/title&gt;&lt;/head&gt;"); ?&gt; &lt;bоdу оnlоаd="document.form.test.focus();" style="background: #000000; color: #009900;"&gt; &lt;form action="&lt;?echo $fname;?&gt;" method="post" name="form"&gt; &lt;input type="text" size="200%" name="test" style="background-color: #000000; color: #006600; border: #000000;"&gt; &lt;/form&gt; &lt;? // отображение списка файлов $dir=opendir("text"); echo "Files:&lt;br&gt;"; ?&gt; &lt;table width=100%&gt;&lt;tr&gt;&lt;td&gt; &lt;? echo ("&lt;table border=0 width=200&gt;"); while ($file=readdir($dir)) { if(($file !=".") && ($file !="..")){ echo "&lt;tr&gt;&lt;td&gt;"; echo "&lt;a href=$foldername/$file target=_blank&gt;$file&lt;/a&gt;"; echo "&lt;/td&gt;"; echo "&lt;td&gt;&lt;form method=post action=$fname name=edit&gt;&lt;INPUT TYPE=hidden name=test value=writefile:$file&gt;&lt;INPUT TYPE=submit value=Edit&gt;&lt;/form&gt;&lt;/td&gt;"; echo "&lt;td&gt;&lt;form method=post action=$fname name=edit&gt;&lt;INPUT TYPE=hidden name=test value=deletefile:$file&gt;&lt;INPUT TYPE=submit value=Delete&gt;&lt;/form&gt;&lt;/td&gt;"; echo "&lt;/tr&gt;";} } echo ("&lt;/table&gt;"); closedir($dir); ?&gt; &lt;/td&gt;&lt;td&gt; &lt;? if (isset($_POST["test"])) { // Воодимая строка разбивется и выделяется команда и параметр $a=$_POST["test"]; // строка $b=substr(strrchr($a,":"),1); // параметр $c=str_replace(":".$b,"",$a); // команда // чтение из файла if ($c=="readfile") { echo "&lt;br&gt;"; $file=fopen($foldername."/".$b,"r"); $buffer=fread($file,100); print $buffer; fclose ($file); } // редактирование файла if ($c=="writefile") { echo "&lt;form name=text action=$fname method=post&gt;"; echo "&lt;TEXTAREA NAME=test1 ROWS=10 COLS=100&gt;"; $file=fopen($foldername.'/'.$b,'r');$buff=readfile($foldername.'/'.$b);fclose($file); echo "&lt;/TEXTAREA&gt;&lt;br&gt;&lt;INPUT TYPE=hidden NAME=filename value=".$b."&gt;&lt;input type=submit value=Сохранить&gt;"; echo "&lt;input type=button value=Обновить оnclick='document.info.location.reload();'&gt;"; echo "&lt;/form&gt;"; echo "&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;"; echo ("&lt;ifrаmе name=info width=100% height=300 src=".$foldername."/".$b." name=form frameborder=1&gt;&lt;/ifrаmе&gt;"); // предпросмотр } // создание файла if ($c=="mkf") { echo "&lt;br&gt;"; $file=fopen($foldername.'/'.$b,'w');fclose($file); echo "Файл ".$b." создан успешно"; $url="$fname"; echo '&lt;sсriрt type="text/javasсriрt"&gt;window.location.href="'.$url.'";&lt;/sсriрt&gt;'; // обновление страницы exit; } // удаление файла if ($c=="deletefile") { echo "&lt;br&gt;"; unlink($foldername.'/'.$b); echo "Файл ".$b." удален успешно"; $url="$fname"; echo '&lt;sсriрt type="text/javasсriрt"&gt;window.location.href="'.$url.'";&lt;/sсriрt&gt;'; // обновление страницы exit; } // помощь if ($_POST["test"]=="help") { echo "Доступлные команды: &lt;br&gt; -- mkf:[filename] - создание файла &lt;br&gt; -- writefile:[filename] - редактирование файла &lt;br&gt; -- readfile:[filename] -- чтение файла (только для текстовых) &lt;br&gt; -- 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);} ?&gt; &lt;/bоdу&gt; &lt;/html&gt;

А теперь вопрос: Когда жмешь "сохранить" то все нормально проходит, но потом снова открывать файл и жать обновить, чтобы в окне предпросмотра изображение обновилось. Вот как сделать так, чтобы исключить перезагрузку страницы (идиальный вариант) или чтобы сразу после перезагрузки, открылся тот файл, который редактировал.
Принимаются любые варианты, но так сказать применимые на бесплатных хостингах (иногда функционал ограничен). В инете поискал, предлагают сохранять нужное в куки или файл и тд и тп, есть ли способ проще?

P.S. я знаю, что таких вещей полным полно и с лучшим функционалом, но при их вскрытии обнаруживаются такие извращения, что изменнение количества пробелов может привести к краху (сарказм).
P.S.S. прошу пока что реализацию не обсуждать т.к. все пишется с нуля, руководствуясь книгами, а не готовыми примерами.

спс, что переместили, буду знать.
Post #: 1
RE: Редактор файлов на PHP - 2009-07-28 00:37:57.366666   
codeismy.name

Сообщений: 618
Оценки: 0
Присоединился: 2009-07-19 00:30:13.200000
вообще посоветовал бы подучить какойнить фрэймворк яваскриптовый.. например жквэри…
код селектора можно выплёвывать в хэдер если очень большое желание всё в одном файле делать
и делать всё аяксом.. при использовании фрэймвокра всё будет в разы проще :)
Post #: 2
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, приведи пример.
Post #: 3
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" так как научиться работать с фрэймворками полезно тоже.

насчёт аякса, а кто сказал что он не пишет в файл?:) да сам аяксе нет, но ты можеш посылать аяксом данные из скрипта сам в себя и добавить доп параметр гет, и если он установлен то ты не выводиш редактор, а выводиш респонс и сохраняеш полученные данные
Post #: 4
RE: Редактор файлов на PHP - 2009-07-29 22:07:01.016666   
Ltonid

Сообщений: 4970
Оценки: 740
Присоединился: 2008-12-29 13:21:56.166666
В общем, после двух дней мучений, я понял что ты написал. Научился передавать параметры из формы PHP в JS и потом из JS в скрипт записи в файл, но страница все равно перезагружается. Можно ли пердать данные в JS который будет во фрэйме, и там же будет скрипт записи, что тогда перезагрузиться?
Post #: 5
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" таким образом при сабмите формы все данные будут идти во фрєйм а не в текущую страницу
Post #: 6
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
Post #: 7
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, тобишь все переделать).
Теперь после сохранения снова открывается редактируемый документ, жмем обновить и обновляется предпросмотр, жмем завершить и заканчиваем редактирование.
Авось кому пригодиться.
&lt;? // Отключение хеширование 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 ("&lt;html&gt;&lt;head&gt;&lt;title&gt;"); if (!isset($_POST["delfile"])) //если нажали завершить редактирование { if (isset($_POST["test"])){ //начало редактирования $a=$_POST["test"]; $b=substr(strrchr($a,":"),1); $c=str_replace(":".$b,"",$a); echo "&gt;&gt;&gt;".$b;} else { if(@fopen("temp.txt", "r")){ // нажали сохранить $tempopen=fopen("temp.txt", "r"); $btemp=fread($tempopen,20); $b=$btemp; echo "&gt;&gt;&gt;".$b;fclose($tempopen);} else{ $b="Редактор"; echo $b;} // ниче не делали } } else{ $b="Редактор"; echo $b;} // нажали завершить редактирование echo ("&lt;/title&gt;&lt;/head&gt;"); ?&gt; &lt;bоdу оnlоаd="document.form.test.focus();" style="background: #000000; color: #009900;"&gt; &lt;form action="&lt;?echo $fname;?&gt;" method="post" name="form"&gt; &lt;input type="text" size="200%" name="test" style="background-color: #000000; color: #006600; border: #000000;"&gt; &lt;/form&gt; &lt;? // отображение списка файлов $dir=opendir("text"); echo "Files:&lt;br&gt;"; ?&gt; &lt;table width=100%&gt;&lt;tr&gt;&lt;td&gt; &lt;? echo ("&lt;table border=0 width=200&gt;"); while ($file=readdir($dir)) { if(($file !=".") && ($file !="..")){ echo "&lt;tr&gt;&lt;td&gt;"; echo "&lt;a href=$foldername/$file target=_blank&gt;$file&lt;/a&gt;"; echo "&lt;/td&gt;"; echo "&lt;td&gt;&lt;form method=post action=$fname name=edit&gt;&lt;INPUT TYPE=hidden name=test value=writefile:$file&gt;&lt;INPUT TYPE=submit value=Edit&gt;&lt;/form&gt;&lt;/td&gt;"; echo "&lt;td&gt;&lt;form method=post action=$fname name=edit&gt;&lt;INPUT TYPE=hidden name=test value=deletefile:$file&gt;&lt;INPUT TYPE=submit value=Delete&gt;&lt;/form&gt;&lt;/td&gt;"; echo "&lt;/tr&gt;";} } echo ("&lt;/table&gt;"); closedir($dir); ?&gt; &lt;/td&gt;&lt;td&gt; &lt;? //возврат в редактирование $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 "&lt;form name=text action=$fname method=post&gt;"; echo "&lt;TEXTAREA NAME=test1 ROWS=10 COLS=100&gt;"; $file=fopen($foldername.'/'.$b,'r');$buff=readfile($foldername.'/'.$b);fclose($file); echo "&lt;/TEXTAREA&gt;&lt;br&gt;&lt;INPUT TYPE=hidden NAME=filename value=".$b."&gt;&lt;input type=submit value=Сохранить&gt;"; echo "&lt;input type=button value=Обновить оnclick='document.info.location.reload();'&gt;"; echo "&lt;/form&gt;"; echo "&lt;form action=$fname method=post name=deletefile&gt;&lt;input type=hidden name=delfile value=1&gt;&lt;input type=submit value='Закончить редактирование'&gt;&lt;/form&gt;"; echo "&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;"; echo ("&lt;ifrаmе name=info width=100% height=300 src=".$foldername."/".$b." name=form frameborder=1&gt;&lt;/ifrаmе&gt;"); // предпросмотр }} else { echo "Файл не найден"; } if (isset($_POST["test"])) { // Воодимая строка разбивется и выделяется команда и параметр $a=$_POST["test"]; // строка $b=substr(strrchr($a,":"),1); // параметр $c=str_replace(":".$b,"",$a); // команда // чтение из файла if ($c=="readfile") { echo "&lt;br&gt;"; $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 "&lt;form name=text action=$fname method=post&gt;"; echo "&lt;TEXTAREA NAME=test1 ROWS=10 COLS=100&gt;"; $file=fopen($foldername.'/'.$b,'r');$buff=readfile($foldername.'/'.$b);fclose($file); echo "&lt;/TEXTAREA&gt;&lt;br&gt;&lt;INPUT TYPE=hidden NAME=filename value=".$b."&gt;&lt;input type=submit value=Сохранить&gt;"; echo "&lt;input type=button value=Обновить оnclick='document.info.location.reload();'&gt;"; echo "&lt;/form&gt;"; echo "&lt;form action=$fname method=post name=deletefile&gt;&lt;input type=hidden name=delfile value=1&gt;&lt;input type=submit value='Закончить редактирование'&gt;&lt;/form&gt;"; echo "&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;"; echo ("&lt;ifrаmе name=info width=100% height=300 src=".$foldername."/".$b." name=form frameborder=1&gt;&lt;/ifrаmе&gt;"); // предпросмотр } // создание файла if ($c=="mkf") { echo "&lt;br&gt;"; $file=fopen($foldername.'/'.$b,'w');fclose($file); echo "Файл ".$b." создан успешно"; $url="$fname"; echo '&lt;sсriрt type="text/javasсriрt"&gt;window.location.href="'.$url.'";&lt;/sсriрt&gt;'; // обновление страницы exit; } // удаление файла if ($c=="deletefile") { echo "&lt;br&gt;"; unlink($foldername.'/'.$b); echo "Файл ".$b." удален успешно"; $url="$fname"; echo '&lt;sсriрt type="text/javasсriрt"&gt;window.location.href="'.$url.'";&lt;/sсriрt&gt;'; // обновление страницы exit; } // помощь if ($_POST["test"]=="help") { echo "Доступлные команды: &lt;br&gt; -- mkf:[filename] - создание файла &lt;br&gt; -- writefile:[filename] - редактирование файла &lt;br&gt; -- readfile:[filename] -- чтение файла (только для текстовых) &lt;br&gt; -- 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 '&lt;sсriрt type="text/javasсriрt"&gt;window.location.href="'.$url.'";&lt;/sсriрt&gt;'; // обновление страницы } // удаление файла temp if (isset($_POST["delfile"])){ if (@fopen("temp.txt", "r")) { unlink ("temp.txt");}} ?&gt; &lt;/bоdу&gt; &lt;/html&gt;
Post #: 8
Страниц:  [1]
Все форумы >> [Веб-программинг] >> [РЕШЕНО] Редактор файлов на PHP







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.