2015-04-13 1 views
9

Je suis venu à travers les trois lignes de code suivantes:

$_SERVER; 
$_ENV; 
$_REQUEST; 

Pour moi, il semble que ces trois lignes de code ne fait rien. Ils ne provoquent aucune erreur. Je sais ce que sont ces trois variables globales, je ne sais pas ce que font ces trois lignes de code. Quelqu'un peut-il m'éclairer?

Le fichier entier - dans le cas où il est pertinent:

<?PHP 
function register_global_array($sg) { 
    Static $superGlobals = array(
     'e' => '_ENV'  , 
     'g' => '_GET'  , 
     'p' => '_POST'  , 
     'c' => '_COOKIE' , 
     'r' => '_REQUEST' , 
     's' => '_SERVER' , 
     'f' => '_FILES' 
    ); 

    Global ${$superGlobals[$sg]}; 

    foreach(${$superGlobals[$sg]} as $key => $val) { 
     $GLOBALS[$key] = $val; 
    } 
} 
function register_globals($order = 'gpc') { 
    $_SERVER;  //See Note Below 
    $_ENV; 
    $_REQUEST; 

    $order = str_split(strtolower($order)); 
    array_map('register_global_array' , $order); 
} 
register_globals('GPCFRES'); 
?> 

Et non, il n'y a pas de note ci-dessous.

Ils font clairement quelque chose parce que si je les supprime, alors les erreurs de ligne foreach.

+4

[NOOP] (http://en.wikipedia.org/wiki/NOP) Si simple – Rizier123

+0

Alors pourquoi trois variables différentes à faire 3 fois par noop? – Graham

+4

Ces variables ne seront pas enregistrées sauf si elles sont utilisées. Si vous essayez d'utiliser '$ _GLOBALS ['_ SERVER']' avant d'utiliser '$ _SERVER', il retournera' null'. –

Répondre

4

Je ne suis pas sûr si votre question utilise le verbe approprié. $ _SERVER est une variable. Variables sont des conteneurs pour les valeurs seules, ils ne "font" rien. La variable $ GLOBALS est la racine d'une valeur de tableau dans la variable. La variable $ _SERVER et d'autres correspondent/mappent en tant que clés dans ce tableau. Exécution d'un print_r ou var_dump vous donnera plus de connaissances sur la façon dont cela est structuré

<?php echo '<pre>'. print_r($GLOBALS,1) . '</pre>'; ?> 

donne:

Array 
(
[_GET] => Array 
    (
    ) 

[_POST] => Array 
    (
    ) 

[_COOKIE] => Array 
    (
    ) 

[_FILES] => Array 
    (
    ) 

[_ENV] => Array 
    (
    ) 

[_REQUEST] => Array 
    (
    ) 

[_SERVER] => Array 
    (
     [HTTP_HOST] => fhqk.com 
     [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0 
     [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
     [HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.5 
     [HTTP_ACCEPT_ENCODING] => gzip, deflate 
     [HTTP_CONNECTION] => keep-alive 
     [HTTP_CACHE_CONTROL] => max-age=0 
     [PATH] => /sbin:/usr/sbin:/bin:/usr/bin 
     [SERVER_SIGNATURE] => Apache/2.2.15 (CentOS) Server at fhqk.com Port 80 

     [SERVER_SOFTWARE] => Apache/2.2.15 (CentOS) 
     [SERVER_NAME] => fhqk.com 
     [SERVER_ADDR] => 144.76.244.51 
     [SERVER_PORT] => 80 
     [REMOTE_ADDR] => 77.12.152.125 
     [DOCUMENT_ROOT] => /var/vhosts/fhqk.com/www 
     [SERVER_ADMIN] => [email protected] 
     [SCRIPT_FILENAME] => /var/vhosts/fhqk.com/www/informationtechnology/movico/index.php 
     [REMOTE_PORT] => 16183 
     [GATEWAY_INTERFACE] => CGI/1.1 
     [SERVER_PROTOCOL] => HTTP/1.1 
     [REQUEST_METHOD] => GET 
     [QUERY_STRING] => 
     [REQUEST_URI] => /informationtechnology/movico/ 
     [SCRIPT_NAME] => /informationtechnology/movico/index.php 
     [PHP_SELF] => /informationtechnology/movico/index.php 
     [REQUEST_TIME_FLOAT] => 1428950219.959 
     [REQUEST_TIME] => 1428950219 
    ) 

    [GLOBALS] => Array 
    *RECURSION* 
    ) 

Mise à jour: Je viens de lire le code dans votre poste et avait un flash de retour à la version php 3 L'enregistrement de super globals était courant le jour. Ce n'est pas quelque chose qui est fait en PHP moderne. Je recommande de supprimer ce code et refactoring pour corriger les erreurs qui se produisent en conséquence. L'enregistrement de super-globals, qu'ils soient vôtres ou non, peut conduire à une sécurité désagréable. défauts si elle n'est pas gérée correctement. register_globals a été déprécié.