info:myphp:php_variables_globales

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
info:myphp:php_variables_globales [2026/03/05 09:57] – supprimée - modification externe (Date inconnue) 127.0.0.1info:myphp:php_variables_globales [2026/03/05 09:57] (Version actuelle) – ↷ Page déplacée de info:php:php_variables_globales à info:myphp:php_variables_globales radeff
Ligne 1: Ligne 1:
 +====== PHP variables ======
 +===== variables globales / Register global =====
 +
 +<code php>
 +session_start;
 +echo "<h3> PHP List All Session Variables</h3>";
 +foreach ($_SESSION as $key=>$val)
 +echo $key." ".$val."<br/>";
 +//OR
 +echo '<pre>';
 +var_dump($_SESSION);
 +echo '</pre>';
 +</code>
 +
 +
 +
 +===== Recommandation =====
 +
 +Il est recommandé de ne pas utiliser de variables globales (//aka global register, register_global//), 
 +
 +===== Emulation =====
 +
 +http://www.nexen.net/docs/php/annotee/faq.misc.registerglobals.php register_globals
 +
 +=== Emulation des Register Globals ===
 +Ceci émulera la directive register_globals à On .
 +<code>
 +<?php
 +// Emulation de register_globals à on
 +if (!ini_get('register_globals')) {
 +    $superglobals = array($_SERVER, $_ENV,
 +        $_FILES, $_COOKIE, $_POST, $_GET);
 +    if (isset($_SESSION)) {
 +        array_unshift($superglobals, $_SESSION);
 +    }
 +    foreach ($superglobals as $superglobal) {
 +        extract($superglobal, EXTR_SKIP);
 +    }
 +}
 +?>
 +</code>
 +
 +Ceci émulera register_globals à Off. Gardez à l'esprit que ce code doit être appelé au tout début de votre script.
 +<code>
 +<?php
 +// Emulation de register_globals à off
 +function unregister_GLOBALS()
 +{
 +    if (!ini_get('register_globals')) {
 +        return;
 +    }
 +
 +    // Vous pouvez vouloir modifier cela pour avoir une erreur plus jolie
 +    if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) {
 +    die('Tentative d\'effacement des GLOBALS détectée');
 +    }
 +
 +    // Les variables à ne jamais effacer
 +    $noUnset = array('GLOBALS',  '_GET',
 +    '_POST',    '_COOKIE',
 +    '_REQUEST', '_SERVER',
 +    '_ENV',     '_FILES');
 +
 +    $input = array_merge($_GET,    $_POST,
 +    $_COOKIE, $_SERVER,
 +    $_ENV,    $_FILES,
 +    isset($_SESSION) && is_array($_SESSION) ? $_SESSION : array());
 +
 +    foreach ($input as $k => $v) {
 +        if (!in_array($k, $noUnset) && isset($GLOBALS[$k])) {
 +            unset($GLOBALS[$k]);
 +        }
 +    }
 +}
 +
 +unregister_GLOBALS();
 +?> 
 +</code>
 +
 +===== Comment savoir quels fichiers sont concernés? =====
 +
 +Voici le script unix que j'utilise:
 +<code>
 +#identifier fichiers concernés
 +#chercher variables
 +find . -name "*.php*" -exec egrep -l '\$' {} > _php_global_register_files \;
 +#chercher variables correctement declarees, eg. $_GET, $_POST etc.
 +find . -name "*.php*" -exec egrep -l '\$_[A-Z]' {} > t_ \;
 +#extraire variables $_ de toutes les variables $
 +diff _php_global_register_files t_ > t__ & mv t__ _php_global_register_files
 +#mise en forme
 +sed 's|^> ||g' _php_global_register_files > t_ && mv t_ _php_global_register_files
 +</code>
 +
 +===== Astuces pour tester =====
 +==== Astuce 1 ====
 +
 +<code>
 +AllowOverride all
 +
 +puis dans Directory ajouter .htaccess avec
 +php_flag register_globals off
 +</code>
 +==== Astuce 2 ====
 +
 +Dans ce script vous devez modifier la récupération des valeurs
 +passées par vos scripts html.
 +
 +<code>
 +Côté php:
 +Ajouter cette ligne en début de script php:
 +
 +import_request_variables("GP", "v_");
 +
 +Après l'interprétation de cette ligne vous êtes en mesure
 +d'utiliser vos variables et leurs contenu:
 +
 +$v_toto contient la donnée de toto passée par le POST effectué.
 +
 +Le paramètre GP indique que vous pouvez passer par GET ou POST,
 +cette fonction accepte les deux modes.
 +
 +Remarque: vous pouvez accéder à toutes vos valeurs que votre script
 +envoie:
 +
 +$v_toto
 +$v_tata
 +$v_titi
 +
 +ect...
 +MANUEL PHP:
 +
 +Description
 +bool import_request_variables ( string types [, string prefix] )
 +
 +import_request_variables() importe les variables GET/POST/Cookie dans
 +l'environnement global. C'est pratique si vous avez désactivé register_globals,
 +mais que vous voulez enregistrer des variables dans l'environnement global.
 +
 +En utilisant le paramètre types, vous pouvez spécifier les variables que vous
 +voulez importer. Vous pouvez utiliser 'G', 'P' et 'C' pour désigner
 +respectivement GET, POST et Cookie. Ces caractères ne sont pas sensibles à la
 +casse, et vous pouvez les combiner entre eux. POST inclut les fichiers
 +téléchargés. Notez que l'ordre des lettres est important. En utilisant par
 +exemple "GP", les variables de POST écraseront par les variables de GET, ayant
 +le même nom. Toute lettre autre que G, P ou C, est ignorée.
 +
 +Le paramètre prefix est utilisé comme un préfixe de nom de variable, qui sera
 +ajoutée au début de tous les noms de variables importées. Si vous avez par
 +exemple une variable GET du nom de "userid", et utilisez le préfixe "pref_", la
 +variable ainsi générée s'appellera $pref_userid.
 +
 +Si vous souhaitez importer d'autres variables dans l'environnement global, comme
 +$_SERVER, considérez l'utilisation de la fonction extract().
 +
 +Note : Bien que le paramètre prefix soit optionnel, il sera généré une
 +alerte E_NOTICE si vous ne spécifiez pas de préfixe, ou si vous utilisez une
 +chaîne vide comme préfixe. C'est potentiellement un trou de sécurité. Les
 +alertes de ce niveau ne sont pas affichées si vous utilisez le niveau d'erreur
 +par défaut.
 +
 +Exemple 1. Exemple avec import_request_variables()
 +
 +// Ce code va importer les variables GET et POST
 +// avec un préfixe "rvar_"
 +import_request_variables("gP", "rvar_");
 +
 +echo $rvar_foo;
 +?>
 +
 +</code>