Classe Anti-Sandbox Runkit

# Runkit_Sandbox_Parent

(PECL runkit >= 0.7.0)

Runkit_Sandbox_Parent — Classe Anti-Sandbox Runkit

### Description

Runkit_Sandbox_Parent::__construct ( void ) : 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 (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;
?>`

### Accéder les Variables du Parent

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"

### Appel de Fonctions Parentes

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.