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