1

我有两种存储页面的方法。第一个很简单;将其存储在一个文件中。第二个是将它存储在我遇到问题的数据库中。
整个“系统”基于一个“引擎”,该引擎通过将页面注入 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 混合时会失败。
也许有更好的方法来解决这个问题(存储、执行等),但这是我目前看到的问题。

4

2 回答 2

4

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

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

不过要小心。eval是一个需要小心对待的函数。如果您不考虑存储代码的含义,它可能是错误、安全漏洞的根源。

于 2012-09-03T16:44:30.433 回答
1

小心 eval,这是一篇关于为什么的好帖子

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

于 2012-09-03T16:47:58.667 回答