2010-05-23 9 views
9

मैं बिना किसी समस्या के पथ बना सकता हूं, लेकिन मैं जानना चाहता हूं कि इनमें से कौन सी विधियां सबसे चट्टान ठोस और भरोसेमंद है और अधिकांश सर्वर पर काम करेगी।PHP में पूर्ण पथ बनाने के लिए सबसे अच्छी विधि? (अंदर सूचीबद्ध 3 विधियां देखें)

अभी मैं अपनी स्क्रिप्ट में विधि 1 का उपयोग कर रहा हूं और कुछ उपयोगकर्ताओं के पास पथ समस्याएं हैं। मैं बस उस विधि को चाहता हूं जो php के किसी भी संस्करण और लगभग किसी भी सर्वर कॉन्फ़िगरेशन पर काम करेगा।

1. <?php echo $_SERVER['DOCUMENT_ROOT']; ?> 

2. <?php echo getcwd(); ?> 

3. <?php echo dirname(__FILE__); ?> 

इस बारे में आप जो भी विशेषज्ञता प्रदान कर सकते हैं, उसके लिए बहुत बहुत धन्यवाद!

+0

वे सभी काम करेंगे, लेकिन वे अलग-अलग चीजें करते हैं, क्योंकि वे अलग-अलग चीजें करते हैं। आपकी क्या प्राप्त करने की इच्छा है? –

+0

उनके पास "पथ मुद्दे" क्या हैं? – webbiedave

+0

मूल रूप से मैं एक निश्चित स्थान पर एक फ़ाइल को इंगित करने का प्रयास कर रहा हूं और मैं चाहता हूं कि यूआरएल मान्य हो, चाहे वह कहां से कहलाता हो। उदाहरण के लिए: "/home/sitecom/public_html/myfile.php" तो मैं रूटपैथ को फ़ाइल में प्राप्त करना चाहता हूं जो कुछ ऐसा है: "/ home/sitecom/public_html" विधि 1 का उपयोग करके चाल चलती है ज्यादातर समय, लेकिन कुछ उपयोगकर्ताओं के लिए यह अपेक्षित काम नहीं कर रहा है। – mark

उत्तर

8

dirname(__FILE__) हमेशा मंच या वेबसर्वर पर ध्यान दिए बिना काम करेगा। DOCUMENT_ROOT सर्वर कॉन्फ़िगरेशन (अपाचे बनाम आईआईएस बनाम लाइटटैड बनाम nginex) के बीच अलग-अलग काम कर सकता है। cwd चयनित कार्य निर्देशिका दिखाता है जो सही हो सकता है या नहीं भी हो सकता है (आप इसे स्क्रिप्ट में बदल सकते हैं)। तो मैं सुझाव देंगे dirname(__FILE__)

+1

+1 पहली चीज़ जो मैं एक नई परियोजना में जोड़ता हूं वह है 'परिभाषित करें (' रूट ', रीयलपाथ (डायरनाम (__ फ़ाइल __))।'/');' – Alec

2
  • $ _SERVER सरणी उपयोगकर्ता डेटा रखती है और इसलिए भरोसा नहीं किया जा सकता है मंच (वेब ​​सर्वर) पर निर्भर है।

  • वर्तमान कार्य निर्देशिका अनुरोध के प्रवेश बिंदु पर निर्भर हो सकती है।

    cd ~/mypath/mypath2 
    php myscript.php 
    cd ~/mypath 
    php mypath/myscript.php 
    
  • IMHO securest समाधान का उपयोग करने dirname(__FILE__) या __DIR__ फ़ाइल पथ के रूप में (PHP 5.3 के बाद से) हमेशा एक ही (अपनी परियोजनाओं संरचना के सापेक्ष) होगा: इस उदाहरण (CLI) पर विचार करें।

+0

ठीक है, ऐसा लगता है कि सर्वसम्मति यह है कि उपनाम (__ FILE__) वैसे ही है जाना। मदद के लिए बहुत बहुत धन्यवाद! – mark

+1

यह कहना सही नहीं है कि $ _SERVER सभी उपयोगकर्ता उत्पन्न होते हैं। यह बहुत से सर्वर पक्ष से है, क्लाइंट नहीं (उदा। 'DOCUMENT_ROOT' मान भरोसा किया जा सकता है)। –

+0

आप इस पर DOCUMENT_ROOT प्रविष्टि (और निश्चित रूप से अन्य) के लिए इस पर सही हैं। लेकिन अभी भी $ _SERVER सरणी में चर हैं जिन्हें क्लाइंट/उपयोगकर्ता द्वारा धोखा दिया जा सकता है। और आवेदन के संदर्भ में कि डेटा विदेशी है और अंधेरे पर भरोसा नहीं किया जाना चाहिए। –

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