File: sandbox-parent.xml

package info (click to toggle)
php-doc 20100521-2
  • links: PTS, VCS
  • area: main
  • in suites: squeeze, wheezy
  • size: 59,992 kB
  • ctags: 4,085
  • sloc: xml: 796,833; php: 21,338; cpp: 500; sh: 117; makefile: 58; awk: 28
file content (179 lines) | stat: -rw-r--r-- 4,837 bytes parent folder | download
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="utf-8"?>
<!-- $Revision: 297028 $ -->
<!-- Generated by xml_proto.php v2.2. Found in /scripts directory of phpdoc. -->
<refentry xml:id="runkit.sandbox-parent" xmlns="http://docbook.org/ns/docbook">
 <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>

  &note.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:"~/.phpdoc/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
-->