Différences
Ci-dessous, les différences entre deux révisions de la page.
| 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.1 | info: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 "< | ||
| + | foreach ($_SESSION as $key=> | ||
| + | echo $key." " | ||
| + | //OR | ||
| + | echo '< | ||
| + | var_dump($_SESSION); | ||
| + | echo '</ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Recommandation ===== | ||
| + | |||
| + | Il est recommandé de ne pas utiliser de variables globales (//aka global register, register_global// | ||
| + | |||
| + | ===== Emulation ===== | ||
| + | |||
| + | http:// | ||
| + | |||
| + | === Emulation des Register Globals === | ||
| + | Ceci émulera la directive register_globals à On . | ||
| + | < | ||
| + | <?php | ||
| + | // Emulation de register_globals à on | ||
| + | if (!ini_get(' | ||
| + | $superglobals = array($_SERVER, | ||
| + | $_FILES, $_COOKIE, $_POST, $_GET); | ||
| + | if (isset($_SESSION)) { | ||
| + | array_unshift($superglobals, | ||
| + | } | ||
| + | foreach ($superglobals as $superglobal) { | ||
| + | extract($superglobal, | ||
| + | } | ||
| + | } | ||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | Ceci émulera register_globals à Off. Gardez à l' | ||
| + | < | ||
| + | <?php | ||
| + | // Emulation de register_globals à off | ||
| + | function unregister_GLOBALS() | ||
| + | { | ||
| + | if (!ini_get(' | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | // Vous pouvez vouloir modifier cela pour avoir une erreur plus jolie | ||
| + | if (isset($_REQUEST[' | ||
| + | die(' | ||
| + | } | ||
| + | |||
| + | // Les variables à ne jamais effacer | ||
| + | $noUnset = array(' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | |||
| + | $input = array_merge($_GET, | ||
| + | $_COOKIE, $_SERVER, | ||
| + | $_ENV, | ||
| + | isset($_SESSION) && is_array($_SESSION) ? $_SESSION : array()); | ||
| + | |||
| + | foreach ($input as $k => $v) { | ||
| + | if (!in_array($k, | ||
| + | unset($GLOBALS[$k]); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | unregister_GLOBALS(); | ||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | ===== Comment savoir quels fichiers sont concernés? ===== | ||
| + | |||
| + | Voici le script unix que j' | ||
| + | < | ||
| + | #identifier fichiers concernés | ||
| + | #chercher variables | ||
| + | find . -name " | ||
| + | #chercher variables correctement declarees, eg. $_GET, $_POST etc. | ||
| + | find . -name " | ||
| + | #extraire variables $_ de toutes les variables $ | ||
| + | diff _php_global_register_files t_ > t__ & mv t__ _php_global_register_files | ||
| + | #mise en forme | ||
| + | sed ' | ||
| + | </ | ||
| + | |||
| + | ===== Astuces pour tester ===== | ||
| + | ==== Astuce 1 ==== | ||
| + | |||
| + | < | ||
| + | AllowOverride all | ||
| + | |||
| + | puis dans Directory ajouter .htaccess avec | ||
| + | php_flag register_globals off | ||
| + | </ | ||
| + | ==== Astuce 2 ==== | ||
| + | |||
| + | Dans ce script vous devez modifier la récupération des valeurs | ||
| + | passées par vos scripts html. | ||
| + | |||
| + | < | ||
| + | Côté php: | ||
| + | Ajouter cette ligne en début de script php: | ||
| + | |||
| + | import_request_variables(" | ||
| + | |||
| + | Après l' | ||
| + | d' | ||
| + | |||
| + | $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/ | ||
| + | l' | ||
| + | mais que vous voulez enregistrer des variables dans l' | ||
| + | |||
| + | En utilisant le paramètre types, vous pouvez spécifier les variables que vous | ||
| + | voulez importer. Vous pouvez utiliser ' | ||
| + | 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' | ||
| + | exemple " | ||
| + | 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 " | ||
| + | variable ainsi générée s' | ||
| + | |||
| + | Si vous souhaitez importer d' | ||
| + | $_SERVER, considérez l' | ||
| + | |||
| + | 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' | ||
| + | par défaut. | ||
| + | |||
| + | Exemple 1. Exemple avec import_request_variables() | ||
| + | |||
| + | // Ce code va importer les variables GET et POST | ||
| + | // avec un préfixe " | ||
| + | import_request_variables(" | ||
| + | |||
| + | echo $rvar_foo; | ||
| + | ?> | ||
| + | |||
| + | </ | ||