(no version information, might be only in CVS)
Runkit_Sandbox_Parent -- Runkit 反サンドボックス(Anti-Sandbox)クラスRunkit_Sandbox クラスが作成した サンドボックス環境から Runkit_Sandbox_Parent クラスのインスタンスを作成し、サンドボックスからその親インスタンスに アクセスするための(管理された)手段を提供します。
注意: サンドボックスのサポート (runkit_lint(), runkit_lint_file(), および Runkit_Sandbox クラスで使用)は、PHP 5.1 以降または特別なパッチを適用した PHP 5.0 でのみ利用可能であり、スレッドセーフを有効にしておく必要があります。 詳細については、runkit パッケージに含まれる README ファイルを参照してください。
Runkit_Sandbox_Parent の機能を有効にするには、 親のコンテキストから各サンドボックス単位で parent_access フラグを有効にする必要があります。
サンドボックス内の変数へのアクセスと同様、親の変数の読み込みや 親の変数への書き込みが可能です。これは Runkit_Sandbox_Parent クラスのプロパティとして 扱われます。親の変数の読み込みは、parent_read 設定を有効にすることで可能となります(それに加えて、基本となる parent_access の設定も必要です)。 一方、書き込みについては parent_write の設定により 可能となります。
サンドボックス内の変数へのアクセスとは異なり、変数のスコープが グローバルに限定されることはありません。parent_scope を適切な整数値に設定することで、アクティブなコールスタック内で 他のスコープが使用可能です。0(デフォルト)は、グローバルスコープで 変数に直接アクセスします。1 は、サンドボックスのコードが実行された ブロック内のスコープを設定します。それより大きい値を指定した場合、 サンドボックスのコードを実行した関数の呼び出し元を順にたどり、 そのスコープの変数にアクセスしようと試みます。
上の例の出力は以下となります。
string(6) "Global" string(7) "three()" string(5) "two()" string(5) "one()" string(6) "Global" string(6) "Global" |
適切な設定を有効にすることで、サンドボックスはその親の関数に アクセスすることが可能となります。 parent_call を有効にすると、サンドボックスから 親スコープの全ての関数をコールすることが可能となります。 言語構造については、以下のように個々の設定項目で管理されます。 print() および echo() は parent_echo を有効にすると使用可能です。 die() および exit() は parent_die を有効にすると使用可能です。 eval() は parent_eval を 有効にすると使用可能です。また include()、 include_once()、require() および require_once() は parent_include を有効にすると使用可能です。