从文本框表单运行php命令

从文本框表单运行php命令,php,preg-replace,eval,Php,Preg Replace,Eval,我试图为从数据库文本字段运行php代码创建一个bb代码选项。 类似于[?php]code[/?] 我知道这不安全,但没有人可以编辑页面,我主要想用它来计算东西或包含文件 这就是我目前的情况: $txt = preg_replace("#\[?php\](.+?)\[/?\]#is", eval("\\1"), $txt); 您提供的示例不能在preg\u replace()之前进行eval()计算,结果实际上用作替换\\1不是有效的PHP表达式,因此我希望给定的代码将返回解析错误 您应该首先使

我试图为从数据库文本字段运行php代码创建一个bb代码选项。 类似于
[?php]code[/?]

我知道这不安全,但没有人可以编辑页面,我主要想用它来计算东西或包含文件

这就是我目前的情况:

$txt = preg_replace("#\[?php\](.+?)\[/?\]#is", eval("\\1"), $txt);

您提供的示例不能在
preg\u replace()
之前进行
eval()
计算,结果实际上用作替换<代码>\\1不是有效的PHP表达式,因此我希望给定的代码将返回解析错误

您应该首先使用
preg_match()
提取PHP表达式,然后使用
eval()
将其提取,然后才使用
eval()
的结果替换bb标记之间的文本


也就是说,正如上面所评论的,我个人强烈建议不要做这样的事情。这基本上提供了对服务器的任意访问,这在任何方面都是一个非常糟糕的设计思想。我想你真的只需要一定数量的操作,比如包含一个特定目录中的页面。您可以为那些数量有限的操作实施专用的bb标记,并采取所有预防措施。

您可以开始缓冲,评估整个字符串,首先关闭php标记,并将缓冲区作为变量:

$txt = "Result of 2+2 = [?php] echo 4; [/?].";

$txt = str_replace(array('[?php]', '[/?]'), array('<?php','?>'), $txt);
ob_start();
eval('?>'.$txt);
$txt = ob_get_contents();
ob_end_clean();

echo $txt;
$txt=“2+2的结果=[?php]echo 4;[/?]”;
$txt=str_replace(数组(“[?php]”,“[/?]”),数组(“”),$txt);
ob_start();
评估(“?>”.$txt);
$txt=ob_get_contents();
ob_end_clean();
echo$txt;

那么真的-您应该找到不运行任意代码的方法。想要做一个计算,用户需要一个解析器来解析BB标签中的内容,想要包含一个文件,使用一个专门的语法。假设没有人可以编辑它就允许它是基于错误的,并且如果你的数据库被破坏,你的服务器就会受到攻击。那么我如何以这种方式包含文件?那么你如何制作包含标记?因为除了eval之外,我找不到任何东西来运行php