2011-04-12 16 views
8

$_SERVER['PATH_INFO'] और $_SERVER['ORIG_PATH_INFO'] के बीच क्या अंतर है? उन्हें इस्तेमाल कैसे करूं?

जब मैं print_r($_SERVER) चलाता हूं, PATH_INFO और ORIG_PATH_INFO सरणी में मौजूद नहीं हैं। क्यों नहीं? मेरे द्वारा उन्हें कैसे सक्षम किया जा सकता है?

मैंने उन पर PHP मैनुअल पढ़ा है, लेकिन फिर भी उन्हें समझ में नहीं आता है।

http://www.example.com/phpinfo.php/HELLO_THERE 

यह .php स्क्रिप्ट के बाद ही /HELLO_THERE हिस्सा है:

उत्तर

14

PATH_INFO चर अगर आप इस तरह एक PHP स्क्रिप्ट आह्वान केवल मौजूद है। यदि आप उस तरह के यूआरएल का आह्वान नहीं करते हैं, तो $_SERVER["PATH_INFO"] पर्यावरण चर नहीं होगा।

PORIG_ उपसर्ग कुछ असामान्य है। PATH_INFO एक मानक CGI- पर्यावरण चर है, और इसे कभी भी पूर्वनिर्धारित नहीं किया जाना चाहिए। तुमने ऐसा कहां पढ़ा? (लगभग PHP3/PHP4 के कुछ मुद्दे थे अगर आप के माध्यम से पीएचपी दुभाषिया लागू cgi-bin/- लेकिन शायद ही किसी को भी इस तरह के सेटअप आज किया गया है।)

संदर्भ के लिए: http://www.ietf.org/rfc/rfc3875

+0

मुझे लगता है कि यह 'ORIG_PATH_INFO' होना है। ऐसा लगता है कि कुछ सर्वर कॉन्फ़िगरेशन इसे 'PATH_INFO' के बजाय बनाते हैं। – Phil

+0

फिर यह निश्चित रूप से एक CGI हैंडलर सेटअप है। PHP कुछ सेटिंग्स में SCRIPT_FILENAME पर PATH_INFO का उपयोग करेगा, इसलिए सर्वर को path_info के वैकल्पिक नाम का उपयोग करने के लिए कॉन्फ़िगर किया गया है। – mario

1

PATH_INFO और ORIG_PATH_INFO शायद ही कभी इस्तेमाल किया जाता है। ये अनुरोध पथ (पहले/चालू से यूआरएल का हिस्सा) में कुछ भी संदर्भित करता है जो फ़ाइल के नाम के बाद आता है, और क्वेरी स्ट्रिंग। आम तौर पर, आपके पास एक यूआरएल में एक PATH_INFO नहीं होगा।

मुझे लगता है कि आप ORIG_PATH_INFO का मतलब है और PORIG_PATH_INFO नहीं। पथ जानकारी को mod_rewrite और PHP स्क्रिप्ट जैसे चीजों से छेड़छाड़ की जा सकती है। ORIG_PATH_INFO PATH_INFO है क्योंकि यह मूल अनुरोध में था, किसी भी पुनर्लेखन या स्ट्रिंग पर अन्य हेरफेर करने से पहले।

+8

'PATH_INFO' का उपयोग सिम्फनी और जेडएफ दोनों में किया जाता है, इसलिए मैं इसे "शायद ही कभी इस्तेमाल किया" – Phil

+0

कहूंगा, इसे जोड़ने के लिए मुझे' PATH_INFO' का उपयोग करने की आवश्यकता है और 'PATH_INFO' द्वारा थोड़ा गुमराह हो गया है, जाहिर है कि इसका उपयोग नहीं किया जा रहा है बहुत। आंतरिक रूप से इसका उपयोग करके वर्डप्रेस के आधार पर: https://github.com/WordPress/WordPress/blob/4.4.4/wp-includes/class-wp.php#L155। यह कहना उचित है कि इसका उपयोग किया गया है [एक बहुत भयानक] (http: //www.opensourcecms।com/general/cms-markethare.php) तो अगर आपको आवश्यकता हो तो इसका इस्तेमाल करें! –

+0

"... जो फ़ाइल के नाम के बाद आता है, और क्वेरी स्ट्रिंग।" - ध्यान दें कि PATH_INFO _before_ क्वेरी स्ट्रिंग आता है, इसके बाद नहीं। – MrWhite

2

5.2.4, PATH_INFO से पहले डिफ़ॉल्ट कॉन्फ़िगरेशन में स्पष्ट रूप से टूटा हुआ (सेट नहीं) था। शायद यह है।

https://bugs.php.net/bug.php?id=31892

पीएचपी मैनुअल का कहना है कि ORIG_PATH_INFO है: इससे पहले कि पीएचपी द्वारा संसाधित PATH_INFO 'की

मूल संस्करण।

संदर्भ:
http://php.net/manual/en/reserved.variables.server.php

6

इस प्रयास करें:

$path_info = !empty($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : (!empty($_SERVER['ORIG_PATH_INFO']) ? $_SERVER['ORIG_PATH_INFO'] : ''); 
+0

डे सेवर धन्यवाद। –

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