2011-07-16 17 views
10

मेरे पास एक php ढांचा है और मैंने पोर्टेबिलिटी को अनुकूलित करने के लिए $_SERVER['SCRIPT_NAME'] का उपयोग किया। इस तरह मुझे अब पथ को मैन्युअल रूप से कॉन्फ़िगर करने की आवश्यकता नहीं है।

$this->base_url = str_replace('index.php', '', 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']); 

लेकिन मैंने देखा है कि $_SERVER['SCRIPT_NAME'] और $_SERVER['PHP_SELF'] रिटर्न ठीक उसी स्ट्रिंग। तो, क्या अंतर है? मुझे उनके बीच कैसे चयन करना चाहिए?

+0

मैनुअल आत्म व्याख्यात्मक से अधिक है , http://in2.php.net/manual/en/reserved.variables.server।php, हालांकि आपकी स्क्रिप्ट कारकों की संख्या से सीमित हो सकती है, एक वेब होस्ट ने आपके पर्यावरण को इस तरह से स्थापित किया हो सकता है कि आप स्क्रिप्टनाम इंडेक्स, बीटीडब्ल्यू के लिए वास्तविक फाइल सिस्टम पथ नहीं देख पाएंगे, मैं आरटीएफएम की बजाय, गुगलिंग के बाद, आप इसे स्वयं करके अधिक सीखते हैं :-) – Kumar

+1

मैंने यहां पूछने से पहले कई बार पढ़ा। मैं अन्यथा यहां नहीं पूछा होता। –

+0

कृपया मेरी टिप्पणी से नाराज न हों, मैं बस मैनुअल कहता हूं, आपको यह देखने में प्रसन्नता हो रही है कि आपको अपना जवाब मिल गया है, मैं इसे अपने आप में से अधिक कर रहा हूं, ज्यादातर मुझे लगता है कि फैशन – Kumar

उत्तर

9

अंतर

http://sandbox.phpcode.eu/g/3e38d.php/test 

स्क्रिप्ट का नाम दर्ज करने के लिए निरपेक्ष पथ है।

PHP_SELF स्क्रिप्ट आप अभी हैं

यह (.php के बाद "पथ" के साथ) $_SERVER['SERVER_NAME'] की तरह और $_SERVER['HTTP_HOST']

http://sandbox.phpcode.eu./g/f5093.php 

http://sandbox.phpcode.eu/g/f5093.php 

स्थान एक अंतर

+1

यह वास्तव में बहुत उपयोगी था (: –

+1

और आपका प्रश्न भी! :) – genesis

+0

"स्क्रिप्ट नाम abs है फ़ाइल के लिए olute पथ। "-' SCRIPT_NAME' रूट-रिश्तेदार है, _absolute नहीं। 'SCRIPT_FILENAME' में एक पूर्ण पथ है (हालांकि यह आवश्यक नहीं है कि 'SCRIPT_NAME' के समान फ़ाइल)। – MrWhite

7
SCRIPT_NAME 

वर्तमान स्क्रिप्ट के पथ शामिल हैं। यह उन पृष्ठों के लिए उपयोगी है जिन्हें स्वयं को इंगित करने की आवश्यकता है। __FILE__ निरंतर वर्तमान (i.e. शामिल) फ़ाइल का पूरा पथ और फ़ाइल नाम शामिल है।

PHP_SELF 

वर्तमान में क्रियान्वित स्क्रिप्ट का फ़ाइल नाम, दस्तावेज़ जड़ के सापेक्ष। उदाहरण के लिए, http://example.com/test.php/foo.bar पते पर एक स्क्रिप्ट में $_SERVER['PHP_SELF']/test.php/foo.bar होगा। __FILE__ निरंतर वर्तमान (i.e. शामिल) फ़ाइल का पूरा पथ और फ़ाइल नाम शामिल है। यदि PHP कमांड लाइन प्रोसेसर के रूप में चल रहा है तो इस चर में PHP 4.3.0 के बाद से स्क्रिप्ट नाम शामिल है। पहले यह उपलब्ध नहीं था।

स्रोत php.net

एक चीज नहीं है:

चेक बाहर http://www.yoursite.com/example/index.php/dir/test

$_SERVER['PHP_SELF'] == '/example/index.php/dir/test';

में $_SERVER['SCRIPT_NAME'] == '/example/index.php';

ईटीए में: की कोशिश की mysel च

स्थानीय होस्ट http://127.0.0.1:8887/index.php/dir/test

पर इस कोशिश की
echo $_SERVER['PHP_SELF'] . "<br />"; 
echo $_SERVER['SCRIPT_NAME']; 

आउटपुट है:

/index.php/dir/test 
/index.php 
+0

यह उदाहरण है कि '/ dir/test' लौटाता है स्पष्ट रूप से गलत है ... –

+0

नहीं, यह गलत नहीं है। यहां देखें: http://sandbox.phpcode.eu/g/3e38d.php/परीक्षण – genesis

+0

ध्यान दें कि यहां उदाहरण फ़ाइल नाम 'index.php' को छोड़ दिया गया है और इसके और सर्वर के नाम के बीच क्या होता है। @genesis लिंक में यह केवल '/ g/3e38d.php/test' को वापस लौटने के बजाय'/g/3e38d.php/test' देता है। test' –

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