Runkit_Sandbox_Parent
(PECL runkit >= 0.7.0)
Runkit_Sandbox_Parent - Runkit Anti-Sandbox类
描述
void Runkit_Sandbox_Parent::__construct ( void )
在从Runkit_Sandbox类创建的沙箱环境中实例化Runkit_Sandbox_Parent类为沙箱子进程提供了一些(受控)手段来访问其父级。
注意:sandbox支持(runkit_lint(),runkit_lint_file()和Runkit_Sandbox类所需的)仅适用于PHP 5.1.0或专门修补的PHP 5.0版本,并且要求启用线程安全性。请参阅runkit软件包中包含的README文件以获取更多信息。
为了Runkit_Sandbox_Parent功能的任何功能。必须在每个沙箱基础上启用支持,方法是启用父级上下文中的parent_access标志。
Example #1 Working with variables in a sandbox
<?php
$sandbox = new Runkit_Sandbox();
$sandbox['parent_access'] = true;
?>
访问父项的变量
就像使用沙箱变量访问一样,沙箱父项的变量可以作为Runkit_Sandbox_Parent类的属性读取和写入。可以使用parent_read设置(除了基本parent_access设置)启用对父代变量的读访问权限。通过parent_write设置启用写权限。
与sandbox 变量访问不同,变量作用域不仅限于全局变量。通过将parent_scope设置为适当的整数值,可以检查活动调用堆栈中的其他作用域。值为0(默认值)将指示全局范围的变量访问。1将在当前的sandbox代码块执行时指向任何变量作用域的变量访问。较高的值通过调用函数的函数返回,这些函数导致sandbox 执行试图访问其父变量的代码。
Example #2 Accessing parental variables
<?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);');
}
?>
上面的例子将输出:
string(6) "Global"
string(7) "three()"
string(5) "two()"
string(5) "one()"
string(6) "Global"
string(6) "Global"
调用父类的职能
就像sandbox访问一样,sandbox 可以访问其父母功能,只要启用了适当的设置即可。启用parent_call将允许调用 sandbox父范围可用的所有函数。语言结构分别由它们自己的设置控制:使用parent_echo启用print和echo 。die()和exit()通过parent_die启用。通过parent_eval启用eval(),而通过parent_include启用include,include_once,require和require_once 。
← Runkit_Sandbox
runkit_class_adopt →
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com