इनमें से कौन सा कोड तेज होगा?
$temp = $_REQUEST['s'];
या
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
इनमें से कौन सा कोड तेज होगा?
$temp = $_REQUEST['s'];
या
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
जवाबों:
$_REQUEST
डिफ़ॉल्ट रूप से, की सामग्री है $_GET
, $_POST
और $_COOKIE
।
लेकिन यह केवल एक डिफ़ॉल्ट है, जो निर्भर करता है variables_order
; और सुनिश्चित नहीं है कि आप कुकीज़ के साथ काम करना चाहते हैं।
अगर मुझे चुनना था, तो मैं शायद उपयोग नहीं करूंगा $_REQUEST
, और मैं चुनूंगा $_GET
या $_POST
- मेरे आवेदन के आधार पर क्या करना चाहिए (यानी एक या दूसरे, लेकिन दोनों नहीं) : आम तौर पर बोल:
$_GET
जब कोई आपके एप्लिकेशन से डेटा का अनुरोध कर रहा हो, तो आपको उसका उपयोग करना चाहिए ।$_POST
जब कोई जोर दे रहा है (डालने या अद्यतन, या हटाने) डेटा के लिए अपने आवेदन।किसी भी तरह से, प्रदर्शन के बारे में बहुत अंतर नहीं होगा: अंतर आपकी भाषा के बाकी हिस्सों की तुलना में नगण्य होगा।
पोस्ट बनाम जी.एस.टी.
1) GET और POST दोनों एक सरणी बनाते हैं (उदाहरण के लिए array (key => value, key2 => value2, key3 => value3, ...))। यह सरणी कुंजी / मान जोड़े रखती है, जहाँ कुंजियाँ प्रपत्र नियंत्रण के नाम हैं और मान उपयोगकर्ता के इनपुट डेटा हैं।
2) GET और POST दोनों को $ _GET और $ _POST के रूप में माना जाता है। ये सुपरग्लोबल्स हैं, जिसका अर्थ है कि वे हमेशा पहुंच योग्य होते हैं, गुंजाइश की परवाह किए बिना - और आप उन्हें किसी भी फ़ंक्शन, वर्ग या फ़ाइल से कुछ विशेष करने के बिना उपयोग कर सकते हैं।
3) $ _GET URL मापदंडों के माध्यम से वर्तमान स्क्रिप्ट को पारित चर का एक सरणी है।
4) $ _POST HTTP POST विधि के माध्यम से वर्तमान स्क्रिप्ट को पारित चर का एक सरणी है।
GET का उपयोग कब करें?
GET विधि के साथ एक फॉर्म से भेजी गई जानकारी सभी को दिखाई देती है (सभी परिवर्तनशील नाम और मान URL में प्रदर्शित होते हैं)। GET में सूचना भेजने की मात्रा की सीमा भी है। सीमा लगभग 2000 वर्ण है। हालाँकि, क्योंकि चरों को URL में प्रदर्शित किया जाता है, इसलिए पृष्ठ को बुकमार्क करना संभव है। यह कुछ मामलों में उपयोगी हो सकता है।
गैर-संवेदनशील डेटा भेजने के लिए GET का उपयोग किया जा सकता है।
नोट: पासवर्ड या अन्य संवेदनशील जानकारी भेजने के लिए कभी भी उपयोग नहीं किया जाना चाहिए!
POST का उपयोग कब करें?
POST विधि के साथ एक फॉर्म से भेजी गई जानकारी दूसरों के लिए अदृश्य है (सभी नाम / मान HTTP अनुरोध के निकाय के भीतर एम्बेडेड हैं) और भेजने की जानकारी की मात्रा पर कोई सीमा नहीं है।
इसके अलावा POST उन्नत कार्यक्षमता का समर्थन करता है जैसे कि सर्वर पर फाइल अपलोड करते समय मल्टी-पार्ट बाइनरी इनपुट के लिए समर्थन।
हालाँकि, क्योंकि चरों को URL में प्रदर्शित नहीं किया गया है, इसलिए पृष्ठ को बुकमार्क करना संभव नहीं है।
$ _GET क्वेरिस्ट्रिंग, या आपके URL से चर प्राप्त करता है।>
$ _POST एक POST विधि से चर को पुनः प्राप्त करता है, जैसे (आमतौर पर) रूप।
$ _REQUEST $ _GET और $ _POST का विलय है जहाँ $ _POST $ _GET से आगे निकल जाता है। मान्यताओं के लिए स्व-रीफ्रेंशियल रूपों पर $ _REQUEST का उपयोग करना अच्छा है।
GET
क्वेरी स्ट्रिंग से, POST
फॉर्म सबमिशन से)।
मैं उपयोग करने का सुझाव था $_POST
और $_GET
स्पष्ट रूप से।
$ _REQUEST का उपयोग करना वैसे भी उचित साइट डिज़ाइन के साथ अनावश्यक होना चाहिए, और यह कुछ डाउनसाइड्स के साथ आता है जैसे कि आप आसान CSRF/XSS
हमलों के लिए खुला छोड़ देते हैं और अन्य मूर्खताएं जो URL में डेटा संग्रहीत करने से आती हैं।
गति अंतर दोनों ही तरह से न्यूनतम होना चाहिए।
REQUEST का उपयोग करें। किसी को भी इस तरह के एक सरल ऑपरेशन की गति की परवाह नहीं है, और यह बहुत क्लीनर कोड है।
$_REQUEST
से गलत निष्कर्ष है। मेरा जवाब देखिए।
चिंता मत करो। लेकिन आप अभी भी दूसरा समाधान (प्लस वे चर मौजूदा में से कोई भी के लिए एक अतिरिक्त जांच), उपयोग करें, क्योंकि वहाँ के साथ सुरक्षा मुद्दों कर रहे हैं चाहिए $_REQUEST
(क्योंकि $_GET
और $_POST
है कि सरणी के लिए एकमात्र स्रोत नहीं हैं)।
$_REQUEST
कल के साथ समस्याओं के बारे में एक पोस्ट थी, मुझे विश्वास है। मुझे इसे खोजने दो।
संपादित करें : ओह ठीक है, सीधे एक पोस्ट नहीं, लेकिन यहाँ वैसे भी है: http://kuza55.blogspot.com/2006/03/request-variable-fixation.html
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
इसका उपयोग करें क्योंकि यह सुरक्षित है और यह ध्यान देने योग्य गति अंतर नहीं करेगा
$_REQUEST
लेकिन फिर भी उसी स्क्रिप्ट को किसी भी तरह से एक्सेस करने की अनुमति देता है (मेरे मामले में, एक ही स्क्रिप्ट का उपयोग अलग-अलग 'कार्यों' के साथ किया जाता है और कुछ बार $ _GET ठीक होगा, लेकिन दूसरी बार मुझे $ की आवश्यकता होगी _POST डेटा को छिपाने / सुरक्षित करने के लिए)।
एक हैकर के रूप में कुछ सुरक्षा चिंताएँ शामिल हैं जो एक कुकी सेट कर सकती हैं जो $ _POST या $ _GET मान को ओवरराइड करेगी। यदि आप संवेदनशील डेटा संभालते हैं, तो मैं $ _REQUEST का उपयोग करने की अनुशंसा नहीं करूंगा। - Xandor
आपको किसी मामले पर $_GET
वैकल्पिक उपयोग नहीं किया जा सकता है $_POST
।
कब ??
GET
जानकारी भेजने की मात्रा पर सीमा भी है। सीमा लगभग 2000 वर्ण है।
जब आप डेटा का उपयोग करके पुनः प्राप्त नहीं कर सकते हैं तो अन्य चीज़ों के कुछ मामले हैं $_POST
कब ?
रेस्ट सर्विस के लिए
`GET` - Provides a read only access to a resource.
`PUT` - Used to create a new resource.
उपयोग करने के लिए कुछ भी गलत नहीं है $_REQUEST
।
लेकिन ऐसा करने का तरीका $ _SERVER ['REQUEST_METHOD'] को स्पष्ट रूप से जांचना है, GET के लिए $ _POST के खाली होने पर निर्भर नहीं होना चाहिए।
$_SERVER['REQUEST_METHOD']
यह जांचने के लिए कि क्या स्क्रिप्ट को किसी एक के साथ बुलाया जाएगा, का उपयोग करने की अच्छी सलाह । लेकिन कहने के लिए कुछ भी गलत $_REQUEST
नहीं है 100% सच नहीं है। एक हैकर के रूप में कुछ सुरक्षा चिंताएँ शामिल हैं जो एक कुकी सेट कर सकती हैं जो $ _POST या $ _GET मान को ओवरराइड करेगी। यदि आप संवेदनशील डेटा संभालते हैं, तो मैं उपयोग करने की सलाह नहीं दूंगा $_REQUEST
।
$ _GET क्वेरिस्ट्रिंग, या आपके URL से चर प्राप्त करता है।>
$ _POST एक POST विधि से चर को पुनः प्राप्त करता है, जैसे (आमतौर पर) रूप।
$ _REQUEST $ _GET और $ _POST का विलय है जहाँ $ _POST $ _GET से आगे निकल जाता है। मान्यताओं के लिए स्व-रीफ्रेंशियल रूपों पर $ _REQUEST का उपयोग करना अच्छा है।
request_order
और इसमें कुकी मान भी हो सकते हैं, यही वजह है कि यह बहुत विश्वसनीय और न ही उपयोगी सुविधा है।
मैं दूसरी विधि का उपयोग करूंगा क्योंकि यह अधिक स्पष्ट है। अन्यथा आप नहीं जानते कि चर कहां से आ रहे हैं।
आपको वैसे भी GET और POST दोनों की जांच करने की आवश्यकता क्यों है? निश्चित रूप से एक या दूसरे का उपयोग केवल अधिक समझ में आता है।
GET
केवल एक आइटम (जैसे इसे स्थानांतरित करने के लिए) और POST
उनमें से कई के लिए (चेकबॉक्स के साथ एक रूप ...) का उपयोग किया जा रहा है।
मैं केवल कभी _GET या _POST का उपयोग करता हूं। मैं नियंत्रण रखना पसंद करता हूं।
ओपी में कोड के टुकड़े के बारे में मुझे जो पसंद नहीं है वह यह है कि वे उस जानकारी को छोड़ देते हैं जिस पर HTTP विधि का उपयोग किया गया था। और इनपुट सैनिटाइजेशन के लिए यह जानकारी महत्वपूर्ण है।
उदाहरण के लिए, यदि कोई स्क्रिप्ट उस फ़ॉर्म के डेटा को स्वीकार करती है जिसे DB में दर्ज किया जाना है, तो फॉर्म में POST का बेहतर उपयोग हुआ ( केवल भ्रामक कार्यों के लिए GET का उपयोग करें )। लेकिन अगर स्क्रिप्ट GET विधि के माध्यम से इनपुट डेटा प्राप्त करती है तो इसे (सामान्य रूप से) अस्वीकार कर दिया जाना चाहिए। मेरे लिए, इस तरह की स्थिति त्रुटि लॉग के लिए एक सुरक्षा उल्लंघन लिखने के लिए वारंट हो सकती है क्योंकि यह एक संकेत है कि कोई व्यक्ति कुछ पर कोशिश कर रहा है।
ओपी में कोड के टुकड़े के साथ, यह स्वच्छता संभव नहीं होगा।
$_POST
से सबसे बड़ा फायदा यह है कि सर्च इंजन क्रॉलर्स को ऐसा कुछ करने से रोका जाए: thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
मैं उपयोग करूंगा $_POST
, और $_GET
क्योंकि $_REQUEST
उनकी सामग्री से अलग प्रभाव नहीं पड़ता है variables_order
।
कब इस्तेमाल करना है $_POST
और $_GET
इस पर निर्भर करता है कि किस तरह के ऑपरेशन को अंजाम दिया जा रहा है। एक ऑपरेशन जो सर्वर से हैंडल किए गए डेटा को एक पोस्ट अनुरोध के माध्यम से किया जाना चाहिए, जबकि अन्य संचालन जीईटी अनुरोध के माध्यम से किया जाना चाहिए। एक उदाहरण बनाने के लिए, एक ऑपरेशन जो एक उपयोगकर्ता खाते को हटाता है, उसे उपयोगकर्ता द्वारा किसी लिंक पर क्लिक करने के बाद सीधे निष्पादित नहीं किया जाना चाहिए, जबकि एक छवि देखने के लिए एक लिंक के माध्यम से किया जा सकता है।
मैं इसका उपयोग करता हूं,
$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;
यह कथन मान्य करता है कि यदि $ _REQUEST में एक से अधिक पैरामीटर हैं ($ _REQUEST में पहला पैरामीटर अनुरोध uri होगा, जिसका उपयोग आवश्यकता पड़ने पर किया जा सकता है, कुछ PHP संकुल $ _GET नहीं लौटाते हैं, तो देखें कि यदि 1 से अधिक $ _GET पर जाएं, तो) डिफ़ॉल्ट, यह $ _POST होगा।
आप समय से पहले अनुकूलन कर रहे हैं। इसके अलावा, आपको वास्तव में कुछ विचार रखना चाहिए कि क्या जीईटी का उपयोग उन सामानों के लिए किया जाना चाहिए जो आप सुरक्षा कारणों से POST-ing हैं।
यह बदसूरत है और मैंने इसे कोड के लाइव को आगे बढ़ाने पर अंतिम समाधान के रूप में अनुशंसित नहीं किया है, लेकिन बाकी कार्यों का निर्माण करते समय, कभी-कभी एक 'कैच-ऑल' पैरामीटर धरनेवाला होना आसान होता है:
public static function parseParams() {
$params = array();
switch($_SERVER['REQUEST_METHOD']) {
case "PUT":
case "DELETE":
parse_str(file_get_contents('php://input'), $params);
$GLOBALS["_{$_SERVER['REQUEST_METHOD']}"] = $params;
break;
case "GET":
$params = $_GET;
break;
case "POST":
$params = $_POST;
break;
default:
$params = $_REQUEST;
break;
}
return $params;
}
कमांड लाइन के मापदंडों को संभालने के लिए या आपके आईडीई से जो भी आता है, उसे रचनात्मक रूप से भी कोई इसमें जोड़ सकता है। एक बार जब आप यह निश्चय कर लेते हैं कि एक दिया हुआ फंक्शन क्या कर रहा है, तो आप उस दिए गए कॉल के लिए एक उपयुक्त चुन सकते हैं ताकि यह सुनिश्चित किया जा सके कि आपको तैनाती संस्करण के लिए क्या चाहिए। यह मानता है कि 'REQUEST_METHOD' सेट है।
!isset($_REQUEST['s'])
।