2013-07-09 4 views
5

लापता http://www.php.net/manual/en/reserved.variables.globals.php के अनुसार:

एक साहचर्य सरणी सभी चर जो वर्तमान में स्क्रिप्ट के वैश्विक दायरे में परिभाषित कर रहे हैं के संदर्भों वाले।

तो, निम्नलिखित कोड है कि $ वैश्विक वर _SERVER, _ENV है प्रदर्शित करना चाहिए _REQUEST कुंजी (अगर यह php.ini में variables_order में सक्षम किया गया है) और:

var_dump($GLOBALS); 

परिणाम है:

  • nginx + php-एफ पी एम के तहत: लापता _SERVER, _ENV, _REQUEST
  • CLI के तहत: _ENV लापता, _REQUEST

हम्म .. शायद वहाँ इस व्यवहार के बारे डॉक्स में बराबर है? मैं हर चर के लिए हर पृष्ठ के माध्यम से देखा है:

और मुझे कोई मिल गया है इस तरह के व्यवहार के बारे में उल्लेख है। ऐसा क्यों काम करता है?

मैंने http://www.dotdeb.org/ रेपो से डेबियन पैकेज का उपयोग करके PHP स्थापित किया है (कुछ भी मैन्युअल रूप से संकलित नहीं किया गया था) ... वर्तमान में nginx + php5-fpm के साथ चल रहा है। क्या यह एक php बग है?

+0

और यदि आपने 'var_dump ($ _ सर्वर) किया है, तो क्या होगा? – HamZa

+1

मुझे यकीन नहीं है, लेकिन ['variables_order'] (http://www.php.net/manual/en/ini.core.php#ini.variables-order) इनआई सेटिंग –

+4

$ _SERVER भी देखें एक सुपरग्लोबल वैरिएबल, जो $ ग्लोबल्स के समान है, यही कारण है कि यह $ ग्लोबल्स में संग्रहीत नहीं है: 'यह एक' सुपरग्लोबल 'है, या स्वचालित वैश्विक, चर। इसका मतलब यह है कि यह एक स्क्रिप्ट में सभी क्षेत्रों में उपलब्ध है।वैश्विक $ चर करने की कोई आवश्यकता नहीं है; इसे फ़ंक्शंस या विधियों के भीतर एक्सेस करने के लिए। 'और '$ _SERVER एक सरणी है जिसमें हेडर, पथ और स्क्रिप्ट स्थान जैसी जानकारी होती है। इस सरणी में प्रविष्टियां वेब सर्वर द्वारा बनाई गई हैं। इस बात की कोई गारंटी नहीं है कि प्रत्येक वेब सर्वर इनमें से कोई भी प्रदान करेगा; सर्वर कुछ छोड़ सकते हैं, या दूसरों को यहां सूचीबद्ध नहीं कर सकते हैं ... ' –

उत्तर

6

मैं php.net वेबसाइट पर एक बग बना लिया है, और php टीम ने उत्तर दिया: https://bugs.php.net/bug.php?id=65223

सारांश:

यह एक बग नहीं है। सुपर-ग्लोबल्स (उर्फ ऑटो ग्लोबल्स) को को प्रदर्शन कारणों से डिफॉल्ट रूप से प्रतीकों के लिए जोड़ा नहीं जाता है जब तक कि पार्सर आवश्यकता को न देखे। अर्थात

<?php $_SERVER; print_r($GLOBALS); ?>

यह सूची जाएगा। तुम भी php.ini में इस auto_globals_jit का उपयोग कर नियंत्रित कर सकते हैं: http://www.php.net/manual/en/ini.core.php#ini.auto-globals-jit

धन्यवाद php टीम तो इतनी तेजी से जवाब देने के!

+0

प्रतिक्रिया के लिए धन्यवाद – thibauts

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