2009-12-24 7 views
7

के लिए पथ शामिल है defineदोनों * nix और Windows के लिए यह पथ शामिल है?PHP सेट करने के लिए उचित तरीका * निक्स और विंडोज

define('INCPATH', realpath(dirname(__FILE__)) . '/'); 

ऊपर शामिल पिछला आगे-स्लैश नोट करें। क्या फॉरवर्ड-स्लैश में ओएस के दोनों के लिए भी शामिल है/इसकी आवश्यकता है?

संपादित करें (जवाब के साथ अपडेट):

मैं क्या इकट्ठा कर सकते हैं से, नीचे मेरी कोड उचित तरीके से सार्वभौमिक रूप से दोनों के लिए एक/शामिल की आवश्यकता होती है पथ को परिभाषित करने के लिए है * nix और Windows OS की। नीचे दी गई टिप्पणियों में कुछ भी सही करने के लिए स्वतंत्र महसूस करें।

जो चीज मुझे उलझन में रखती है वह कई उदाहरण थे जिन्हें मैंने back-slashes (\)forward-slashes(/) में प्रतिस्थापन दिखाया था। नीचे दिए गए कुछ उत्तरों के आधार पर, यह अनावश्यक है।

तो अंतिम सही कोड (शुद्धतावादी के लिए) है:

define('INCPATH', realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR); 

कि कोड निम्नलिखित परिणाम का उत्पादन:

*nix: /path/to/the/file/

Windows: C:\Path To\the\file\

एक संक्षिप्त विवरण, काम कर रहे हमारे अंदर से (__FILE__) बाहर (realpath()):

FILE फ़ाइल का पूरा पथ और फ़ाइल नाम। हमेशा सिम्लिंक हल के साथ एक पूर्ण पथ होता है।

dirname() लौटाई गई स्ट्रिंग पथ किसी भी पिछला/घटक हटा दिया गया है। फ़ाइल नाम हटाने के लिए जिम्मेदार।

realpath() सफलता पर कैनोलिकीकृत (सामान्यीकृत/मानकीकृत) पूर्ण पथनाम देता है। परिणामस्वरूप पथ में कोई प्रतीकात्मक लिंक नहीं होगा, '/./' या '/../' घटक। मुझे लगता है कि यह पूर्णता के लिए शामिल है क्योंकि __FILE__ पहले से ही सिम्लिंक हल करता है। या शायद यह सापेक्ष पथ को हल करने के लिए शामिल है? किसी भी तरह से, यह हमारे लक्ष्य को मजबूत करने लगता है।

उत्तर

7

फॉरवर्ड स्लैश ओएस के दोनों के लिए काम करेगा, और यह जाने का तरीका है।

मुझे इसका पूर्ण संदर्भ नहीं मिला, लेकिन यह PHP मैनुअल में here और here जैसे कई स्थानों पर इंगित किया गया है। और, यह मेरे लिए काम करता है, एक विंडोज & लिनक्स उपयोगकर्ता।

आखिरकार, आप c:\\apache\\htdocs\\myapp/index.php, जैसे मिश्रित पथ निर्दिष्ट करना समाप्त कर सकते हैं और यह सब ठीक काम करता है।

+0

@ डेरेक, अच्छी जानकारी - धन्यवाद। मैं ओएस के दोनों कार्यों के ऊपर मेरी परिभाषा मानूंगा। – Jeff

+1

मुझे अक्सर आश्चर्य होता है कि बैकस्लाश का उपयोग क्यों किया जाता है, क्योंकि इससे बचने के सिरदर्द और आगे स्लैश का कारण बनता है। – Ether

2

कई लोगों के आश्चर्य के लिए, / विंडोज-एमएसडीओएस पर ठीक काम करता है। पथनामों के भीतर, यह ओपनवीएमएस पर भी काम करता है।

हालांकि, यदि आप पथ के लिए PHP के भीतर कुछ कर रहे हैं, तो एक सरणी एक स्ट्रिंग की तुलना में अधिक सुविधाजनक संरचना होगी।

$MYPATH = array ('.', '/usr/lib/', '/usr/share/lib'); 
4

वैकल्पिक रूप से आप PHP के पूर्वनिर्धारित निरंतर DIRECTORY_SEPARATOR, जो आप ओएस-विशिष्ट निर्देशिका सीमांकक दे देंगे उपयोग कर सकते हैं। http://www.php.net/manual/en/dir.constants.php भी देखें।

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

  • कोई संबंधित समस्या नहीं^_^