(PECL runkit >= 0.7.0)
Runkit_Sandbox_Parent — Класс анти-песочницы для Runkit
Экземпляр Runkit_Sandbox_Parent, созданный внутри окружения Runkit_Sandbox предоставляет набор контролируемых средств для доступа к внешнему окружению из песочницы.
Замечание: Поддержка песочницы (необходима для runkit_lint(), runkit_lint_file(), и класса Runkit_Sandbox) доступна только начиная с версии PHP 5.1.0 или в специально пропатченных версиях PHP 5.0, а также требует потокобезопасной (thread safe) версии PHP. Для более подробной информации смотрите файл README, поставляемый с пакетом runkit.
Для использования Runkit_Sandbox_Parent необходимо включить опцию parent_access у используемого экземпляра песочницы.
Пример #1 Задействует возможность использовать Runkit_Sandbox_Parent в песочнице
<?php
$sandbox = new Runkit_Sandbox();
$sandbox['parent_access'] = true;
?>
Доступ к переменным родительского окружения может быть получен через свойства экземпляра Runkit_Sandbox_Parent по аналогии с Runkit_Sandbox. Доступ на чтение включается с помощью опции parent_read песочницы, на запись с помощью parent_write. Данные опции указываются в дополнении к parent_access.
В отличие от доступа к переменным Runkit_Sandbox, область видимости не ограничена глобальными переменными. Задать необхоимую область видимость из песочницы можно параметром parent_scope. Значение 0 (по умолчанию) означает доступ к глобальной области видимости. 1 указывает на область вызова песочницы. Последующие значения ведут на следующие уровни области видимости.
Пример #2 Доступ к переменным родительского окружения
<?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"
По аналогии с доступом к песочнице, из песочницы можно получить доступ к функциям в родительском окружении. Включение parent_call позволит из песочницы получить доступ к родительским функциям. Следующими функции и языковыми конструкциями можно управлять с помощью отдельных настроек: print и echo задействуются с помощью parent_echo; die() и exit() включаются через parent_die; eval() разрешается через parent_eval. Функции include, include_once, require, и require_once можно подключить, используя параметр parent_include.