我正在创建某种自定义 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 )
文档
fwrite
- http://php.net/manual/en/function.fwrite.php包含
- http://php.net/manual/en/function.include.php- PHP 基础 在 theopensourcery.com - http://theopensourcery.com/phpbasics.htm 维基百科上的
- 服务器端脚本 - http://en.wikipedia.org/wiki/Server-side_scripting
eval
- http://php.net/manual/en/function.eval.php- 输出控制(缓冲)- http://php.net/manual/en/book.outcontrol.php
- 聪明 - http://www.smarty.net
关于php - 我如何从 MySQL 数据库中渲染 PHP 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15072892/