login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Handige scripts > Online text editor

Online text editor

Auteur: Thomas - 27 augustus 2004 - 13:33 - Gekeurd door: Dennisvb - Hits: 7896 - Aantal punten: 4.41 (17 stemmen)



Met behulp van deze PHP file kun je in een zelf gespecificeerde directory ($dir) bestanden van een bepaald type (die in het array $allowed staan) aanmaken, updaten en verwijderen.

Het enige wat je hoeft te doen (behalve het plaatsen van de php en de stylesheet file op je webserver) is het aanmaken van een directory (/text - of een andere directory - dan moet je $dir hier aan aanpassen).

Er zit op dit moment nog geen beveiliging ingebakken, dus IEDEREEN die op de hoogte is van deze php file kan dus bestanden aanpassen en verwijderen. Je zult zelf dus een beveiligingsmechanisme in moeten bakken, wat overigens helemaal niet moeilijk is.

LET OP wanneer je filetypes gaat toevoegen aan je $allowed array!
htm(l) in combinatie met javascript (js) files kan al problemen opleveren, om maar te zwijgen van iemand die php files kan toevoegen (en uitvoeren!!!) op je webpagina, met alle rampzalige gevolgen van dien. Draag er dus zorg voor dat deze pagina OFWEL goed beveiligd is, OFWEL de eerdergenoemde typen niet toegestaan worden (niet aanwezig zijn in je $allowed array). De initiele filetypen (.css, .js, .txt) kunnen in principe weinig kwaad.

Verder is de php file vrij self-explanatory, met veel status-boodschappen voor het geval er iets fout gaat. Wanneer de chmod-commando's problemen opleveren, zou je kunnen proberen deze te commenten.

Even een bijna vanzelfsprekende opmerking: je kan een file niet èn editten èn van naam doen veranderen. Wanneer je dus vrolijk text in je textarea aan het aanpassen bent, en hierna bedenkt dat je je filename wilt renamen (en dit ook doet), dan zal alleen het laatste gebeuren - de wijzigingen aan je bestand ben je dan KWIJT.

Je kunt overigens alleen een textfile updaten als er wijzigen in aangebracht zijn (maar deze JavaScript controle zou je er uit kunnen slopen).

Deze php file is getest op mijn eigen webpage, op mijn experimentele webserver en op lycos, in zowel IExplorer 6.0 en Mozilla FireFox 0.8.

04-05-04
onLoad regel toegevoegd voor $focus (met dank aan TheCelestialCelebi)

Code:
style.css
  1. .def {font-family: Arial;
  2. font-size: 9pt;
  3. color: #000000;
  4. background-color: #ffffff;}
  5.  
  6. .code {font-family: Courier New;
  7. font-size: 9pt;
  8. color: #000000;}
  9.  
  10. td {font-family: Arial;
  11. font-size: 9pt;
  12. color: #000000;
  13. background-color: #ffffff;}
  14.  
  15. .form {font-family: Arial;
  16. font-size: 9pt;
  17. color: #000000;}
  18.  
  19. form {margin: 0;
  20. padding: 0;}


file.php
  1. <?php
  2. $dir = $_SERVER['DOCUMENT_ROOT']."/text"; // bestandspad zonder een slash aan het einde
  3. $allowed = array("css", "js", "txt"); // toegestane filetypen
  4. $pattern = "/^([\w_-]+\.)*([\w_-])+$/"; // regexp voor toegestane filenamen
  5. $focus = false; // of het textveld gefocussed moet worden (werkt nog niet)
  6. $error = "<FONT COLOR=\"#ff0000\"><B>[error]</B></FONT> "; // foutboodschap voorvoegsel
  7.  
  8. function getext($name) {
  9. // pre: een bestandsnaam
  10. // ret: de extensie van de bestandsnaam
  11.  
  12. $atemp = explode(".", $name);
  13. return strtolower(array_pop($atemp));
  14. }
  15.  
  16. function getname($name) {
  17. // pre: een bestandsnaam
  18. // ret: het naam-deel van de bestandsnaam
  19.  
  20. $atemp = explode(".", $name);
  21. array_pop($atemp);
  22. return implode(".", $atemp);
  23. }
  24.  
  25. if(isset($_POST['action'])) {
  26. // selecteer een bestand
  27. if($_POST['action'] == "select") {
  28. $filename = $_POST['ffile']; // selecteer het textbestand
  29. $focus = true;
  30. }
  31.  
  32. // wijzig een bestand
  33. if($_POST['action'] == "change") {
  34. $filename = $_POST['ffile']; // selecteer het textbestand
  35. chmod($dir."/".$filename, 0666);
  36. $handle = fopen($dir."/".$filename, "wt"); // openen om (t)extfile te over(w)riten
  37. fwrite($handle, stripslashes($_POST['tekst']));
  38. fclose($handle);
  39. chmod($dir."/".$filename, 0600);
  40. $msg = "file '".$filename."' saved succesfully";
  41. $focus = true;
  42. }
  43.  
  44. // maak een bestand
  45. if($_POST['action'] == "create") {
  46. $newfile = $_POST['cfile'].".".$_POST['ext']; // naam en extensie
  47. if(preg_match($pattern, $_POST['cfile'])) {
  48. if(!file_exists($dir."/".$newfile)) {
  49. if(!touch($dir."/".$newfile)) {
  50. $msg = $error."failed to create file '".$newfile."'";
  51. } else {
  52. $msg = "successfully created file '".$newfile."'";
  53. chmod($dir."/".$newfile, 0600);
  54. $filename = $newfile; // selecteer het textbestand
  55. $focus = true;
  56. }
  57. } else {
  58. $msg = $error."file '".$newfile."' already exists";
  59. }
  60. } else {
  61. $msg = $error."invalid file name";
  62. }
  63. }
  64.  
  65. // verwijder een bestand
  66. if($_POST['action'] == "delete") {
  67. $bdel = @unlink($dir."/".$_POST['ffile']);
  68. $msg = "removing ".$_POST['ffile']." ".($bdel ? "" : "un")."succesful";
  69. }
  70.  
  71. // hernoem een bestand
  72. if($_POST['action'] == "rename") {
  73. if(!strcmp($_POST['fname'].".".$_POST['ext'], $_POST['ffile'])) {
  74. $msg = $error."source and destination file have the same name";
  75. } else {
  76. if(file_exists($dir."/".$_POST['fname'].".".$_POST['ext'])) {
  77. $msg = $error."the target name exists already";
  78. } else {
  79. if(!preg_match($pattern, $_POST['fname'])) {
  80. $msg = $error."error renaming to '".$_POST['fname'].".".$_POST['ext']."'";
  81. } else {
  82. if(rename($dir."/".$_POST['ffile'], $dir."/".$_POST['fname'].".".$_POST['ext'])) {
  83. $msg = "'".$_POST['ffile']."' renamed to '".$_POST['fname'].".".$_POST['ext']."'";
  84. $filename = $_POST['fname'].".".$_POST['ext']; // select the textfile
  85. $focus = true;
  86. } else {
  87. $msg = $error."error renaming file";
  88. }
  89. }
  90. }
  91. }
  92. } // einde hernoeming
  93. } // einde actie
  94. ?>
  95. <html>
  96. <head>
  97. <title>file manipulation</title>
  98. <link href="style.css" type="text/css" rel="stylesheet">
  99. </head>
  100.  
  101. <body class="def"<?= ($focus ? " onLoad=\"document.forms['frm'].elements['tekst'].focus();\"" : "") ?>>
  102. <br /><br />
  103. <hr noshade>
  104. <table width="600" border="0" cellspacing="0" cellpadding="2">
  105. <tr>
  106. <td width="250">
  107. <form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
  108. <select name="ffile" onChange="this.form.submit();" size="1">
  109. <?php
  110. // als er geen bestand is geselecteerd
  111. if(!isset($filename)) {
  112. ?>
  113. <option value="" selected="selected">select a file</option>
  114. <?php
  115. }
  116.  
  117. // lees de directory en kijk of hier toegestane bestand(styp)en in staan
  118. $dhandle = opendir($dir);
  119. while(false !== ($file = readdir($dhandle))) {
  120. if(filetype($dir."/".$file) == "file") {
  121. if(in_array(getext($file), $allowed)) {
  122. ?>
  123. <option value="<?= $file ?>"<?= ($file == $filename ? " selected=\"selected\"" : "") ?>><?= $file ?></option>
  124. <?php
  125. }
  126. }
  127. }
  128. closedir($dhandle);
  129. ?>
  130. </select>
  131. <input type="hidden" name="action" value="select" />
  132. </form>
  133. </td>
  134. <td width="350">
  135. <form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
  136. create <input type="text" name="cfile" size="20" maxlength="200" />.<select class="form" name="ext">
  137. <?php
  138. // maak een lijst van toegestane filetypes
  139. foreach($allowed as $v) {
  140. ?>
  141. <option value="<?= $v ?>"><?= $v ?></option>
  142. <?php
  143. }
  144. ?>
  145. </select>
  146. <input class="form" type="submit" name="submit" value="create" />
  147. <input type="hidden" name="action" value="create" />
  148. </form>
  149. </td>
  150. </tr>
  151. </table>
  152. <b>status message:</b> <?= (isset($msg) ? $msg : "none") ?><br />
  153. <?php
  154. if(isset($filename)) {
  155. ?>
  156. <form name="frm" action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
  157. <textarea class="code" name="tekst" cols="80" rows="20" onChange="document.forms['frm'].elements['wijz'].disabled = false; document.forms['frm'].elements['wijz'].focus();">
  158. <?php
  159. if(file_exists($dir."/".$filename)) {
  160. $handle = fopen($dir."/".$filename, "rt"); // open to (r)ead, (t)ext file
  161. echo htmlentities(fread($handle, filesize($dir."/".$filename)));
  162. fclose($handle);
  163. }
  164. ?>
  165. </textarea><br />
  166. <table width="600" border="0" cellspacing="0" cellpadding="2">
  167. <tr>
  168. <td width="250">
  169. <INPUT TYPE="hidden" NAME="ffile" VALUE="<?= $filename ?>" />
  170. <input class="form" type="submit" name="action" value="change" disabled="disabled" id="wijz" />
  171. <input class="form" type="submit" name="action" value="delete" onClick="return window.confirm('Delete file?');" />
  172. </td>
  173. <td width="350">
  174. rename to <input class="form" type="text" name="fname" value="<?= getname($filename) ?>" size="20" maxlength="200" />.<select class="form" name="ext">
  175. <?php
  176. // maak een lijst van toegestane filetypes
  177. foreach($allowed as $v) {
  178. ?>
  179. <option value="<?= $v ?>"<?= (getext($filename) == $v ? " selected=\"selected\"" : "") ?>><?= $v ?></option>
  180. <?php
  181. }
  182. ?>
  183. </select>
  184. <input class="form" type="submit" name="action" value="rename" />
  185. </td>
  186. </tr>
  187. </table>
  188. </form>
  189. <?php
  190. }
  191. ?>
  192. </body>
  193. </html>
Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (6)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.079s