首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Runkit_Sandbox_Parent

(PECL runkit >= 0.7.0)

Runkit_Sandbox_Parent - Runkit Anti-Sandbox类

描述

代码语言:javascript
复制
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

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?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);');
}
?>

上面的例子将输出:

代码语言:javascript
复制
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 →

扫码关注腾讯云开发者

领取腾讯云代金券