|
8.114.6 Runkit_Sandbox_Parent()
Classe Anti-Sandbox Runkit
[ Exemples avec ndbox_parent ] CVS uniquement
void
Runkit_Sandbox_Parent::__construct (
void
)
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 (controllé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 inclue 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.
| 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.
| 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
.
|