(PECL runkit >= 0.7.0)
Runkit_Sandbox_Parent — Classe Anti-Sandbox Runkit
L'instanciation de la classe Runkit_Sandbox_Parent à l'intérieure d'un environnement sandbox créé à partir de la classe Runkit_Sandbox fournit certains moyens (contrôlés) pour un sandbox fils pour accéder à son parent.
Note: Support Sandbox (requis pour runkit_lint(), runkit_lint_file() et la classe Runkit_Sandbox) n'est seulement disponible qu'avec PHP 5.1 ou les versions de PHP 5.0 spécialement patché et nécessite que la protection de thread soit activée. Voyez le fichier README inclus dans le paquetage runkit pour plus d'informations.
Afin de faire fonctionner une des fonctionnalités de
Runkit_Sandbox_Parent, le support doit être activé
sur une base de chaque sandbox en activant le drapeau
parent_access
à partir du contexte parent.
Exemple #1 Travailler avec des variables dans un sandbox
<?php
$sandbox = new Runkit_Sandbox();
$sandbox['parent_access'] = true;
?>
Comme les accès des variables de sandbox, les variables de parent sandbox
devraient être lues et écrites à partir des propriétés de la classe
Runkit_Sandbox_Parent. L'accès en lecture aux
variables parentes devraient être activé avec la configuration
parent_read
(en plus de la base de configuration
parent_access
). L'accès en écriture est activé avec la
configuration parent_write
.
La portée des variables est différente de l'accès aux variables enfants de
sandbox; elle n'est pas limitée au variables globales seulement. En
configurant la configuration parent_scope
pour un entier
approprié, les autres portées dans la pile active pourraient être
inspectée. Une valeur de 0 (Défaut) autorisera l'accès direct aux variables
dans la portée globale. 1 pointera l'accès des variables à n'importe
quelles variables dont la portée était active au moment ou le bloc courant
du code sandbox était exécuté. Des valeurs plus élevées font reculer à travers
les fonctions qui ont appelées d'autres fonctions qui menent au code sandbox
en train d'être exécuté et qui essaie d'accéder à ses propres variables
parentes.
Exemple #2 Accès aux variables parentes
<?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 un() {
$test = "un()";
two();
}
function deux() {
$test = "deux()";
three();
}
function trois() {
$test = "trois()";
$GLOBALS['php']->eval('var_dump($PARENT->test);');
}
?>
L'exemple ci-dessus va afficher :
string(6) "Global" string(7) "trois()" string(5) "deux()" string(5) "un()" string(6) "Global" string(6) "Global"
Comme l'accès avec sandbox, un sandbox peut accéder ses fonctions parentes
si les configurations adéquates ont été activées.
L'activation de parent_call
autorisera le sandbox
d'appeler toutes les fonctions disponibles à la portée parente. Les
constructions de langage sont chacune contrôlées par ses propres
configurations :
print
et echo sont
activées avec parent_echo
.
die() et
exit() sont
activées avec parent_die
.
eval() est activées avec parent_eval
tandis que include,
include_once,
require et
require_once
sont activées avec parent_include
.