PHP
类和函数 | Classes and Functions

Runkit_Sandbox_Parent

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 →