찾다
php教程PHP源码php代码在线编辑器

php代码在线编辑器

May 26, 2016 am 08:19 AM

1. [代码][PHP]代码  

<?php
/**
 * 单文件版在线代码编辑器 editor.php 版本: v1.21
 * 
 * 密码加密方式: 
 * md5(自设密码+$ace) //$ace为cdn镜像地址
 * 
 * 使用方法: 
 * 1.确认 $pwd 变量值为 false, 上传本文件到PHP空间并访问
 * 2.第一次访问提示设置密码,设置密码并牢记
 * 3.使用第一次设置的密码登录后,默认编辑的是本php文件,
 * 4.本文件是编辑器核心文件,请不要随意修改
 * 5.保存编辑的文件请用 Ctrl + S 按键组合,等待执行结果
 * 6.保存动作执行后请务必等待保存成功信息返回
 * 7.重置操作会修改本程序的文件名,以防他人猜测路径
 * 8.刷新功能仅是刷新本程序文件,不能刷新其他
 * 
 * 建议在 chrome 浏览器中使用本编辑器
 * 
 * 
 * 
 */
 
session_start();

$curr_file = __FILE__; //默认编辑当前文件
$curr_file_path = str_replace(dirname(__FILE__), &#39;&#39;, __FILE__);
$pwd = "57574d98bc6ebe77b07e59d87065cd9e"; //密码初始化默认值为 false
$ace = &#39;ace.js&#39;; //编辑器核心js
$tip[&#39;core&#39;] = &#39;alertify.core.min.css&#39;;
$tip[&#39;css&#39;] = &#39;alertify.default.min.css&#39;;
$tip[&#39;js&#39;] = &#39;alertify.min.js&#39;;
$jquery = &#39;jquery.min.js&#39;;

if ( false !== $pwd ) {
	define(&#39;DEFAULT_PWD&#39;, $pwd);
}

//文件后缀名对应的语法解析器
$lng = array(
	&#39;as&#39; => &#39;actionscript&#39;, &#39;js&#39; => &#39;javascript&#39;,
	&#39;php&#39; => &#39;php&#39;, &#39;css&#39; => &#39;css&#39;, &#39;html&#39; => &#39;html&#39;,
	&#39;htm&#39; => &#39;html&#39;, &#39;ini&#39; => &#39;ini&#39;, &#39;json&#39; => &#39;json&#39;,
	&#39;jsp&#39; => &#39;jsp&#39;, &#39;txt&#39; => &#39;text&#39;, &#39;sql&#39; => &#39;mysql&#39;,
	&#39;xml&#39; => &#39;xml&#39;, &#39;yaml&#39; => &#39;yaml&#39;, &#39;py&#39; => &#39;python&#39;,
	&#39;md&#39; => &#39;markdown&#39;, &#39;htaccess&#39; => &#39;apache_conf&#39;,
	&#39;bat&#39; => &#39;batchfile&#39;, &#39;go&#39; => &#39;golang&#39;,
);

//判断用户是否登录
function is_logged() {
    $flag = false;
    if ( isset($_SESSION[&#39;pwd&#39;]) && defined(&#39;DEFAULT_PWD&#39;) ) {
        if ( $_SESSION[&#39;pwd&#39;] === DEFAULT_PWD ) {
            $flag = true;
        }
    }
    return $flag;
}

//重新载入到本页面
function reload() {
    $file = pathinfo(__FILE__, PATHINFO_BASENAME);
    die(header("Location: {$file}"));
}

//判断请求是否是ajax请求
function is_ajax() {
	$flag = false;
	if ( isset($_SERVER[&#39;HTTP_X_REQUESTED_WITH&#39;]) ) {
		$flag = strtolower($_SERVER[&#39;HTTP_X_REQUESTED_WITH&#39;]) === &#39;xmlhttprequest&#39;;
	}
    return $flag;
}

//销毁SESSION和COOKIE
function exterminate() {
	$_SESSION = array();
	foreach ( $_COOKIE as $key ) {
		setcookie($key, null);
	}
	session_destroy();
	$_COOKIE = array();
    return true;
}

//获取一个目录下的文件列表
function list_dir($path, $type = &#39;array&#39;) {
	$flag = false;
	$lst = array(&#39;dir&#39;=>array(), &#39;file&#39;=>array());
	$base = !is_dir($path) ? dirname($path) : $path;
	$tmp = scandir($base);
	foreach ( $tmp as $k=>$v ) {
		//过滤掉上级目录,本级目录和程序自身文件名
		if ( !in_array($v, array(&#39;.&#39;, &#39;..&#39;)) ) {
			$file = $full_path = rtrim($base, &#39;/&#39;).DIRECTORY_SEPARATOR.$v;
			if ( $full_path == __FILE__ ) {
				continue; //屏蔽自身文件不在列表出现
			}
			$file = str_replace(dirname(__FILE__), &#39;&#39;, $file);
			$file = str_replace("\\", &#39;/&#39;, $file); //过滤win下的路径
			$file = str_replace(&#39;//&#39;, &#39;/&#39;, $file); //过滤双斜杠
			if ( is_dir($full_path) ) {
				if ( &#39;html&#39; === $type ) {
					$v = &#39;<li class="dir" path="&#39;.$file
					.&#39;" onclick="load();"><span>&#39;.$v.&#39;</span></li>&#39;;
				}
				array_push($lst[&#39;dir&#39;], $v);
			} else {
				if ( &#39;html&#39; === $type ) {
					$v = &#39;<li class="file" path="&#39;.$file
					.&#39;" onclick="load()"><span>&#39;.$v.&#39;</span></li>&#39;;
				}
				array_push($lst[&#39;file&#39;], $v);
			}
		}
	}
	$lst = array_merge($lst[&#39;dir&#39;], $lst[&#39;file&#39;]);
	$lst = array_filter($lst);
	$flag = $lst;
	if ( &#39;html&#39; === $type ) {
		$flag = &#39;<ul>&#39;. implode(&#39;&#39;, $lst) .&#39;</ul>&#39;;
	}
	return $flag;
}

//递归删除一个非空目录
function deldir($dir) {
    $dh = opendir($dir);
    while ( $file = readdir($dh) ) {
        if ( $file != &#39;.&#39; && $file != &#39;..&#39; ) {
            $fullpath = $dir.&#39;/&#39;.$file;
            if ( !is_dir($fullpath) ) {
                unlink($fullpath);
            } else {
                deldir($fullpath);
            }
        }
    }
    return rmdir($dir);
}

//退出登录
if ( isset($_GET[&#39;logout&#39;]) ) {
	if ( exterminate() ) {
		reload();
	}
}

//ajax输出文件内容
if ( is_logged() && is_ajax() && isset($_POST[&#39;file&#39;]) ) {
	$file = dirname(__FILE__).$_POST[&#39;file&#39;];
	$ext = pathinfo($file, PATHINFO_EXTENSION);
	$mode = isset($lng[$ext]) ? $lng[$ext] : false;
	die(json_encode(array(
		&#39;file&#39; => $file, &#39;html&#39; => file_get_contents($file),
		&#39;mode&#39; => $mode,		
	)));
}

//ajax输出目录列表
if ( is_logged() && is_ajax() && isset($_POST[&#39;dir&#39;]) ) {
	$dir = dirname(__FILE__).$_POST[&#39;dir&#39;];
	$list_dir = list_dir($dir, &#39;html&#39;);
	die(json_encode(array(
		&#39;dir&#39; => $dir, &#39;html&#39; => $list_dir,
	)));
}

//ajax保存文件
if ( is_logged() && is_ajax() && isset($_POST[&#39;action&#39;]) ) {
	$arr = array(&#39;result&#39;=>&#39;error&#39;, &#39;msg&#39;=>&#39;文件保存失败!&#39;);
	$content = $_POST[&#39;content&#39;];
	if ( &#39;save_file&#39; === $_POST[&#39;action&#39;] ) {
		if ( isset($_POST[&#39;file_path&#39;]) ) {
			$file = dirname(__FILE__).$_POST[&#39;file_path&#39;];
		} else {
			$file = __FILE__;
		}
		file_put_contents($file, $content);
		$arr[&#39;result&#39;] = &#39;success&#39;;
		$arr[&#39;msg&#39;] = &#39;保存成功!&#39;;
	}
	die(json_encode($arr));
}

//ajax删除文件或文件夹
if ( is_logged() && is_ajax() && isset($_POST[&#39;del&#39;]) ) {
	$path = dirname(__FILE__).$_POST[&#39;del&#39;];
	$arr = array(&#39;result&#39;=>&#39;error&#39;, &#39;msg&#39;=>&#39;删除操作失败!&#39;);
	if ( $_POST[&#39;del&#39;] && $path ) {
        $flag = is_dir($path) ? deldir($path) : unlink($path);
    	if ( $flag ) {
    	   $arr[&#39;msg&#39;] = &#39;删除操作成功!&#39;;
    	   $arr[&#39;result&#39;] = &#39;success&#39;;
    	}
	}
	die(json_encode($arr));
}

//ajax新建文件或文件夹
if ( is_logged() && is_ajax() && isset($_POST[&#39;create&#39;]) ) {
	$flag = false;
	$arr = array(&#39;result&#39;=>&#39;error&#39;, &#39;msg&#39;=>&#39;操作失败!&#39;);
	if ( isset($_POST[&#39;target&#39;]) ) {
	    $target = dirname(__FILE__).$_POST[&#39;target&#39;];
	    $target = is_dir($target) ? $target : dirname($target);
	}
	if ( $_POST[&#39;create&#39;] && $target ) {
        $base_name = pathinfo($_POST[&#39;create&#39;], PATHINFO_BASENAME);
        $exp = explode(&#39;.&#39;, $base_name);
        $full_path = $target.&#39;/&#39;.$base_name;
        $new_path = str_replace(dirname(__FILE__), &#39;&#39;, $full_path);
        if ( count($exp) > 1 && isset($lng[array_pop($exp)]) ) {
            file_put_contents($full_path, &#39;&#39;);
            $arr[&#39;result&#39;] = &#39;success&#39;;
            $arr[&#39;msg&#39;] = &#39;新建文件成功!&#39;;
            $arr[&#39;type&#39;] = &#39;file&#39;;
        } else {
            mkdir($full_path, 0777, true);
            $arr[&#39;result&#39;] = &#39;success&#39;;
            $arr[&#39;msg&#39;] = &#39;新建目录成功!&#39;;
            $arr[&#39;type&#39;] = &#39;dir&#39;;
        }
        if ( $base_name && $new_path ) {
            $arr[&#39;new_name&#39;] = $base_name;
            $arr[&#39;new_path&#39;] = $new_path;
        }
	}
	die(json_encode($arr));
}

//ajax重命名文件或文件夹
if ( is_logged() && is_ajax() && isset($_POST[&#39;rename&#39;]) ) {
	$arr = array(&#39;result&#39;=>&#39;error&#39;, &#39;msg&#39;=>&#39;重命名操作失败!&#39;);
	if ( isset($_POST[&#39;target&#39;]) ) {
	    $target = dirname(__FILE__).$_POST[&#39;target&#39;];
	}
	if ( $_POST[&#39;rename&#39;] ) {
	    $base_name = pathinfo($_POST[&#39;rename&#39;], PATHINFO_BASENAME);
	    if ( $base_name ) {
	        $rename = dirname($target).&#39;/&#39;.$base_name;
	        $new_path = str_replace(dirname(__FILE__), &#39;&#39;, $rename);
	    }
	}
	if ( $rename && $target && rename($target, $rename) ) {
	   $arr[&#39;new_name&#39;] = $base_name;
	   $arr[&#39;new_path&#39;] = $new_path;
	   $arr[&#39;msg&#39;] = &#39;重命名操作成功!&#39;;
	   $arr[&#39;result&#39;] = &#39;success&#39;;
	}
	if ( $target == __FILE__ ) {
	    $arr[&#39;redirect&#39;] = $new_path;
	}
	die(json_encode($arr));
}

//获取代码文件内容
$code = file_get_contents($curr_file);
$tree = &#39;<ul id="dir_tree">
	<li class="dir" path="/" onclick="load()">ROOT&#39;.list_dir($curr_file, &#39;html&#39;).&#39;</li>
</ul>&#39;;

//登陆和设置密码共用模版
$first = <<<HTMLSTR
<!DOCTYPE html>
<html><head><meta charset="UTF-8">
<title>【标题】</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<style type="text/css" media="screen">
body {
	overflow: hidden; background-color: #2D2D2D; color: #CCCCCC; font-size: 12px; margin: 0;
	font-family: &#39;Monaco&#39;, &#39;Menlo&#39;, &#39;Ubuntu Mono&#39;, &#39;Consolas&#39;, &#39;source-code-pro&#39;, monospace;
}
form { display: none; position: absolute; }
form h5 { font-size: 14px; font-weight: normal; margin: 0; line-height: 2em; }
form input {
    color: #fff; border: 1px solid #369; border-radius: 3px; background: #333; height: 22px;
    line-height: 1.6em; width: 125px; margin-right: 5px; vertical-align: middle;
}
form button {
    line-height: 1.6em; border: 1px solid #369; border-radius: 3px;
    background: #369; color: #fff; vertical-align: middle;
}
</style>
<link rel="stylesheet" href="{$tip[&#39;core&#39;]}" />
<link rel="stylesheet" href="{$tip[&#39;css&#39;]}" />
</head>
<body>
	<form method="post">
		<input name="pwd" type="password" /><button type="submit">【动作】</button>
	</form>
	<script src="{$jquery}" type="text/javascript" charset="utf-8"></script>
	<script src="{$ace}" type="text/javascript" charset="utf-8"></script>
	<script src="{$tip[&#39;js&#39;]}" type="text/javascript"></script>
	<script type="text/javascript">
	var editor = false;
	$(function(){
		$(&#39;form&#39;).prepend(&#39;<h5>&#39;+ document.title +&#39;</h5>&#39;);
		$(&#39;form&#39;).css({
			left: ($(window).width()-$(&#39;form&#39;).width())/2,
			top: ($(window).height()-$(&#39;form&#39;).height())/2
		});
		$(&#39;form&#39;).show();
	});
	</script>
</body></html>
HTMLSTR;

//判断是否第一次登录
if ( false === $pwd && empty($_POST) ) {
	die(str_replace(
		array(&#39;【标题】&#39;, &#39;【动作】&#39;),
		array(&#39;第一次使用,请先设置密码!&#39;, &#39;设置&#39;),
		$first
	));
}

//第一次设置登录密码
if ( false === $pwd && !empty($_POST) ) {
	if ( isset($_POST[&#39;pwd&#39;]) && strlen($_POST[&#39;pwd&#39;]) ) {
		$pwd = $_SESSION[&#39;pwd&#39;] = md5($_POST[&#39;pwd&#39;].$ace);
		$code = preg_replace(&#39;#\$pwd = false;#&#39;, &#39;$pwd = "&#39;.$pwd.&#39;";&#39;, $code, 1);
		file_put_contents($curr_file, $code);
	} else {
		reload();
	}
}

//用户登录验证
if ( false !== $pwd && !empty($_POST) ) {
	$tmp = md5($_POST[&#39;pwd&#39;].$ace);
	if ( $tmp && $pwd && $tmp === $pwd ) {
		$_SESSION[&#39;pwd&#39;] = $pwd;
		reload();
	}
}

//处理一下html实体
$code = htmlspecialchars($code);

$dir_icon = str_replace(array("\r\n", "\r", "\n"), &#39;&#39;,
&#39;data:image/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAANCAYAAACgu+4kAAAAGXRFWHRTb2Z0d2
FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQVJREFUeNqkkk1uwjAQhd84bsNP1FUXLCtu0H3XPSoX4Qrd9wR
sCjQEcIY3DiiJUYiqRhp5Mra/92YSUVVgLSW49B7H+NApRh75XkHfFoCG+02tyflUeQTw2y9UYYP8cCStc9SM
PeVA/Sy6Dw555q3au1z+EhBYk1cgO7OSNdaFNT0x5sCkYDha0WPiHZgVqPzLO+8seai6E2jed42bCL06tNyEH
AX9kv3jh3HqH7BctFWLMOmAbcg05mHK5+sQpd1HYijN47zcDUCShGEHtzxtwQS9WTcAQmJROrJDLXQB9s1Tu6
MtRED4bwsHLnUzxEeKac3+GeP6eo8yevhjC3F1qC4CDAAl3HwuyNAIdwAAAABJRU5ErkJggg==&#39;);

$file_icon = str_replace(array("\r\n", "\r", "\n"), &#39;&#39;,
&#39;data:image/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2
FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAS1JREFUeNqMU01KxkAMTaez7aYbNwreQdBzeopS6EXEW+jug7Z
C6X+/iUloSr6xioFHJkPee5mUJgBwT7gjpPB3XAgfiBjs5dOyLF/btl0pkEFngdbzPGNRFK/U+0hwJAAMjmcm
DsOA4zge6Pseu67DpmlEqK5rLMvyRkDJor6uq2SGktu2FfdpmpANqqoSASYnO/kthABJkoCOxCASkCBkWSYuQ
qCeNE1fqHz3fMkXzjnJ2sRinL33QBNIzWJ5nh/L8npQohVTJwYTyfFm/d6Oo2HGE8ffwseuZ1PEjhrOutmsRF
0iC8QmPibEtT4hftrhHI95JqJT/HC2JOt0to+zN6MVsZ/oZKqwmyCTA33DkbN1sws0i+Pega6v0kd42H9JB/8
LJl5I6PNbgAEAa9MP7QWoNLoAAAAASUVORK5CYII=&#39;);

$loading = str_replace(array("\r\n", "\r", "\n"), &#39;&#39;,
&#39;data:image/gif;base64,R0lGODlhFAAUALMIAPh2AP+TMsZiALlcAKNOAOp4ANVqAP+PFv///wAAAAAAAA
AAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAIACwAAAAAFAAUAAAEUxDJSau9iBDMteb
TMEjehgTBJYqkiaLWOlZvGs8WDO6UIPCHw8TnAwWDEuKPcxQml0Ynj2cwYACAS7VqwWItWyuiUJB4s2AxmWxG
g9bl6YQtl0cAACH5BAUKAAgALAEAAQASABIAAAROEMkpx6A4W5upENUmEQT2feFIltMJYivbvhnZ3Z1h4FMQI
Dodz+cL7nDEn5CH8DGZhcLtcMBEoxkqlXKVIgAAibbK9YLBYvLtHH5K0J0IACH5BAUKAAgALAEAAQASABIAAA
ROEMkphaA4W5upMdUmDQP2feFIltMJYivbvhnZ3V1R4BNBIDodz+cL7nDEn5CH8DGZAMAtEMBEoxkqlXKVIg4
HibbK9YLBYvLtHH5K0J0IACH5BAUKAAgALAEAAQASABIAAAROEMkpjaE4W5tpKdUmCQL2feFIltMJYivbvhnZ
3R0A4NMwIDodz+cL7nDEn5CH8DGZh8ONQMBEoxkqlXKVIgIBibbK9YLBYvLtHH5K0J0IACH5BAUKAAgALAEAA
QASABIAAAROEMkpS6E4W5spANUmGQb2feFIltMJYivbvhnZ3d1x4JMgIDodz+cL7nDEn5CH8DGZgcBtMMBEox
kqlXKVIggEibbK9YLBYvLtHH5K0J0IACH5BAUKAAgALAEAAQASABIAAAROEMkpAaA4W5vpOdUmFQX2feFIltM
JYivbvhnZ3V0Q4JNhIDodz+cL7nDEn5CH8DGZBMJNIMBEoxkqlXKVIgYDibbK9YLBYvLtHH5K0J0IACH5BAUK
AAgALAEAAQASABIAAAROEMkpz6E4W5tpCNUmAQD2feFIltMJYivbvhnZ3R1B4FNRIDodz+cL7nDEn5CH8DGZg
8HNYMBEoxkqlXKVIgQCibbK9YLBYvLtHH5K0J0IACH5BAkKAAgALAEAAQASABIAAAROEMkpQ6A4W5spIdUmHQ
f2feFIltMJYivbvhnZ3d0w4BMAIDodz+cL7nDEn5CH8DGZAsGtUMBEoxkqlXKVIgwGibbK9YLBYvLtHH5K0J0
IADs=&#39;);

//编辑器模版
$html = <<<HTMLSTR
<!DOCTYPE html>
<html><head><meta charset="UTF-8">
<title>ACE代码编辑器</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<style type="text/css" media="screen">
a { text-decoration: none; }
body {
	overflow: hidden; background-color: #2D2D2D; font-size: 12px;
	font-family: &#39;Consolas&#39;, &#39;Monaco&#39;, &#39;Menlo&#39;, &#39;Ubuntu Mono&#39;, monospace;
    scrollbar-arrow-color: #ccc; scrollbar-base-color: #333;
    scrollbar-dark-shadow-color: #00ffff; scrollbar-track-color: #272822;
    scrollbar-highlight-color: #272822; scrollbar-3d-light-color: #272822;
    scrollbar-face-color: #2D2D2D; scrollbar-shadow-color: #333;
}
::-webkit-scrollbar { width:5px; height:6px; background-color:#444; }
::-webkit-scrollbar:hover { background-color:#444; }
::-webkit-scrollbar-thumb:hover { min-height:5px; min-width:5px; background-color: #AAA; }
::-webkit-scrollbar-thumb:active { -webkit-border-radius:20px; background-color: #AAA; }
::-webkit-scrollbar-thumb {
    min-height:5px; min-width:5px; -webkit-border-radius:20px; 
    ::-webkit-border-radius:1px; background-color: #AAA;
}
body > pre { color: #666; }
#sider { margin: 0; position: absolute; top:  25px; bottom: 0; left: 0; right: 85%; }
#editor { margin: 0; position: absolute; top: 0; bottom: 0; left: 15%; right: 0; }
#dir_tree { margin:0; padding: 0; height: 100%; overflow: auto; position: relative; left: 5px; } 
#dir_tree, #dir_tree ul, #dir_tree li { margin: 0; padding: 0; list-style: none inside; }
#dir_tree ul { padding-left: 20px; position: relative; }
#dir_tree li { text-indent: 2em; line-height: 1.6em; cursor: default; color: #ccc; }
#dir_tree li.hover > span, #dir_tree li:hover > span { color: #66D9EF; }
#dir_tree li#on > span { color: red; }
#dir_tree li.dir { background: url({$dir_icon}) no-repeat 3px 3px; }
#dir_tree li.file { background: url({$file_icon}) no-repeat 3px 0; }
#dir_tree li.loading { background: url({$loading}) no-repeat 3px 0; }
#logout { position: absolute; top: 0; left: 0; }
#logout a { display: inline-block; color: #aaa; line-height: 25px; padding: 0 4px; }
#logout a:hover { background: #000; color: #ddd; }
#contextmenu { position: absolute; top: 0; left: 0; background: #fff; color: #333; border: 1px solid #000; padding: 1px; }
#contextmenu span { display: block; line-height: 24px; text-indent: 20px; width: 80px; cursor: default; }
#contextmenu span:hover { background-color: #369; color: #fff; }
#alertify .alertify-message, #alertify .alertify-message {
    text-align: left !important; text-indent: 0; font-weight: bold; font-size: 16px;
}
#alertify .alertify-dialog, #alertify .alertify-dialog {
    font-family: &#39;Consolas&#39;; padding: 10px !important; color: #333 !important;
}
#alertify .alertify-button { 
    border-radius: 3px !important; font-weight: normal !important; 
    font-size: 14px !important; padding: 3px 15px !important;
}
.alertify-buttons { text-align: right !important; }
</style>
<link rel="stylesheet" href="{$tip[&#39;core&#39;]}" />
<link rel="stylesheet" href="{$tip[&#39;css&#39;]}" />
</head><body>
<p id="logout">
    <a href="javascript:void(0);">保存</a>
	<a href="javascript:void(0);">刷新</a>
	<a href="javascript:void(0);">重置</a>
    <a href="?logout">退出</a>
</p>
<p id="sider">{$tree}</p><pre id="editor">{$code}
HTMLSTR; //判断是否已经登录 if ( !is_logged() ) { die(str_replace( array('【标题】', '【动作】'), array('请输入您第一次设置的密码!', '登录'), $first )); } else { echo $html; }

 

2. [文件]     ace.rar 

php代码在线编辑器ace.rar


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는