2011-12-29 15 views
70

मेरे पास मेरे PHP प्रोजेक्ट में यह फ़ोल्डर संरचना है। (इस रूप में Eclips में दिखाया गया है)एक PHP प्रोजेक्ट के रूट निर्देशिका पथ प्राप्त करें

-MySystem 
    +Code 
    +Data_Access 
    -Public_HTML 
     +css 
     +js 
     +Templates 
    -resources 

मुझे इस कोड की कोशिश

echo $_SERVER['DOCUMENT_ROOT'] 

उत्पादन

डी है:/कार्यक्षेत्र

मैं कैसे प्राप्त कर सकते हैं सिस्टम की रूट डायरेक्टरी का मार्ग (MySystem), एच के बिना फ़ोल्डर नाम ardcoding?

उत्तर

106

पीएचपी> = 5.3.0 लिए पीएचपी magic constants कोशिश

__DIR__ 

और अपना रास्ता अपेक्षाकृत बनाएं।

लिए पीएचपी < 5.3.0

dirname(__FILE__) 
+3

यह बहुत ही बढ़िया है, मैंने $ _SERVER ['DOCUMENT_ROOT'], dirname(), $ _SERVER ['SCRIPT_NAME'] आदि का प्रयास किया लेकिन यह उत्कृष्टता से काम किया! – webblover

+29

यह इस बात पर निर्भर करता है कि आप '__DIR__' का उपयोग कहां करते हैं। यह फ़ाइल के सापेक्ष है, इसलिए यदि किसी उप निर्देशिका में, किसी भी शामिल में, यह आपकी रूट निर्देशिका नहीं लौटाएगा। – Iris

+0

यह रूट निर्देशिका – inrsaurabh

3

तुम कोशिश कर सकते हैं: $ _SERVER [ 'PATH_TRANSLATED']

बोली:

Filesystem- (root- दस्तावेज़ नहीं) वर्तमान स्क्रिप्ट के आधार पर पथ, के बाद सर्वर किया है कोई वर्चुअल-टू-असली मैपिंग। नोट: PHP 4.3.2 के रूप में, PATH_TRANSLATED अब अपाचे 1 की स्थिति के विपरीत अपाचे 2 एसएपीआई के तहत पूर्ण रूप से सेट नहीं है, जहां यह पर सेट है जैसा कि SCRIPT_FILENAME सर्वर चर के समान मान है जब यह अपाचे द्वारा पॉप्युलेट नहीं किया गया है । यह परिवर्तन CGI विनिर्देश का अनुपालन करने के लिए किया गया था कि PATH_TRANSLATED केवल तभी मौजूद होना चाहिए जब PATH_INFO परिभाषित किया गया हो। Apache 2 उपयोगकर्ता AcceptPathInfo = PATH_INFO को परिभाषित करने के लिए httpd.conf के अंदर उपयोग कर सकते हैं।

स्रोत: php.net/manual

41

का प्रयास करते हैं आप का कहना है कि

$_SERVER['DOCUMENT_ROOT'] 

इस पथ है:

D:/workspace 

फिर D: आप के लिए क्या देख रहे है , है न? उस मामले में आप स्लैश द्वारा स्ट्रिंग विस्फोट और पहले एक वापसी कर सकते हैं:

$pathInPieces = explode('/', $_SERVER['DOCUMENT_ROOT']); 
echo $pathInPieces[0]; 

हो जाएगा ताकि उत्पादन सर्वर के रूट निर्देशिका।

अद्यतन: जब आप हार्डकोडेड स्लैश के बजाय लगातार DIRECTORY_SEPARATOR का उपयोग करें ('/') इस कोड को भी Windows के तहत काम कर रहा है।

अद्यतन 2:$_SERVER वैश्विक चर हमेशा उपलब्ध नहीं है। उदाहरण के लिए कमांड लाइन (क्ली) पर। तो आपको $_SERVER['DOCUMENT_ROOT'] के बजाय __DIR__ का उपयोग करना चाहिए। __DIR__ php फ़ाइल के पथ को ही लौटाता है।

getcwd()

वर्तमान कार्यशील निर्देशिका हो जाता है:

+2

नहीं देगा और आप '_SERVER ['DOCUMENT_ROOT'] के बजाय' __DIR__' का उपयोग कर सकते हैं। – Armin

+0

क्षमा करें अगर मैंने अपने प्रश्न को सही तरीके से समझाया नहीं है, तो मुझे वास्तव में क्या चाहिए 'डी:/वर्कस्पेस/माईसिस्टम' – Nalaka526

+0

यदि आपकी रूट निर्देशिका पथ/var/public/www के रूप में है "तो इस विधि का उपयोग करके पहली स्ट्रिंग सरणी खाली होगी (0)/(1)/(2)/(3)। रूट दूसरी स्ट्रिंग $ pathInPieces [1] – tbradley22

22

पीएचपी समारोह का उपयोग करें।

1
echo $pathInPieces = explode(DIRECTORY_SEPARATOR , __FILE__); 
echo $pathInPieces[0].DIRECTORY_SEPARATOR; 
4

मैं जिस तरह से Wordpress ध्यान खींचना चाहते हैं इस संभालता है:

define('ABSPATH', dirname(dirname(__FILE__)) . '/'); 

Wordpress के रूप में बहुत भारी वेब पर प्रयोग किया जाता है और यह भी ठीक काम करता है स्थानीय स्तर पर मैं इस पद्धति में बहुत विश्वास है।

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