2009-09-14 11 views
8

मैंने वर्डप्रेस सोर्स कोड (PHP) का अध्ययन करते समय यह कोड देखा है, आप देख सकते हैं कि वे सभी मिलते हैं और मान को 1 अनुरोध सरणी में बदलते हैं।

अब मुझे पता है के रूप में यह, $ _GET और $ _POST array_merge() फ़ंक्शन का उपयोग किए बिना $ _REQUEST फोन करके पहले से ही उपलब्ध हैं, इसलिए किसी भी विचार क्यों वे ऐसा करेंगे?

$_REQUEST = array_merge($_GET, $_POST); 

उत्तर

17

ऐसा इसलिए है क्योंकि डिफ़ॉल्ट $_REQUEST$_GET, $_POST और $_COOKIE का विलय है। साथ ही, जिस क्रम में इन superglobals के चरमें विलय कर रहे हैं Ii सेटिंग variables_order पर निर्भर है और PHP 5.3.0 के रूप में भी request_order से प्रभावित हो सकता है। तो मेरा अनुमान है, कि डेवलपर यकीन है कि $_REQUEST केवल $_GET और $_POST के होते हैं बनाना चाहते थे, कि विशेष क्रम में विलय कर दिया कि अगर वह (उदाहरण के लिए एक साझा मेजबान पर) आरं सेटिंग की एक्सेस नहीं किया। आप देखते हैं, variables_order और request_order प्रति स्क्रिप्ट आधार पर कॉन्फ़िगर करने योग्य नहीं हैं।

एचटीएच

3

यह इसलिए है अगर आप GET चर और एक ही नाम के साथ एक पोस्ट चर है, यह एक मिल से अधिक पोस्ट चर का चयन करेंगे।

इसके अलावा आप $ _REQUEST चर में कुकीज़ नहीं चाहते हैं।

+2

दरअसल, यह $ _GET से $ _POST का चयन करेगा। array_merge मैनुअल: http://www.php.net/manual/en/function.array-merge.php – Havenard

+0

"[...] यह पोस्ट एक पर GET चर का चयन करेगा"। यह सच नहीं है; यह दूसरी तरह से है। इसी कुंजी के साथ बाद वाले सरणी के मान पूर्व मानों को ओवरराइट करेंगे। Http://www.php.net/array_merge –

+0

फिक्स्ड जानकारी देखें। –

1

मुझे नहीं पता कि यह क्यों किया गया था, जहां आपने इसे देखा था, लेकिन मैंने देखा है कि कुछ सरणी एक मूल्य या किसी अन्य में मानों पर किया गया है और आप उन परिवर्तनों को $ _REQUEST ताकि $ _REQUEST का उपयोग करने वाले किसी भी व्यक्ति को $ _POST या $ _GET चर के साथ किए गए परिवर्तनों के बावजूद परिवर्तन मिले।

इस Wordpress तरह की परिस्थितियों में आता है क्योंकि प्लगइन डेवलपर्स वे चर के किसी भी डेटा का उपयोग करने का उपयोग कर किया जा सकता है और Wordpress कोर यकीन है कि वे सभी एक ही डेटा प्राप्त करने के लिए की आवश्यकता होगी है।

आप इसे $ _REQUEST तक क्यों नहीं करना चाहते हैं? क्योंकि $ _REQUEST में अतिरिक्त जानकारी का एक टन शामिल है जो $ _POST और $ _GET नहीं है। हो सकता है कि आप उन सभी अतिरिक्त बिट्स पर अपनी प्रसंस्करण लागू नहीं करना चाहें।

6

$_REQUEST में $_GET, $_POST, और $_COOKIE सरणी डिफ़ॉल्ट रूप से सामग्री शामिल है। हो सकता है कि वे इसे से कुकी चर को बाहर करना चाहते हैं, क्योंकि आमतौर पर इसका उपयोग उस उद्देश्य के लिए नहीं किया जाता है।

+0

+1 बस एक ही चीज़ लिखना। – Havenard

+0

या, शायद सुरक्षा कारणों से, वे $ _REQUEST से कुकीज को खत्म करना चाहते हैं, एक साथ जीईटी और पोस्ट का उपयोग करने में सक्षम हो जाएं। महान दिमाग के लिए एक जैसे सोचने के लिए +1। – mauris

+0

हां, यह एक सामान्य एक्सएसएस हमला वेक्टर है, क्योंकि दुर्भावनापूर्ण जावास्क्रिप्ट उपयोगकर्ता नोटिस के बिना कुकी वर्र्स सेट कर सकता है, और PHP के डिफ़ॉल्ट जीपीसी ऑर्डर का अर्थ है कि ये कुकी मान जो भी उपयोगकर्ता फॉर्म में टाइप करते हैं, ओवरराइड करेंगे। – joelhardi

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