2015-04-13 4 views
9

मैं कोड की निम्न तीन लाइनों भर में आ गए हैं:

$_SERVER; 
$_ENV; 
$_REQUEST; 

मेरे लिए यह कोड के इन तीन लाइनों की तरह लगता है कुछ भी नहीं। वे किसी भी त्रुटि का कारण नहीं है।

मुझे पता है कि ये तीन वैश्विक चर क्या हैं, मुझे नहीं पता कि कोड की ये तीन पंक्तियां क्या कर रही हैं। क्या कोई मुझे प्रबुद्ध कर सकता है?

पूरी फ़ाइल - मामले में यह प्रासंगिक है:

<?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'); 
?> 

और नहीं, नीचे किसी भी टिप्पणी नहीं है।

वे स्पष्ट रूप से कुछ करते हैं क्योंकि यदि मैं उन्हें हटा देता हूं, तो फ़ोरैच लाइन त्रुटियां।

+4

[एनओओपी] (http://en.wikipedia.org/wiki/NOP) इतना आसान – Rizier123

+0

तो क्यों तीन अलग-अलग चर 3 गुना करने के लिए? – Graham

+4

उन चरों को तब तक पंजीकृत नहीं किया जाएगा जब तक उनका उपयोग नहीं किया जाता है। यदि आप '$ _SERVER' का उपयोग करने से पहले' $ _GLOBALS ['_ SERVER'] 'का उपयोग करने का प्रयास करते हैं, तो यह' शून्य 'वापस आ जाएगा। –

उत्तर

4

मुझे यकीन नहीं है कि आपका प्रश्न उचित क्रिया का उपयोग कर रहा है या नहीं। $ _SERVER एक चर है। Variables अकेले मूल्यों के लिए कंटेनर हैं वे कुछ भी नहीं करते हैं। $ GLOBALS चर चर में सरणी मान की जड़ है। इस सरणी में $ _SERVER चर और अन्य मिलान/मानचित्र के रूप में मानचित्र। एक print_r या var_dump चल रहा है तुम ऐसा कैसे संरचित है

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

का अधिक ज्ञान दे देंगे देता है:

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* 
    ) 

अद्यतन: मैं सिर्फ अपनी पोस्ट में कोड को पढ़ने और php संस्करण 3 करने के लिए एक फ्लैश वापस था सुपर ग्लोबल्स पंजीकृत करना दिन में आम था। यह ऐसा कुछ नहीं है जो आधुनिक PHP में किया जाता है। मैं इस कोड को हटाने और परिणामस्वरूप होने वाली किसी भी त्रुटि को ठीक करने के लिए प्रतिक्रिया करने की सलाह देता हूं। सुपर ग्लोबल्स को गीला करना वे आपका हो या अन्यथा कुछ ग़लत सुरक्षा हो सकती है। त्रुटियों को सही तरीके से संभाला नहीं जाता है। register_globals को हटा दिया गया है।

संबंधित मुद्दे