因此,我正在为学校项目创建一个简单的在线php代码编辑器。 我们选择自己制作,而不使用像Codemirror这样的库。
因此,基本上,我们有一个很大的textarea,您在其中放置了代码,而不是发送到另一个使用php Eval()函数执行代码的php文件。 但是由于某些原因,当我们尝试发送诸如 Echo,While,If这样的内容时,它会不断发出POST错误。 (错误:500)
简单的事情像:2 + 4执行就好(输出为:6)。
第一个问题是: 是否有可能像我们想使用Eval()一样执行php代码?
第二个是: 有其他方法可以做我们想要的吗?如果是这样,请提供更多信息/代码。
我们当前的代码:
editor.php
<textarea id="area" cols="70" rows="30"></textarea>
<button id="submit">Submit</button>
<script>
$('#submit').click(function (e) {
e.preventDefault();
var info = $('#area').val();
$.ajax({
type: "POST",
url: 'pages/assignments/response.php',
data: {area: info},
success: function (response) {
console.log(response);
}
});
});
</script>
Response.php
<?php
if (!empty($_POST['area'])) {
runEval($_POST['area']);
};
function runEval($data)
{
// $data = preg_replace('/\s+/', '', $data); doesn't seem to work at all with it)
$characters = '[a-zA-Z0-9]*';
$functions = '';
$operators = '[\w-><$(){}|_+=":;!&*%$]';
$regexp = '/^((' . $characters . '|' . $functions . '\s*\((?1)+\)|\((?1)+\))(?:' . $operators . '(?2))?)+/'; /*honestly we have no idea what it does, because we copied it and changed the $characters,$functions,$operators*/
if (preg_match($regexp, $data)) {
eval('$result = ' . $data . ';');
echo $result;
} else {
$data = false;
}
}
?>
答案 0 :(得分:1)
我认为您复制的代码最初是用于数学或字符串运算的,因为它为变量(eval('$result = ' . $data . ';')
)分配了一个值。
尝试删除$result =
和echo
语句,看看是否可行。
从文档中:
不得将代码包装在打开和关闭PHP标签中,即 回声“嗨!”;必须传递而不是“”。它是 尽管仍然可以离开并重新进入PHP模式 适当的PHP标签,例如'echo“在PHP模式下!”; ?>在HTML模式下!
此外,传递的代码必须是有效的PHP。这包括 所有语句必须使用分号正确终止。 '回声 例如,“ Hi!”会导致解析错误,而回声“ Hi!”;” 会起作用。
返回声明将立即终止对 代码。
该代码将在调用eval()的代码范围内执行。 因此,在eval()调用中定义或更改的任何变量都将保留 终止后可见。
http://php.net/manual/ro/function.eval.php
顺便说一句,请注意,正如docs中的eval()所述,它非常危险,因为它允许在服务器上执行任何种类的有效的PHP代码。
请参阅: