如何从mysql记录中返回php代码?
如何从mysql行“content”记录返回php代码,其中可能只包含纯文本,如:如何从mysql记录中返回php代码?,php,mysql,sql,ob-get-contents,Php,Mysql,Sql,Ob Get Contents,如何从mysql行“content”记录返回php代码,其中可能只包含纯文本,如: 你好 或/和php类似: 让我们试试php: 当它只包含纯文本时没有大小写速度性能 下面是一个例子,它使用include()返回php,但在本例中,它不是我所要求的(我所要求的是php的所有内容都来自mysql) mysql记录: +---------------+ | id | content | |---------------| | 0 | test.php | +---------------+
你好代码>
或/和php类似:
让我们试试php:
当它只包含纯文本时没有大小写速度性能
下面是一个例子,它使用include()返回php,但在本例中,它不是我所要求的(我所要求的是php的所有内容都来自mysql)
mysql记录:
+---------------+
| id | content |
|---------------|
| 0 | test.php |
+---------------+
test.php内容
正在尝试通过include()从mysql返回php:
尝试评估记录的内容:eval($row['content'])代码>
补充:您的案例中有一个混合的html+php代码,这意味着您需要使用一个结束php标记来离开php模式,因此在您的特定案例中,这可能如下所示:
eval( '?>'. $row['content'] .'<?php ' );
eval(“?>”.$row['content']”.数据库中的PHP代码很糟糕,但我以前遇到过必须这样做的情况,因为我的雇主不允许我以避免这种情况的方式重写系统,所以这里是我们使用的解决方案的通用版本:
$string = 'this <?php echo "is not"; ?> cool';
function exec_php($php_string) {
return preg_replace_callback(
'/<\?(?:php)?(.*)\?>/m',
'exec_php_embed',
$string
);
}
function exec_php_embed(array $args) {
if (count($args) != 2) {
return '';
}
list(,$code) = $args;
ob_start();
eval($code);
return ob_get_clean();
}
因此,您的字段中有PHP代码和纯文本,但您想提取(并使用?)PHP内容?@Jonathan Sampson-他们都喜欢PHP操作。例如Hello!
将返回Hello!
@yes123-这不符合标准。主要的想法是问题。@Binyamin@Karolis提供(使用eval()
在内容上),但在这样做时请非常小心。这通常是不赞成的。如果你在下一行重复它,你为什么要这样做?@Binyamin:当eval()是答案时,你问的问题是错误的。在这种情况下,Karolis是正确的:你必须eval()你的代码可以实现你想要的结果。但是,你的设计需要固定。将代码存储在数据库中并任意执行该代码是不安全和低效的。有时你被束缚在一个系统上,不能按照你喜欢的方式做事情。通常,这是雇主的意愿,除非你签了自己的工资单,否则你通常会被解雇无法绕过此问题。是否有任何安全的方法可以做到这一点,如使用不带eval()的模板样式{{content\u id,current\u time}}?@Binyamin(1)实际上,这种方式并不是不安全的。在我看来,关于eval和安全性的争论被夸大了。我认为,就像往常一样,一切都只取决于特定的应用程序设计。函数本身与安全性无关。所有的安全性都取决于你如何处理传递给这个函数的参数。(2)您可以创建一个函数get\u content(content\u id,current\u time)
。在这个函数中,对参数进行严格的验证并运行eval()
。然后,无论何时您需要在代码中使用eval()
,都可以使用get\u content()
。
$string = 'this <?php echo "is not"; ?> cool';
function exec_php($php_string) {
return preg_replace_callback(
'/<\?(?:php)?(.*)\?>/m',
'exec_php_embed',
$string
);
}
function exec_php_embed(array $args) {
if (count($args) != 2) {
return '';
}
list(,$code) = $args;
ob_start();
eval($code);
return ob_get_clean();
}
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.