> 백엔드 개발 > PHP 튜토리얼 > 온라인 코드 편집기 액디터의 단일 파일 버전

온라인 코드 편집기 액디터의 단일 파일 버전

WBOY
풀어 주다: 2016-07-25 08:47:33
원래의
2099명이 탐색했습니다.
* 단일 파일 온라인 코드 편집기 editor.php 버전: v1.21
* 웹사이트의 모든 텍스트 파일을 온라인으로 편집하는 것은 매우 편리하며 웹사이트를 유지 관리하고 온라인으로 코드를 작성하는 데 매우 유용합니다.
* 비밀번호 암호화 방법:
* md5 (자체 설정 비밀번호 $ace) //$ace는 CDN 미러 주소
*
* 사용법:
* 1. $pwd 변수 값이 false인지 확인 , 이 파일을 업로드하세요. PHP 공간으로 이동하여
* 2. 처음 방문하면 비밀번호를 설정하라는 메시지가 표시되며 비밀번호를 기억하세요
* 3. 로그인 후. 처음 설정한 비밀번호는 기본적으로 이 PHP 파일이 편집됩니다.
* 4. 이 파일은 편집기의 핵심 파일이므로 임의로 수정하지 마십시오
* 5. 저장하려면 편집된 파일은 Ctrl S 키 조합을 이용하여 실행 결과를 기다려주세요
* 6. 저장 작업이 실행된 후 반드시 저장이 성공할 때까지 기다려주세요
* 7. 재설정됩니다. 다른 사람이 경로를 추측하는 것을 방지하기 위해 이 프로그램의 파일 이름을 수정합니다
* 8. 새로 고침 기능은 이 프로그램 파일만 새로 고칠 수 있으며 다른 프로그램 파일은 새로 고칠 수 없습니다
*
* 이 편집기를 사용하는 것이 좋습니다 크롬 브라우저에서

프로젝트에 대한 자세한 내용은
를 참조하세요.http://git.oschina.net/ymk18/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 파일이 편집됩니다. > * 4. 이 파일은 에디터의 핵심 파일이므로 임의로 수정하지 마시기 바랍니다
  11. * 5. 편집된 파일을 저장하려면 Ctrl S 키 조합을 이용하여 실행 결과를 기다려주세요
  12. * 6. 저장 작업이 실행된 후 저장 성공 메시지가 반환될 때까지 기다리십시오
  13. * 7. 재설정 작업은 다른 사람이 경로를 추측하는 것을 방지하기 위해 이 프로그램의 파일 이름을 수정합니다
  14. * 8. 새로 고침 기능은 이 프로그램 파일만 새로 고칠 수 있으며 다른 프로그램 파일은 새로 고칠 수 없습니다.
  15. *
  16. * 이 편집기는 크롬 브라우저에서 사용하는 것을 권장합니다
  17. */
  18. session_start();
  19. $curr_file = __FILE__; // 기본적으로 현재 파일을 편집합니다.
  20. $curr_file_path = str_replace(dirname(__FILE__), '', __FILE__);
  21. $pwd = false; //비밀번호 초기화 기본값은 false입니다
  22. $ace = 'http://cdn. staticfile.org/ ace/1.1.3/ace.js'; //코어 js 편집
  23. $tip['core'] = 'http://cdn.staticfile.org/alertify.js/0.3.11/ Alertify.core .min.css';
  24. $tip['css'] = 'http://cdn.staticfile.org/alertify.js/0.3.11/alertify.default.min.css';
  25. $tip ['js'] = 'http://cdn.staticfile.org/alertify.js/0.3.11/alertify.min.js';
  26. $jquery = 'http://cdn.staticfile. org/jquery /2.1.1-rc2/jquery.min.js';
  27. if ( false !== $pwd ) {
  28. 정의('DEFAULT_PWD', $pwd);
  29. }
  30. //파일 확장자 이름에 해당하는 구문 분석기
  31. $lng = array(
  32. 'as' => 'actionscript', 'js' => 'javascript',
  33. 'php' => 'php', 'css' => 'html',
  34. 'htm' => 'ini', 'json' => 'json',
  35. 'jsp' => 'jsp', 'sql' => 'xml' = > 'xml', 'py' => 'python',
  36. 'md' => apache_conf',
  37. 'bat' => 'batchfile', 'go' => 'golang',
  38. );
  39. //사용자가 로그인했는지 확인
  40. 함수 is_logged() {
  41. $flag = false;
  42. if ( isset($_SESSION['pwd']) && 정의('DEFAULT_PWD') ) {
  43. if ( $_SESSION['pwd'] == = DEFAULT_PWD ) {
  44. $flag = true;
  45. }
  46. }
  47. return $flag;
  48. }
  49. //이 페이지로 새로고침
  50. function reload() {
  51. $ file = pathinfo(__FILE__, PATHINFO_BASENAME);
  52. die(header("Location: {$file}"));
  53. }
  54. //요청이 다음인지 확인합니다. ajax 요청
  55. 함수 is_ajax () {
  56. $flag = false;
  57. if ( isset($_SERVER['HTTP_X_REQUESTED_WITH']) ) {
  58. $flag = strtolower($_SERVER['HTTP_X_REQUESTED_WITH'] ) === 'xmlhttprequest' ;
  59. }
  60. return $flag;
  61. }
  62. //SESSION 및 COOKIE 삭제
  63. function exterminate() {
  64. $_SESSION = 배열 ();
  65. foreach ( $_COOKIE as $key ) {
  66. setcookie($key, null);
  67. }
  68. session_destroy();
  69. $_COOKIE = array();
  70. return true;
  71. }
  72. //디렉터리의 파일 목록 가져오기
  73. function list_dir($path, $type = 'array') {
  74. $flag = false;
  75. $lst = array('dir'=>array(), 'file'=>array());
  76. $base = !is_dir($path) ? dirname($path) : $path;
  77. $tmp = scandir($ base);
  78. foreach ( $tmp as $k=>$v ) {
  79. //상위 디렉터리, 이 수준 디렉터리 및 프로그램 자체 파일 이름을 필터링합니다
  80. if ( !in_array($v, 배열 ('.', '..')) ) {
  81. $file = $full_path = rtrim($base, '/').DIRECTORY_SEPARATOR.$v;
  82. if ( $full_path == __FILE__ ) {
  83. continue; //자신의 파일이 목록에 나타나지 않도록 보호
  84. }
  85. $file = str_replace(dirname(__FILE__), '', $file);
  86. $file = str_replace("\", '/ ', $file); //win에서 경로 필터링
  87. $file = str_replace('//', '/', $file); 슬래시
  88. if ( is_dir($full_path) ) {
  89. if ( 'html' === $type ) {
  90. $v = '
  91. '.$v.'
  92. ';
  93. }
  94. array_push($lst[ 'dir'], $v);
  95. } else {
  96. if ( 'html' === $type ) {
  97. $v = '
  98. '.$v.'
  99. ';
  100. }
  101. array_push($lst ['파일'], $v);
  102. }
  103. }
  104. }
  105. $lst = array_merge($lst['dir'], $lst['file']);
  106. $lst = array_filter($lst);
  107. $flag = $lst;
  108. if ( 'html' === $type ) {
  109. $flag = '
      '. , $lst) .'
    ';
  110. }
  111. $flag;
  112. } 반환
  113. //비어 있지 않은 디렉터리를 재귀적으로 삭제
  114. function deldir($dir) {
  115. $dh = opendir($dir);
  116. while ( $file = readdir($dh) ) {
  117. if ( $file != '.' && $file != '..' ) {
  118. $fullpath = $dir.'/'.$file;
  119. if ( !is_dir($ fullpath ) ) {
  120. unlink($fullpath);
  121. } else {
  122. deldir($fullpath);
  123. }
  124. }
  125. }
  126. return rmdir($dir);
  127. }
  128. //로그아웃
  129. if ( isset($_GET['logout']) ) {
  130. if ( exterminate() ) {
  131. reload();
  132. }
  133. }
  134. //ajax 출력 파일 내용
  135. if ( is_logged() && is_ajax() && isset($_POST['file']) ) {
  136. $file = dirname ( __FILE__).$_POST['file'];
  137. $ext = pathinfo($file, PATHINFO_EXTENSION);
  138. $mode = isset($lng[$ext]) ? $lng[$ext] : false ;
  139. die(json_encode(array(
  140. 'file' => $file, 'html' => file_get_contents($file),
  141. 'mode' => $mode,
  142. ) ) );
  143. }
  144. //ajax 출력 디렉터리 목록
  145. if ( is_logged() && is_ajax() && isset($_POST['dir']) ) {
  146. $dir = dirname (__FILE__).$_POST['dir'];
  147. $list_dir = list_dir($dir, 'html');
  148. die(json_encode(array(
  149. 'dir' => $dir, ' html' => $list_dir,
  150. )));
  151. }
  152. //ajax 저장 파일
  153. if ( is_logged() && is_ajax() && isset($_POST[' action ']) ) {
  154. $arr = array('result'=>'error', 'msg'=>'파일 저장에 실패했습니다! ');
  155. $content = $_POST['content'];
  156. if ( 'save_file' === $_POST['action'] ) {
  157. if ( isset($_POST['file_path') ]) ) {
  158. $file = dirname(__FILE__).$_POST['file_path'];
  159. } else {
  160. $file = __FILE__;
  161. }
  162. file_put_contents($file, $ content);
  163. $arr['result'] = '성공';
  164. $arr['msg'] = '성공적으로 저장되었습니다! ';
  165. }
  166. die(json_encode($arr));
  167. }
  168. //ajax 파일 또는 폴더 삭제
  169. if ( is_logged() && is_ajax() && isset ( $_POST['del']) ) {
  170. $path = dirname(__FILE__).$_POST['del'];
  171. $arr = array('result'=>'error', 'msg ' =>'삭제 작업 실패!');
  172. if ( $_POST['del'] && $path ) {
  173. $flag = is_dir($path) ? deldir($path) );
  174. if ( $flag ) {
  175. $arr['msg'] = '삭제 작업이 성공했습니다! ';
  176. $arr['result'] = '성공';
  177. }
  178. }
  179. die(json_encode($arr));
  180. }
  181. //ajax 새 파일 또는 폴더 만들기
  182. if ( is_logged() && is_ajax() && isset($_POST['create']) ) {
  183. $flag = false;
  184. $arr = array('result' = >'error', 'msg'=>'작업 실패! ');
  185. if ( isset($_POST['target']) ) {
  186. $target = dirname(__FILE__).$_POST [ 'target'];
  187. $target = is_dir($target) ? $target : dirname($target);
  188. }
  189. if ( $_POST['create'] && $target ) {
  190. $base_name = pathinfo($_POST['create'], PATHINFO_BASENAME);
  191. $exp =explore('.', $base_name);
  192. $full_path = $target.'/'.$base_name;
  193. $new_path = str_replace(dirname(__FILE__), '', $full_path);
  194. if ( count($exp) > 1 && isset($lng[array_pop($exp)]) ) {
  195. file_put_contents ($full_path, '');
  196. $arr['result'] = '성공';
  197. $arr['msg'] = '새 파일이 성공적으로 생성되었습니다! ';
  198. $arr['type'] = 'file';
  199. } else {
  200. mkdir($full_path, 0777, true);
  201. $arr['result'] = '성공' ;
  202. $arr['msg'] = '새 디렉토리를 성공적으로 생성했습니다! ';
  203. $arr['type'] = 'dir';
  204. }
  205. if ( $base_name && $new_path ) {
  206. $arr['new_name'] = $base_name;
  207. $arr['new_path'] = $new_path;
  208. }
  209. }
  210. die(json_encode($arr));
  211. }
  212. //ajax 파일 또는 폴더 이름 바꾸기
  213. if ( is_logged() && is_ajax() && isset($_POST['rename']) ) {
  214. $arr = array('result'=>'error', 'msg'=>' 이름 바꾸기 작업 실패! ');
  215. if ( isset($_POST['target']) ) {
  216. $target = dirname(__FILE__).$_POST['target'];
  217. }
  218. if ( $_POST['rename'] ) {
  219. $base_name = pathinfo($_POST['rename'], PATHINFO_BASENAME);
  220. if ( $base_name ) {
  221. $rename = dirname($target ).' /'.$base_name;
  222. $new_path = str_replace(dirname(__FILE__), '', $rename);
  223. }
  224. }
  225. if ( $rename && $target && rename( $target, $rename) ) {
  226. $arr['new_name'] = $base_name;
  227. $arr['new_path'] = $new_path;
  228. $arr['msg'] = '이름 바꾸기 작업이 성공했습니다!';
  229. $arr['result'] = '성공';
  230. }
  231. if ( $target == __FILE__ ) {
  232. $arr['redirect'] = $new_path;
  233. }
  234. die(json_encode($arr));
  235. }
  236. //获取代码文件内容
  237. $code = file_get_contents($curr_file);
  238. $tree = '< ul id="dir_tree">
  239. ROOT'.list_dir($curr_file, 'html').'
  240. ';
  241. //登陆和设置密码共用模版
  242. $first = <<
  243. 【标题】
  244. < link rel="stylesheet" href="{$tip['css']}" />
  245. < script src="{$jquery}" type="text/javascript" charset="utf-8">
  246. HTMLSTR;
  247. //判断是否第一次登录
  248. if ( false === $pwd &&empty($_POST) ) {
  249. die(str_replace(
  250. array('【标题】', '【动작】'),
  251. array('第一次使용 ,先设置密码!', 'Settings'),
  252. $first
  253. ));
  254. }
  255. //처음 로그인 비밀번호 설정
  256. if ( false === $pwd && !empty ($_POST) ) {
  257. if ( isset($_POST['pwd']) && strlen($_POST['pwd']) ) {
  258. $pwd = $_SESSION['pwd'] = md5( $_POST['pwd'].$ace);
  259. $code = preg_replace('#$pwd = false;#', '$pwd = "'.$pwd.'";', $code, 1) ;
  260. file_put_contents($curr_file, $code);
  261. } else {
  262. reload();
  263. }
  264. }
  265. //사용자 로그인 확인
  266. if ( false !== $pwd && !empty($_POST) ) {
  267. $tmp = md5($_POST['pwd'].$ace);
  268. if ( $tmp && $pwd && $tmp == = $pwd ) {
  269. $_SESSION['pwd'] = $pwd;
  270. reload();
  271. }
  272. }
  273. //html 엔터티 처리
  274. $ 코드 = htmlspecialchars($code);
  275. $dir_icon = str_replace(array("rn", "r", "n"), '',
  276. 'data:image/jpg;base64 ,iVBORw0KGgoAAAANSUhEUgAAABAAAAANCAYAAACgu 4KAAAAGXRFWHRTB2Z0D2
  277. Fyzqbbzg9izsbjbwfnzvjlywr5cllpaaaaaaaaa Uyiqrhp5mra/92ysuvvglsw49b7h Naprh75xkhffocg 02Tyflueq tw2yyP8ccstc9sm
  278. PEVA/SY6DW55Q3au1z EHBYK1CGO7SCKYDHA0WPI Hzgvqpzlo 8Seai6e2jed42BCL06TNYEH
  279. AX9KV3JH3HQH7BCTFWLMOMOMABCG05MHK5 SQPD1HYIJN47ZCDUCSHTZXTCA QMJDLXQB9S1TU6
  280. M TRED4BWSHLNUZEEKAC3 Gep6eo8yevhjc3F1QC4CDaal3hwuynaaaaaaaaaaaaokjgg == ') rn", "r", "n"), ' ',
  281. '데이터:image/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2
  282. FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAS1JREFUeNqMU01Kxk AMTaez7aYbNwreQdBzeopS 6EXEW jug7Z
  283. C6X /iUloSr6xioFHJkPee5mUJgBwT7gjpPB3XAgfiBjs5dOyLF/btl0pkEFngdbzPGNRFK/U 0hwJAAMjmcm
  284. DsOA4zge6Pseu67DpmlE qK5rLMvyRkDJor6uq2SGktu2 FfdpmpANqqoSASYnO/kthABJkoCOxCASkCBkWSYuQ
  285. qCeNE1fqHz3fMkXzjnJ2sRinL33QBNIzWJ5nh/L8npQohVTJwYTyfFm/d6Oo2HGE8ffwseuZ1PEjhrOutmsRF
  286. 0iC8QmPibEtT4hftrhHI95JqJT/HC2JOt0to zN6MVsZ/oZK qwmyCTA33DkbN1sws0i Pega6v0kd42H9JB/8
  287. LJl5I6PNbgAEAa9MP7QWoNLoAAAAASUVORK5CYII=');
  288. $ loading = str_replace(array("rn", "r", "n"), '',
  289. 'data:image/gif;base64,R0lGODlhFAAUALMIAPh2AP TMsZiALLlcAKNOAOp4ANVqAP PFv///wAAAAAAAAA
  290. AAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh QQFCgAIACwAAAAFAAUAAAEUxDJSau9iBDMteb
  291. T MEjehgTBJYqkiaLWOlZvGs8WDO6UIPCHw8TnAwWDEuKPcxQml0Ynj2cwYACAS7VqwWItWyuiU JB4s2AxmWxG
  292. g9bl6YQtl0cAACH5BAUKAAgALAEAAQASABIAAAROEMkpx6A4W5upENUmEQT2fe ltMJYiv bvhnZ3Z1h4FMQI
  293. Dodz cL7nDEn5CH8DGZhcLtcMBEoxkqlXKVIgAAibbK9YLBYvLtHH5K0J0IACH5BAUKAAgALAEAAQASABIAAA
  294. ROEMkphaA4W5upMdUmDQP2feFIltMJYivbvhnZ3V1R4BNBI cl7nDEn5CH8DGZAMAtEMBEoxkqlXKVIg4
  295. HibbK9YLBYvLtHH5K0J0IACH5BAUKAAgALAEAAQASABIAAAROEMkpjaE4W5tpKdUmCQL2feFIltMJYivbvhnZ
  296. 3R0A4NMwIDodz cL7nDEn5CH8DGZh8ONQMBE oxkq1 대 gALAEAAQASABIAAAROEMkpz6E4W5tpCNUMAQD2feFIltMJYivbvhnZ3R1B4FNRIDodz cL7nDEn5CH8DGZg
  297. 8HNYMBEoxkqlXKVIgQCibbK9Y LBYvLtHH5K0J0IACH5BAkKAAgALAEAAQASABIAAAROEMkpQ6A4W5spI dUmHQ
  298. f2feFIltMJYivbvhnZ3d0w4BMAIDodz cL7nDEn5CH8DGZAsGtUMBEoxkqlXKVIgwGibbK9YLBYvLtHH5K0J0
  299. IA Ds=');
  300. //편집기 템플릿
  301. $html = <<
  302. ACE 코드 편집기
  303. 保存
  304. 刷新
  305. 重置
  306. 退出
  • {$tree}
    {$code}
  • HTMLSTR;
  • //로그인 여부 확인
  • if ( !is_logged() ) {
  • die(str_replace(
  • array('[제목]', '[액션]'),
  • array('처음 설정한 비밀번호를 입력하세요!', '로그인'),
  • $first
  • ))
  • } else {
  • echo $html;
  • }
  • 코드 복사


    원천:php.cn
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿