1

私は、extjs をフロントエンドとして使用して webmud のようなゲームを実行する人事プロジェクトにゆっくりと取り組んでいます。私が行った設計上の選択の 1 つは、ゲーム ロジック用にユーザーが生成した評価済みコードを許可することでした。そのため、プレーヤーが新しい「部屋」に入ると、「プレーヤーは以前ここにいたことがありますか、ここにいるはずですか、x 個のインベントリ アイテムを持っていますか」という行に沿って多数の状態スクリプトが呼び出され、それに応じて応答します。さらに、基本的な部屋の「アクション」はハードコーディングされますが ( go N/S/E/W )、高度なアクションは同じユーザー生成の評価済みスクリプトとして利用できます。

もともと私は怠け者で、このロジックに評価済みの PHP を使用するつもりでしたが、偏執狂的な感覚が働いています。そのため、私が見つけた 2 つの代替手段は runkit_sandbox ですが、プライマリ スレッドとサンドボックス間のオブジェクトの交換はサポートされていません。 (単純なデータ型と配列のみ) または、私のゲーム ロジックとして ecmascript を使用http://ejohn.org/blog/spicing-up-embedded-javascript/ .

この 2 つの長所と短所は、runkit を使用すると、スクリプトを非常に高速にロックダウンできますが、ecma インタープリターを使用すると、変数、関数、および場合によってはオブジェクトを javascript 実行空間に選択的にバインドできますが、まだベータ版の状態で、どれだけうまく動作するかまだわかりません。

これらはオプションのためのものですか、それとも私が知らない他の何かがより良い選択かもしれませんか? 環境: Linux、PHP-CGI 5.3、または Google アプリ エンジンとして。

4

2 に答える 2

4

runkit サンドボックス内であっても、ユーザーが投稿した PHP コードを評価することはお勧めしません。PHP は非常に複雑な言語であり、その環境と密接に結びついています。詳細を知らなくても、人々がサンドボックスから抜け出すために活用できる多くの穴があると予想されます.

JavaScript 以外にも、埋め込むことができる言語は他にもあります。Luaは、これらの種類のもので人気のある選択肢です。peclには、バインディングを備えた php 拡張機能さえあります。

とにかく runkit ルートを使用する場合は、プロセス間でデータを交換するために、memcacheなどの共有メモリ ソリューションを調べることができます。

于 2008-10-27T20:33:55.560 に答える
2

利用可能な基本的なもののためのPHPサンドボックスがあります。初期段階ですが、有望に見えます。

http://www.phpclasses.org/package/7015-PHP-Execute-external-PHP-scripts-in-a-separate-process.html

またはGitHubから: https ://github.com/fregster/PHPSandbox

ポール

于 2012-01-04T10:11:38.593 に答える