diff --git a/reference/runkit/reference.xml b/reference/runkit/reference.xml index 393bdc7a9d..08b975a5d5 100644 --- a/reference/runkit/reference.xml +++ b/reference/runkit/reference.xml @@ -1,5 +1,5 @@ - + runkit Functions @@ -83,6 +83,9 @@ show_values(); + + &reference.runkit.sandbox; + &reference.runkit.functions; diff --git a/reference/runkit/sandbox.xml b/reference/runkit/sandbox.xml new file mode 100644 index 0000000000..9996d5d6fb --- /dev/null +++ b/reference/runkit/sandbox.xml @@ -0,0 +1,226 @@ + + + + + + Runkit_Sandbox + + Runkit Sandbox Class -- PHP Virtual Machine + + + + &reftitle.description; + + + Instantiating the Runkit_Sandbox class creates a new thread with its own scope + and program stack. Using a set of options passed to the constructor, this environment + may be restricted to a subset of what the primary interpreter can do and provide a + safer environment for executing user supplied code. + + + + + Constructor + + voidRunkit_Sandbox::__construct + arrayoptions + + + + option is an associative array containing + any combination of the special ini options listed below. + + + + + + safe_mode + + + If the outer script which is instantiating the Runkit_Sandbox class + is configured with safe_mode = off, then safe_mode + may be turned on for the sandbox environment. This setting can not + be used to disable safe_mode when it's already enabled in the outer script. + + + + + open_basedir + + + open_basedir may be set to any path below the + current setting of open_basedir. If open_basedir is not set within the global scope, + then it is assumed to be the root directory and may be set to any location. + + + + + allow_url_fopen + + + Like safe_mode, this setting can only be made more restrictive, + in this case by setting it to &false; when it is previously set to &true; + + + + + disable_functions + + + Coma separated list of functions to disable within the sandbox sub-interpreter. + This list need not contain the names of the currently disabled functions, + they will remain disabled whether listed here or not. + + + + + disable_classes + + + Coma separated list of classes to disable within the sandbox sub-interpreter. + This list need not contain the names of the currently disabled classes, + they will remain disabled whether listed here or not. + + + + + + + + Instantiating a restricted sandbox + +true, + 'open_basedir'=>'/var/www/users/jdoe/', + 'allow_url_fopen'=>'false', + 'disable_functions'=>'exec,shell_exec,passthru,system', + 'disable_classes'=>'myAppClass'); +$sandbox = new Runkit_Sandbox($options); +/* Non-protected ini settings may set normally */ +$sandbox->ini_set('html_errors',true); +]]> + + + + + + Accessing Variables + + All variables in the global scope of the sandbox environment + are accessible as properties of the sandbox object. + The first thing to note is that because of the way memory + between these two threads is managed, object and resource + variables can not currently be exchanged between interpreters. + Additionally, all arrays are deep copied and any references + will be lost. This also means that references between + interpreters are not possible. + + + + Working with variables in a sandbox + +foo = 'bar'; +$sandbox->eval('echo "$foo\n"; $bar = $foo . "baz";'); +echo "{$sandbox->bar}\n"; +if (isset($sandbox->foo)) unset($sandbox->foo); +$sandbox->eval('var_dump(isset($foo));'); +]]> + + + + + + + + + Accessing Variables + + Any function defined within the sandbox may be called as + a method on the sandbox object. This also includes a few + psuedo-function language constructs: eval, + include, include_once, + require, and require_once. + Most notably abset are the language constructs: echo, + print, die, and exit. + These functions are excluded out of simplicity and to avoid confusion + as they would mostly likely be used incorrectly. + + + + Calling sandbox functions + +str_replace('a','f','abc'); +]]> + + + + + + + + When passing arguments to a sandbox function, the arguments + are taken from the outer instance of PHP. If you wish to pass + arguments from the sandbox's scope, be sure to access them as + properties of the sandbox object as illustrated above. + + + + Passing arguments to sandbox functions + +foo = 'baz'; +$sandbox->str_replace('a',$foo,'a'); +$sandbox->str_replace('a',$sandbox->foo,'a'); +]]> + + + + + + + + + +