1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
|
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.3 $ -->
<!-- Generated by xml_proto.php v2.2. Found in /scripts directory of phpdoc. -->
<refentry id="runkit.sandbox-parent">
<refnamediv>
<refname>Runkit_Sandbox_Parent</refname>
<refpurpose>
Runkit Anti-Sandbox Class
</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>void</type><methodname>Runkit_Sandbox_Parent::__construct</methodname>
<void/>
</methodsynopsis>
<para>
Instantiating the <classname>Runkit_Sandbox_Parent</classname>
class from within a sandbox environment created from the
<classname>Runkit_Sandbox</classname> class provides some
(controlled) means for a sandbox child to access its parent.
</para>
¬e.runkit.sandbox;
<para>
In order for any of the <classname>Runkit_Sandbox_Parent</classname>
features to function. Support must be enabled on a per-sandbox basis
by enabling the <literal>parent_access</literal> flag from the parent's
context.
</para>
<example>
<title>Working with variables in a sandbox</title>
<programlisting role="php">
<![CDATA[
<?php
$sandbox = new Runkit_Sandbox();
$sandbox['parent_access'] = true;
?>
]]>
</programlisting>
</example>
</refsect1>
<refsect1 role="variables">
<title>Accessing the Parent's Variables</title>
<para>
Just as with sandbox variable access, a sandbox parent's
variables may be read from and written to as properties of
the <classname>Runkit_Sandbox_Parent</classname> class.
Read access to parental variables may be enabled with
the <literal>parent_read</literal> setting (in addition
to the base <literal>parent_access</literal> setting).
Write access, in turn, is enabled through the
<literal>parent_write</literal> setting.
</para>
<para>
Unlike sandbox child variable access, the variable scope
is not limited to globals only. By setting the
<literal>parent_scope</literal> setting to an appropriate
integer value, other scopes in the active call stack may
be inspected instead. A value of 0 (Default) will direct
variable access at the global scope. 1 will point variable
access at whatever variable scope was active at the time the
current block of sandbox code was executed. Higher values
progress back through the functions that called the functions
that led to the sandbox executing code that tried to access
its own parent's variables.
</para>
<example>
<title>Accessing parental variables</title>
<programlisting role="php">
<![CDATA[
<?php
$php = new Runkit_Sandbox();
$php['parent_access'] = true;
$php['parent_read'] = true;
$test = "Global";
$php->eval('$PARENT = new Runkit_Sandbox_Parent;');
$php['parent_scope'] = 0;
one();
$php['parent_scope'] = 1;
one();
$php['parent_scope'] = 2;
one();
$php['parent_scope'] = 3;
one();
$php['parent_scope'] = 4;
one();
$php['parent_scope'] = 5;
one();
function one() {
$test = "one()";
two();
}
function two() {
$test = "two()";
three();
}
function three() {
$test = "three()";
$GLOBALS['php']->eval('var_dump($PARENT->test);');
}
?>
]]>
</programlisting>
</example>
&example.outputs;
<screen>
<![CDATA[
string(6) "Global"
string(7) "three()"
string(5) "two()"
string(5) "one()"
string(6) "Global"
string(6) "Global"
]]>
</screen>
</refsect1>
<refsect1 role="functions">
<title>Calling the Parent's Functions</title>
<para>
Just as with sandbox access, a sandbox may access its parents
functions providing that the proper settings have been enabled.
Enabling <literal>parent_call</literal> will allow the sandbox
to call all functions available to the parent scope. Language
constructs are each controlled by their own setting:
<function>print</function> and <function>echo</function> are
enabled with <literal>parent_echo</literal>.
<function>die</function> and <function>exit</function> are
enabled with <literal>parent_die</literal>.
<function>eval</function> is enabled with <literal>parent_eval</literal>
while <function>include</function>, <function>include_once</function>,
<function>require</function>, and <function>require_once</function>
are enabled through <literal>parent_include</literal>.
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
|