1

ページを保存する方法は 2 つあります。1 つ目は単純です。ファイルに保存します。2 つ目は、私が問題を抱えているデータベースに保存することです。
「システム」全体は、ページを 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 に答える