2014-04-07 9 views
12

मैं जो के रूप में सेट किया गया है मेरी साइट $ basePath कहा जाता है पर एक चर राशि शामिल :पीएचपी निरपेक्ष पथ

<link href="<?php echo $basePath; ?>include/assets/css/bootstrap.min.css"> 

मुझे उन लोगों के साथ कोई समस्या नहीं है और वे कहीं भी फ़ाइल में और जो भी फ़ोल्डर में ठीक काम करते हैं।

मैं एक निश्चित शामिल पृष्ठ निम्न पंक्ति है है:

<img src="<?php echo $basePath; ?>images/new_logo.png" alt="logo"/> 

और छवि ठीक पता चलता है। इसके बाद की रेखा बताती है:

<?php include($basePath.'include/assets/common/topMessages.php');?> 

लेकिन इसमें शामिल नहीं होता है। जब मैं इसे इस तरह से कोशिश करता हूं:

<?php include('../../include/assets/common/topMessages.php');?> 

यह काम करता है।

किसी को भी कोई विचार है कि क्या गलत हो सकता है?

+0

'echo' _include_ कुछ भी नहीं है ... – CBroe

+0

क्षमा करें, गलत लाइन कॉपी की गई। फिक्स्ड। – digicom

+5

मूल रूप से आपके वेबूट (यानी 'www.example.com/'आपकी वेबसाइट की जड़ है) और एक (यूनिक्स) फाइल सिस्टम की जड़ के बीच एक अंतर है। Webroot फाइल सिस्टम में एक पथ के लिए मैप किया गया है; अक्सर 'www.example.com /' को '/ var/www/example.com/http_docs/'जैसे कुछ पर मैप किया जाता है। आपका वेबसर्वर स्वचालित रूप से '/ a/b/c' से'/var/www/example.com/http_docs/a/b/c' के लिए किसी भी अनुरोध का अनुवाद करता है। हालांकि जब आप PHP के माध्यम से एक फ़ाइल शामिल करते हैं, तो वेबसर्वर को पथ का अनुवाद करने के लिए नहीं कहा जाता है, और इस तरह यह आपके फाइल सिस्टम में '/ a/b/c' की तलाश करता है, जो स्पष्ट रूप से मौजूद नहीं है। – Tularis

उत्तर

34

आप अपने वेब्रूट के लिए तुलनात्मक रूप से PHP फ़ाइलों को शामिल नहीं कर सकते हैं, क्योंकि यदि आप पहले अक्षर के रूप में स्लैश का उपयोग करते हैं, तो संदर्भ केवल आपके दस्तावेज़ रूट से बहुत गहरा होगा। तो, अपने basepath का उपयोग कर के बजाय, आप कुछ इस तरह कर सकता है:

<?php 
    $path = $_SERVER['DOCUMENT_ROOT']; 
    $path .= "/yourpath/yourfile.php"; 
    include_once($path); 
?> 
+0

यह काम किया। धन्यवाद ! – digicom

0

अपने सर्वर "DOCUMENT_ROOT" पॉप्युलेट नहीं है, तो आप की आवश्यकता हो सकती इस



require(str_repeat('../',(substr_count(getenv('SCRIPT_URL'),'/')-1))."/path/to/file.php"); 

मैं कोड की इस पंक्ति का उपयोग करता हूं। यह साइट पेड़ के "शीर्ष" पर वापस जाता है, फिर वांछित फ़ाइल पर जाता है।
domain.com/aaa/index.php
domain.com/bbb/ccc/ddd/index.php
domain.com/_resources/functions.php:
उदाहरण के लिए, मान लीजिए कि मैं इस फाइल पेड़ डालते हैं

मैं सिर्फ नकल चिपकाने

require(str_repeat('../',(substr_count(getenv('SCRIPT_URL'),'/')-1))."/_resources/functions.php"); 



आप इस कोड को कई बार उपयोग करने की आवश्यकता है, तो आप एक समारोह है कि "str_repeat रिटर्न बना सकते हैं द्वारा, से जहाँ भी मैं कर रहा हूँ functions.php फ़ाइल शामिल कर सकते हैं ('../',(substr_count(getenv('SCRIPT_URL'),'/')-1)) "भाग। फिर बस इस फ़ंक्शन को अपनी पहली फ़ाइल में शामिल करें। मेरे पास एक "startize.php" फ़ाइल है जिसे मैं प्रत्येक php पेज के शीर्ष पर शामिल करता हूं और जिसमें यह फ़ंक्शन शामिल है।अगली बार जब मेरे पास है, फ़ाइलों को शामिल करने मैं वास्तव में सिर्फ समारोह (नाम "path_back") का उपयोग करें:

require(path_back()."/_resources/another_php_file.php"); 
0

आप अपने php.ini के लिए एक include_path = ".:/home/myuser/mysite.com/" जोड़ सकते हैं या आप पहले अपने स्क्रिप्ट में कुछ इस तरह जोड़ सकते हैं include या require:

set_include_path(get_include_path() . ":/home/myuser/mysite.com/"); 

पहले एक सब अपनी वेबसाइट में चल रहा स्क्रिप्ट के लिए काम करेंगे।

दूसरा विकल्प केवल उस स्क्रिप्ट के लिए काम करेगा जिसमें कोड पर setincludepath है, शेष एप्लिकेशन के लिए यह तब तक काम नहीं करेगा जब तक आपके पास setincludepath जोड़ने वाली प्रत्येक स्क्रिप्ट में कोई ऑब्जेक्ट न हो।

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