php - 我如何从 MySQL 数据库中渲染 PHP 代码?

标签 php mysql security rendering

我正在创建某种自定义 CMS(家庭自动化)。 好吧,我不是 PHP 开发人员 - 只是爱好者。

我想要实现的是:

在我的 index.php 页面中,我有类似的东西:

"<?php echo $pageBody; ?>   "

PageBody 我正在从数据库中获取,它适用于 HTML、JS。但它不适用于 PHP 代码源。

我做了一些研究,我认为这与 PHP 安全限制有关。

我的问题:是否有人能够提供安全的样本(找不到任何这样的样本)——我应该怎么做。

我正在尝试插入一些 php 代码并最终通过浏览器呈现它:

    <div id="outer">
        <div id="inner">
                    ***PHP Code should go here***       
        </div>
    </div>

目前 - 它正在呈现为文本。但是我可以正确呈现 HTML 和 JS。

我的首选方式是 - 尽可能安全。

非常感谢大家!

最佳答案

当您从数据库文本字段中检索 PHP 代码时,PHP 解释器并不知道它应该将数据解析为 PHP 脚本。对于 PHP 解释器,该字段中的数据与任何其他数据没有区别——都是没有任何特殊意义的字符串。

如果您处理的是纯 PHP 脚本,您可以使用 eval ( docs ) 来完成此操作。预先警告:eval 被认为是“邪恶的”,因为使用它会带来风险,尤其是当您的用户将对数据库内容有任何输入时。

在您的情况下,听起来您想要解析存储在数据库字段中的混合 PHP 和 HTML。为此,您需要将数据库数据写入一个文件,然后 include 以便 PHP 解释器执行它的操作。您应该在此过程中实现某种缓存机制,否则它可能会在您的服务器上因许多用户而变得沉重。您可能还想使用输出缓冲 (docs) 来捕获输出,而不是立即将其发送出去。

简而言之,您想做这样的事情:

$content_from_db = "<h1>Hello <?php print 'Clarisse'; ?></h1>";
$identifier_from_db = '12'; // like the primary key from the table

$file_handle = fopen('cached_content/CACHE_'.$identifier_from_db.'.php', 'w');
fwrite($file_handle, $content_from_db);
fclose($file_handle);

// here is where you'd start output buffering, if you're going to do that (optional)

include('cached_content/CACHE_'.$identifier_from_db.'.php');

// and then here you retrieve the output buffer's content (optional)

请注意,这不是包含动态内容的“传统”方式,并且上述代码未准备好生产。在不知道您的用例的情况下,我不能肯定地说,但是这种将 PHP 代码存储在数据库中的想法是一种相当不寻常的处理方式。

您自己制作的另一种选择是 smarty 模板库。在这里查看:http://www.smarty.net .使用 smarty,您可以编写一个资源插件来从数据库中提取模板。它看起来像上面的代码 ( more info )

文档

关于php - 我如何从 MySQL 数据库中渲染 PHP 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15072892/

相关文章:

Mysql,检索超过X天的记录

php - 将日期格式从 d-m-Y 转换为 Y-m-d

php - 安全证书

security - 简单堆栈溢出的 Shellcode : Exploited program with shell terminates directly after execve ("/bin/sh")

php - 无法使用 php 将数据库从 android 插入本地主机

php - 为什么我在 PHP 中使用 cookie 时得到 undefined index ?

php - 缩进 PHP 文件的命令行程序

php - Wordpress:将自定义 ID 添加到 wp_nav_menu 中的最终 li

mysql - 如何将任意列中的属性值乘以 0.20

mysql - 如何设计手机充值码的安全数据库