ホームページ  >  記事  >  バックエンド開発  >  オンライン コード エディター aceditor の単一ファイル バージョン

オンライン コード エディター aceditor の単一ファイル バージョン

WBOY
WBOYオリジナル
2016-07-25 08:47:332048ブラウズ
* 単一ファイルのオンラインコードエディタ editor.php バージョン: v1.21
* ウェブサイト上の任意のテキストファイルをオンラインで編集するのに非常に便利です
* パスワード暗号化方式:
* md5 (自己設定パスワード + $ace) //$ace は cdn ミラーアドレスです
*
* 使用方法:
* 1. $pwd 変数の値が false であることを確認し、このファイルを PHP スペースにアップロードし、アクセスしてください
* 2. まず、訪問するたびにパスワードを設定するように求められます。パスワードを設定して覚えておいてください
* 3. 初めて設定したパスワードでログインした後、このphpファイルはデフォルトで編集されます。
* 4. このファイルはエディターのコアファイルです。勝手に変更しないでください。
* 5. Ctrl + S キーの組み合わせを使用して編集したファイルを保存し、実行結果を待ってください。
* 6.保存アクションが実行されます。保存成功のメッセージが返されるまで必ずお待ちください
* 7. リセット操作は、他の人がパスを推測するのを防ぐために、このプログラムのファイル名を変更します
* 8. リフレッシュ機能は、このプログラム ファイルのみを更新します他のものを更新することはできません
*
* このエディタは Chrome ブラウザで使用することをお勧めします

プロジェクトの詳細を参照してください
http://git.oschina.net/ymk18/aceditor オンライン コード エディター aceditor の単一ファイル バージョン
  1. /**
  2. * 単一ファイルのオンラインコードエディタ editor.php バージョン: v1.21
  3. *
  4. * パスワード暗号化方式:
  5. * md5 (自分で設定したパスワード + $ace) //$ace は cdn ミラーアドレスです
  6. *
  7. * 方法使用方法:
  8. * 1. $pwd 変数の値が false であることを確認し、このファイルを PHP スペースにアップロードしてアクセスします
  9. * 2. 初めてパスワードを設定するように求められます。パスワードを設定して覚えてください。
  10. * 3. 初めて設定したパスワードでログインした後、この php ファイルはデフォルトで編集されます。
  11. * 4. このファイルはエディターのコアファイルです。勝手に変更しないでください
  12. * 5. Ctrl + S キーの組み合わせを使用して、編集したファイルを保存し、実行結果を待ってください
  13. * 6. アクションを保存します 実行後、保存成功のメッセージが返されるまで必ず待ってください
  14. * 7. リセット操作は変更されます他の人がパスを推測できないようにするためのこのプログラムのファイル名
  15. * 8. 更新機能はこのプログラム ファイルのみを更新し、他のファイルを更新することはできません
  16. *
  17. * 提案 このエディターは Chrome ブラウザーで使用してください
  18. */
  19. session_start();
  20. $curr_file = __FILE__; //デフォルトで現在のファイルを編集します
  21. $curr_file_path = str_replace(dirname(__FILE__), '', __FILE__) ;
  22. $pwd = false; //パスワード初期化のデフォルト値は false
  23. $ace = 'http://cdn.staticfile.org/ace/1.1.3/ace.js' //エディタコア js
  24. $tip ['core'] = 'http://cdn.staticfile.org/alertify.js/0.3.11/alertify.core.min.css';
  25. $tip['css'] = 'http:/ /cdn.staticfile.org/alertify.js/0.3.11/alertify.default.min.css';
  26. $tip['js'] = 'http://cdn.staticfile.org/alertify.js/0.3. 11/alertify .min.js';
  27. $jquery = 'http://cdn.staticfile.org/jquery/2.1.1-rc2/jquery.min.js';
  28. if ( false !== $pwd ) {
  29. define('DEFAULT_PWD', $pwd);
  30. }
  31. //ファイル拡張子名に対応する構文パーサー
  32. $lng = array(
  33. 'as' => 'actionscript', 'js' => 'javascript'、
  34. 'php' => 'css' => 'html'、
  35. 'htm' => > 'ini', 'json' => 'jsp' => 'sql' => ' => 'xml', 'yaml' => 'python',
  36. 'マークダウン', 'htaccess' => 'bat' = > 'batchfile', 'go' => 'golang',
  37. );
  38. //ユーザーがログインしているかどうかを判断する
  39. function is_logged() {
  40. $flag = false;
  41. if ( isset ($_SESSION['pwd' ]) &&定義('DEFAULT_PWD') ) {
  42. if ( $_SESSION['pwd'] === DEFAULT_PWD ) {
  43. $flag = true;
  44. }
  45. }
  46. return $flag;
  47. }
  48. //リロード このページに入ります
  49. function reload() {
  50. $file = pathinfo(__FILE__, PATHINFO_BASENAME);
  51. die(header("Location: {$file}"));
  52. }
  53. //リクエストは Ajax リクエストです
  54. function is_ajax() {
  55. $flag = false;
  56. if ( isset($_SERVER['HTTP_X_REQUESTED_WITH']) ) {
  57. $flag = strto lower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
  58. }
  59. return $flag;
  60. }
  61. //SESSION と COOKIE を破棄
  62. function exterminate() {
  63. $_SESSION = array();
  64. foreach ( $_COOKIE as $key ) {
  65. setcookie($key) , null);
  66. }
  67. session_destroy();
  68. $_COOKIE = array();
  69. return true;
  70. }
  71. //ディレクトリ内のファイルのリストを取得します
  72. function list_dir($path, $type = 'array' ) {
  73. $flag = false;
  74. $lst = array('dir'=>array(), 'file'=>array());
  75. $base = !is_dir($path) ? ) : $path;
  76. $tmp = scandir($base);
  77. foreach ( $tmp as $k=>$v ) {
  78. //上位ディレクトリ、このレベルのディレクトリ、およびプログラム自身のファイル名をフィルタリングします
  79. if ( !in_array($v, array(' .', '..')) ) {
  80. $file = $full_path = rtrim($base, '/').DIRECTORY_SEPARATOR.$v;
  81. if ( $full_path == __FILE__ ) {
  82. continue; // シールド自体 ファイルはリストに表示されません
  83. }
  84. $file = str_replace(dirname(__FILE__), '', $file);
  85. $file = str_replace("\", '/ ', $file); //win の下のパスをフィルタリングします
  86. $file = str_replace('//', '/', $file); //二重スラッシュをフィルタリングします
  87. if ( is_dir($full_path) ) {
  88. if ( 'html' === $type ) {
  89. $v = '
  90. '。 $v.' }
  91. array_push($lst['dir'], $v);
  92. } else {
  93. if ( 'html' === $type ) {
  94. $v = '
  95. '.$v.'< /li>';
  96. }
  97. array_push($lst[ 'file'], $v);
  98. }
  99. }
  100. }
  101. $lst = array_merge($lst['dir'], $lst['file']) ;
  102. $lst = array_filter($lst);
  103. $ flag = $lst;
  104. if ( 'html' === $type ) {
  105. $flag = '
      implode('', $lst) .'
    ';
  106. }
  107. return $flag;
  108. }
  109. //空ではないディレクトリを再帰的に削除します
  110. function deldir($dir) {
  111. $dh = opendir($dir);
  112. while ( $file = readdir($dh) ) {
  113. if ( $file != ' . ' && $file != '..' ) {
  114. $fullpath = $dir.'/'.$file;
  115. if ( !is_dir($fullpath) ) {
  116. unlink($fullpath);
  117. } else {
  118. deldir ($fullpath);
  119. }
  120. }
  121. }
  122. return rmdir($dir);
  123. }
  124. //ログアウト
  125. if ( isset($_GET['logout']) ) {
  126. if ( exterminate() ) {
  127. reload();
  128. }
  129. }
  130. //ajax 出力ファイルの内容
  131. if ( is_logged() && is_ajax() && isset($_POST['file']) ) {
  132. $file = dirname(__FILE__). $ _POST['file'];
  133. $ext = pathinfo($file, PATHINFO_EXTENSION);
  134. $mode = isset($lng[$ext]) $lng[$ext] : false;
  135. die(json_encode(array(
  136. 'file' => $file, 'html' => file_get_contents($file),
  137. 'mode' => $mode,
  138. ));
  139. }
  140. //ajax 出力ディレクトリ リスト
  141. if ( is_logged () && is_ajax() && isset($_POST['dir']) ) {
  142. $dir = dirname(__FILE__).$_POST['dir'];
  143. $list_dir = list_dir($dir, 'html') ;
  144. die(json_encode(array(
  145. 'dir' => $dir, 'html' => $list_dir,
  146. )));
  147. }
  148. //ajax 保存ファイル
  149. if ( is_logged() && is_ajax( ) && isset($_POST['action']) ) {
  150. $arr = array('result'=>'error', 'msg'=>'ファイルの保存に失敗しました! ');
  151. $content = $_POST['content'];
  152. if ( 'save_file' === $_POST['action'] ) {
  153. if ( isset($_POST['file_path']) ) {
  154. $ file = dirname(__FILE__).$_POST['file_path'];
  155. } else {
  156. $file = __FILE__;
  157. }
  158. file_put_contents($file, $content);
  159. $arr['result'] = 'success';
  160. $arr['msg'] = '正常に保存されました! ';
  161. }
  162. die(json_encode($arr));
  163. }
  164. //ajax 削除ファイルまたはフォルダー
  165. if ( is_logged() && is_ajax() && isset($_POST['del']) ) {
  166. $ path = dirname(__FILE__).$_POST['del'];
  167. $arr = array('result'=>'error', 'msg'=>'削除操作に失敗しました!');
  168. if ( $ _POST ['del'] && $path ) {
  169. $flag = is_dir($path) ? deldir($path) : unlink($path);
  170. if ( $flag ) {
  171. $arr['msg'] = '削除操作は成功しました! ';
  172. $arr['result'] = 'success';
  173. }
  174. }
  175. die(json_encode($arr));
  176. }
  177. //ajax は新しいファイルまたはフォルダーを作成します
  178. if ( is_logged() && is_ajax ( ) && isset($_POST['create']) ) {
  179. $flag = false;
  180. $arr = array('result'=>'error', 'msg'=>'操作が失敗しました!');
  181. if ( isset($_POST['target']) ) {
  182. $target = dirname(__FILE__).$_POST['target'];
  183. $target = is_dir($target) $target : dirname($target) ? ;
  184. }
  185. if ( $_POST['create'] && $target ) {
  186. $base_name = pathinfo($_POST['create'], PATHINFO_BASENAME);
  187. $exp =explode('.', $base_name);
  188. $ full_path = $target.'/'.$base_name;
  189. $new_path = str_replace(dirname(__FILE__), '', $full_path);
  190. if ( count($exp) > 1 && isset($lng[array_pop( $ exp)]) ) {
  191. file_put_contents($full_path, '');
  192. $arr['result'] = '成功';
  193. $arr['msg'] = '新しいファイルが正常に作成されました! ';
  194. $arr['type'] = 'file';
  195. } else {
  196. mkdir($full_path, 0777, true);
  197. $arr['result'] = 'success';
  198. $arr['msg' ] = '新しいディレクトリが正常に作成されました! ';
  199. $arr['type'] = 'dir';
  200. }
  201. if ( $base_name && $new_path ) {
  202. $arr['new_name'] = $base_name;
  203. $arr['new_path'] = $new_path ;
  204. }
  205. }
  206. die(json_encode($arr));
  207. }
  208. //ajax ファイルまたはフォルダーの名前を変更します
  209. if ( is_logged() && is_ajax() && isset($_POST['rename']) ) {
  210. $arr = array('result'=>'error', 'msg'=>'名前の変更操作が失敗しました!');
  211. if ( isset($_POST['target']) ) {
  212. $target = dirname( __FILE__).$_POST['target'];
  213. }
  214. if ( $_POST['rename'] ) {
  215. $base_name = pathinfo($_POST['rename'], PATHINFO_BASENAME);
  216. if ( $base_name ) {
  217. $rename = dirname($target).'/'.$base_name;
  218. $new_path = str_replace(dirname(__FILE__), '', $rename);
  219. }
  220. }
  221. if ( $rename && $target && rename($ target, $rename) ) {
  222. $arr['new_name'] = $base_name;
  223. $arr['new_path'] = $new_path;
  224. $arr['msg'] = '名前変更操作が成功しました!';
  225. $arr['result'] = '成功';
  226. }
  227. if ( $target == __FILE__ ) {
  228. $arr['redirect'] = $new_path;
  229. }
  230. die(json_encode($arr)) ;
  231. }
  232. //获取代码文件内容
  233. $code = file_get_contents($curr_file);
  234. $tree = '
    • ROOT'.list_dir($curr_file, 'html').'
    ';
  235. //登陆和设置密码共用模版
  236. $first = <<
  237. 【标题】
  238. < ;meta http-equiv="X-UA-Practical" content="IE=edge,chrome=1">
  239. HTMLSTR;
  240. //判断かどうか第一次登录
  241. if ( false == = $pwd && empty($_POST) ) {
  242. die(str_replace(
  243. array('【标题】', '【アニメーション】'),
  244. array('第一次使用,请先设置密码!', '設定'),
  245. $first
  246. ));
  247. }
  248. //初回ログインパスワードを設定します
  249. if ( false === $pwd && !empty($_POST) ) {
  250. if ( isset ($ _POST['pwd']) && strlen($_POST['pwd']) ) {
  251. $pwd = $_SESSION['pwd'] = md5($_POST['pwd'].$ace);
  252. $ code = preg_replace('#$pwd = false;#', '$pwd = "'.$pwd.'";', $code, 1);
  253. file_put_contents($curr_file, $code);
  254. } else {
  255. reload( );
  256. }
  257. }
  258. //ユーザーログイン検証
  259. if ( false !== $pwd && !empty($_POST) ) {
  260. $tmp = md5($_POST['pwd'].$ace) ;
  261. if ( $tmp && $pwd && $tmp === $pwd ) {
  262. $_SESSION['pwd'] = $pwd;
  263. reload();
  264. }
  265. }
  266. //HTML エンティティを処理します
  267. $ code = htmlspecialchars($code);
  268. $dir_icon = str_replace(array("rn", "r", "n"), '',
  269. 'data:image/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAANCAYAAACgu+4kAAAGXRFWHRTb2Z0d2
  270. FyZQBBZG9iZSBJb WF nZVJlYWR5ccllPAAAAQVJREFUeNqkkk1uwjAQhd84bsNP1FXLCtu0H3XPSoX4Qrd9wR
  271. sCjQEcIY3DiiJUYiqRhp5Mra/92YSUVVgLSW49B7H +NApRh75XkHfFoCG+02tyflUeQTw2y9UYYP8cCStc9SM
  272. PeVA/Sy6Dw555q3au1z+EhBYk1cgO7OSNdaFNT0x5sCkYDha0WPiHZg VqPzLO+8seai6E2jed42bCL06tNyEH
  273. AX9kv3 jh3HqH7BctFWLMOmAbcg05mHK5+sQpd1HYijN47zcDUCShGEHtzxtwQS9WTcAQmJROrJDLXQB9s1Tu6
  274. MtRED4bwsHLnUzxEeKac3 +GeP6eo8yevhjC3F1qC4CDAAl3HwuyNAIdwAAAABJRU5ErkJg gg==');
  275. $file_icon = str_replace(array("rn", "r", "n" ), '', +ju g7Z
  276. C6X+/iUloSr6xioFHJkPee5mUJgBwT7gjpPB3XAgfiBjs5dOyLF/btl0pkEFngdbzPGNRFK/U+0hwJAAMjmcm
  277. DsOA4zge6Pseu67DpmlEqK5rLMvyRkDJor6uq2SGktu2Ffdp mpANqqoSASYnO/kthABJkoCOxCASkCBkWSYuQ
  278. qCeNE1fqHz3fMkXzjnJ2sRinL33QBNIzWJ5n h/L8npQohVTJwYTyfm/d6Oo2HGE8ffwseuZ1PEjhrOutmsRF
  279. 0iC8QmPibEtT4hftrhHI95J q JT/HC2JOt0to+zN6MVsZ /oZKqwmyCTA33DkbN1sws0i+Pega6v0kd42H9JB/8
  280. LJl5I6PNbgAEAa9MP7QWoNLoAAAAASUVORK5CYII= ');
  281. $loading = str_replace(array("rn", "r", "n") '',
  282. 'data:image/gif;base 64、R0lGODlhFAAUALMIAPh2AP+TMsZiALLlcAKNOAOp4ANVqAP +PFv///wAAAAAAAAA
  283. AAAAAAAAAAAAAAAACH/ C05FVFNDQVBFMI4waWeaaah+ CAS7VQWWITWYUUUJB4S2AXMWXG
  284. G9BL6YQTL0CAACH5BAUKAAGAAGAALAEAQASAAAAAAROEMKPX6A4W5UPENUMEQT2FILTMJYIVBVHNZ3Z1H4FMQI
  285. DODZ+CL7ND EN5CH8DGZHCLTCMBEOXKQLXKVIGAAIBBK9YLBYVLTH5K0J0IACH5BAUKAGAL AEAAQASABIAAAAAAA4W5upMDQP2FILTMJYIVBVHNZ3V1R4BNBIDO DZ+CL7NDEN5CH8DGZAMAMBEOXKQLXKVIG4
  286. Hibbk9ylby Vlth5k0J0IACH5Baukaagalaeaaaaaaaaaaaaaemkpjae4W5TPKQL2fefiltMJYVHNZ
  287. 3
  288. 3
  289. 3
  290. 3
  291. 3
  292. 3 R0A4NMWIDODODZ+CL7NDEN5CH8DGZH8ONQMBEOXKQLXKVIGIGIGIBBK9YLBYVLTHH5 K0J0IACH5BAUKAAGAAAAAAAAAAAAAROEMKPS6E4W5SPANUMGQB2FEFILTMJY IVBVHNZ3D1X4JMGIDODZ+CL7NDEN5CH8DGZGCBTMBEOX
  293. kqlxkviggeibbk9ylbyVLTH5K0J0IACH5Baukaagalaeaaaaaaaaaaa4W5VPODUMFQX filtmijyivbvhnz3V0Q4JNHIDODZ+CL7nden5CH8DGZBMJNIMBEOXKQLXKVIGYDIBBK9YLBYHVLTH5K0J0IAGAAGAAGAAAAAAAAAAAAAAAAAAAROEMKPZ6E4E4 W5TPCNUMAQD​​2FEFILTMJYIVBVHNZ3R1B4FNRIDODZ+Cl7NDEN5CH8DGZG ZHNYMBEOXKQLXKQCIGQCIGQCIGQCIBYVLTH5K0J0KKKAAQAQASABIAAA AROEMKPQ6A4W5SPIDUMHQ
  294. F2FEFILTMJYIVBVHNZ3D0W4BMAIDODZ+CL7NDEN5CH8DGZASGTUMKQLXKVIGIBK9ylby5k0j0
  295. iads = ');
  296. //// /エディタテンプレート
  297. $html = <<
  298. <メタcharset="UTF-8">
  299. ACE コード エディタ
  300. 保存
  301. 刷新
  302. 重置
  303. 退出
  • {$tree}
    {$code}
  • HTMLSTR;
  • //判断してくださいログインしました
  • if ( !is_logged() ) {
  • die(str_replace(
  • array('[タイトル]', '[アクション]'),
  • array('初めて設定したパスワードを入力してください!', 'ログイン'),
  • $first
  • ))
  • } else {
  • echo $html;
  • }
  • コードをコピー


    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。