1

我正在创建某种自定义 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。

我更喜欢的方式是 - 尽可能安全。

非常感谢伙计们!

4

4 回答 4

2

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

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

在您的情况下,听起来您想要解析存储在数据库字段中的混合 PHP 和 HTML。为了做到这一点,您需要将数据库数据写入一个文件,然后includePHP 解释器才能完成它的工作。您应该在此过程中实现某种缓存机制,否则它可能会在您的服务器上有很多用户时变得很重。您可能还想使用输出缓冲 ( 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,您可以编写一个资源插件来从数据库中提取模板。它看起来像上面的代码(更多信息

文档

于 2013-02-25T17:51:20.780 回答
0

要执行存储在字符串(或数据库)中的 PHP,您可以使用eval 函数,但要小心它可能有些危险。

于 2013-02-25T17:38:21.247 回答
0

您不能在浏览器中呈现(可能您的意思是执行)php 代码,因为 php 脚本在服务器上执行,然后将输出发送到浏览器。当浏览器收到响应时,脚本已经执行完毕。

您可以从数据库中获取代码并在发送输出之前使用 eval()。但是您必须意识到这种方法的缺点。

于 2013-02-25T17:39:01.857 回答
-1

浏览器无法呈现(执行)PHP 代码。PHP 是服务器执行并作为纯 HTML 发送到浏览器以显示的东西。

出于测试目的,您可以下载并安装 WAMP,这是最轻松的一站式开发解决方案。

链接:http ://www.wampserver.com/en/

于 2013-02-25T17:52:39.750 回答