我有一个存储在数据库中的PHP代码,我需要在检索时执行它。
但我的代码是HTML和PHP的混合,主要用于echo“”;
看起来像我的代码的示例:
echo "Some Text " . $var['something'] . " more text " . $anotherVar['something2'];
如果我使用echo"";
或不使用数据将数据添加到数据库中,如何执行类似的代码。
有什么想法吗?
更新:
我忘了提及,我在一个将在内联网上使用的网站上使用它,并且将在服务器上强制执行安全性以确保数据安全。
答案 0 :(得分:16)
我有一个存储在数据库中的PHP代码
现在停止。
将代码移出数据库。
永远不要再将代码与数据混合在一起。
答案 1 :(得分:3)
这不仅是一个坏主意,而且还邀请了几种黑客攻击。
您可以使用eval()
。但从不使用它。 eval()
非常危险,因为它允许执行任意PHP代码。因此不鼓励使用它。如果您已仔细验证除了使用此构造之外没有其他选项,请特别注意不要将任何用户提供的数据传递到其中,而不事先正确验证它。
答案 2 :(得分:2)
见eval。它允许您传递包含PHP的字符串并运行它,就像您将其直接写入文件一样。
将可执行PHP存储在数据库中并不常见;你存储的代码真的是那么不同,维护它的许多副本更有意义,而不是让它适应数据库中的静态数据吗? eval
的使用通常被认为是不好的做法,因为它可能导致维护问题,如果有办法避免它,通常是值得的。
答案 3 :(得分:1)
使用eval()函数。
继承人的一些信息
http://www.php.net/manual/en/function.eval.php
类似于:
eval($yourcode);
如果这是最后的手段,你希望它是安全的,因为它会评估任何东西,黑客喜欢它。查看Suhosin或其他路径以确保生产。
答案 4 :(得分:1)
您可以使用eval()执行代码:
$code_str = "echo 'Im executed'";
eval($code_str );
但请注意这不安全:如果有人可以访问您的数据库,他将能够执行您服务器上的任何代码
答案 5 :(得分:1)
正如大家所说,使用eval()对你的需求来说是一个糟糕的方法。但是使用白名单方法可以获得几乎相同的结果。
// $ sql_fn_parameters [0] =函数名称
// $ sql_fn_parameters [1,2,3 .....] =函数参数
然后定义包含php代码块的函数。例如
my_echo($sql_fn_parameters){ echo $sql_fn_parameters[1];//numbered or assoc.. }
然后提取包含函数名称
function_exists("$sql_fn_parameters[0]")
call_user_func_array()或call_user_func()
让你的代码从db控制而没有风险。
似乎有点长,但在实施之后,使用管理面板驱动的php流程真的很高兴。
但是使用OOP构建这样的结构在长期内会更好。 (课程自动加载等)
答案 6 :(得分:0)
Eval显然不安全。
最佳路线IMO
将数据保存在表格中
准备好抓取并处理该数据时运行存储过程
答案 7 :(得分:0)