执行存储在数据库中的PHP代码

时间:2012-09-03 16:43:17

标签: php mysql

我有两种存储页面的方法。第一个很简单;将其存储在一个文件中。第二个是将它存储在我遇到问题的数据库中 整个“系统”基于“引擎”,它通过将页面注入HTML模板来输出页面。简单地说:代码必须在到达引擎之前执行。希望这会使一些代码更有意义。
page.class.php

...
// Page was found in the database
            $this->name = $pageVariables['name'];
            $this->requiredAuth = $pageVariables['requiredAuth'];
            if ($parsed) {
                ob_start();
                echo $pageVariables['content'];
                $this->contents = ob_get_clean();
                var_dump($this->contents);
            } else {
                $this->contents = $pageVariables['content'];
            }
...
// File exists on the system, load it
                $fileContents = file_get_contents($this->url);
                if ($parsed) {
                    ob_start();
                    include($this->url);
                    $this->contents = ob_get_clean();
var_dump($this-contents);
                    if (isset($pageName)) {
                        $this->name = $pageName;
                    }
                    if (isset($requiredAuth)) {
                        $this->requiredAuth = $requiredAuth;
                    }
                    if (isset($useEngine)) {
                        $this->useEngine = $useEngine;
                    }
                } else {
                    $this->contents = $fileContents;
                }

if ($parsed) {...}就在那里,因此可以取消解析页面以进行编辑 显然这是一个减少版本,但我希望显示足够。
如果我加载带代码的页面

Hello World<br>
<?php echo 'Hello World'; ?>

从数据库得到的输出是

Hello World<br>
<?php echo 'Hello World'; ?>

但是,存储在文件中的相同代码输出

    Hello World
    Hello World

我尝试过使用eval(),但这只会评估PHP代码,并且在包含HTML / PHP混合时会失败。
也许有更好的方法来实现(存储,执行等),但这是我目前看到的问题。

2 个答案:

答案 0 :(得分:4)

您可以使用PHP's eval来运行存储在数据库中的代码。

$code = get_code_from_db();
eval($code); // will evaluate (run) code stored in $code variable

虽然小心。 eval是一个需要谨慎对待的功能。如果您不考虑存储代码的含义,它可能是错误的来源,安全漏洞,您可以命名它。

答案 1 :(得分:1)

小心eval,this is a good post on why

更好的解决方案是将页面模板存储在数据库中,然后在PHP中安全地解析它们。