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