1

ある種のカスタム CMS (ホーム オートメーション) を作成しています。私は PHP 開発者ではありません - ただの趣味です。

私が達成しようとしていることは次のとおりです。

私のindex.phpページには次のようなものがあります:

"<?php echo $pageBody; ?>   "

PageBody データベースからフェッチしていますが、HTML、JS でうまく機能します。ただし、PHP コード ソースでは機能しません。

これはPHPのセキュリティ制限に関連していると思われるいくつかの調査を行いました。

私の質問: 誰でも安全なサンプルを提供できますか (このようなサンプルは見つかりません) - どのようにすればよいですか?

私はいくつかのphpコードを挿入し、最終的にブラウザ経由でレンダリングしようとしています:

    <div id="outer">
        <div id="inner">
                    ***PHP Code should go here***       
        </div>
    </div>

現時点では、テキストとしてレンダリングされています。ただし、HTML と JS を適切にレンダリングできます。

私の好ましい方法は、可能な限り安全です。

どうもありがとう!

4

4 に答える 4

2

データベースのテキスト フィールドから PHP コードを取得する場合、PHP インタープリターは、データを PHP スクリプトとして解析する必要があることを「認識」していません。PHP インタープリターにとって、そのフィールドのデータは他のデータと何ら変わりはありません。特別な意味を持たないすべての文字列です。

純粋な PHP スクリプトを扱っている場合は、eval ( docs ) を使用してこれを実現できます。特にユーザーがデータベースの内容に関して何らかの入力を行う場合は、リスクが伴うため、「悪」と見なされることに注意してください。eval

あなたの場合、データベース フィールドに格納されている混合 PHP と HTML を解析したいようです。これを行うには、データベース データをファイルに書き込む必要があります。includeこれにより、PHP インタープリターが処理できるようになります。このプロセスでは、ある種のキャッシュ メカニズムを実装する必要があります。そうしないと、多くのユーザーがいるサーバーで負荷が高くなる可能性があります。出力をすぐに送信するのではなく、出力バッファリング ( docs ) を使用して出力をキャプチャすることもできます。

簡単に言えば、次のようなことをしたいでしょう:

$content_from_db = "<h1>Hello <?php print 'Clarisse'; ?></h1>";
$identifier_from_db = '12'; // like the primary key from the table

$file_handle = fopen('cached_content/CACHE_'.$identifier_from_db.'.php', 'w');
fwrite($file_handle, $content_from_db);
fclose($file_handle);

// here is where you'd start output buffering, if you're going to do that (optional)

include('cached_content/CACHE_'.$identifier_from_db.'.php');

// and then here you retrieve the output buffer's content (optional)

これは動的コンテンツを含める「従来の」方法ではないことに注意してください。また、上記のコードは本番環境に対応していません。あなたのユースケースを知らなければ、確かなことは言えませんが、データベースに PHP コードを保存するというこの考え方は、かなり珍しい方法です。

独自のものを作成する別の方法は、smarty テンプレート ライブラリです。ここでチェックしてください: http://www.smarty.net . smarty を使用すると、データベースからテンプレートをプルするリソース プラグインを作成できます。上記のコードのようになります (詳細)

ドキュメンテーション

于 2013-02-25T17:51:20.780 に答える
0

文字列 (またはデータベース) に保存した PHP を実行するには、 eval 関数を使用できますが、多少危険な場合があることに注意してください。

于 2013-02-25T17:38:21.247 に答える
0

php スクリプトはサーバー上で実行され、出力がブラウザーに送信されるため、ブラウザーで php コードをレンダリング (おそらく実行) することはできません。ブラウザーが応答を受け取るまでに、スクリプトは既に実行を終了しています。

出力を送信する前に、データベースからコードを取得し、 eval() を使用できます。ただし、このアプローチの欠点を認識しておく必要があります。

于 2013-02-25T17:39:01.857 に答える
-1

ブラウザが PHP コードをレンダリング (実行) できません。PHP は、サーバーが実行し、プレーンな HTML としてブラウザーに送信して表示するものです。

テスト目的で、最も手間のかからない開発用のワンストップ ソリューションである WAMP をダウンロードしてインストールできます。

リンク : http://www.wampserver.com/en/

于 2013-02-25T17:52:39.750 に答える