2012-01-11 7 views
30

मुझे मूल निर्देशिका से और अन्य उप-निर्देशिकाओं से एक फ़ाइल को उप-निर्देशिका में शामिल करने की आवश्यकता है। मैंने इसे शामिल करके पहले किया है ('/ rootdirectory/file.php'); लेकिन अब यह काम नहीं करेगा।अभिभावक या अन्य निर्देशिका से फ़ाइलें शामिल करें

बस सोच रहा है कि मैं यह कैसे कर सकता हूं, धन्यवाद।

include('/forums/groups.php'); 

यह मुझे इस त्रुटि दे रही है (पेज अभी भी चलाता है):

चेतावनी: में शामिल हैं (/forums/groups.php) [समारोह

यहाँ मेरी सटीक लाइन है। शामिल]: खुली धारा में विफल: सी में ऐसी कोई फ़ाइल या निर्देशिका नहीं: \ xampp \ htdocs \ मंच \ ब्लॉग \ posts.php लाइन

चेतावनी: में शामिल हैं() [function.include]: '/forums/groups.php' खोलने में असफल (include_path = '.; सी: \ xampp \ php \ PEAR') सी: \ xampp \ htdocs \ मंचों \ ब्लॉग \ 3 लाइन पर posts.php

+0

एक अक्सर इस त्रुटि में चलाता है, और जल्दी से इसे का निवारण करने के लिए, निम्न चरणों का पालन करें: stackoverflow.com/a/36577021/2873507 –

उत्तर

58

include() और उसके रिश्तेदारों फाइल सिस्टम पथ, दस्तावेज़ जड़ के सापेक्ष वेब रास्तों नहीं ले। मूल निर्देशिका पाने के लिए, ../

include('../somefilein_parent.php'); 
include('../../somefile_2levels_up.php'); 

का उपयोग आप एक / के साथ शुरू करते हैं, तो एक पूर्ण प्रणाली फ़ाइल पथ का उपयोग किया जाएगा:

// Full absolute path... 
include('/home/username/sites/project/include/config.php'); 
+3

की कोशिश की यह कर और यह सवाल के संबंध में काम नहीं करता है क्योंकि मेरे पास एक ही समस्या है। – ubique

+0

@ubique अगर यह आपके एप्लिकेशन में पोस्ट किए गए बिल्कुल ठीक से काम नहीं करता है, तो ऐसा इसलिए है क्योंकि आपकी फाइल सिस्टम लेआउट आपकी अपेक्षाओं से भिन्न हो सकता है, क्योंकि यह गलत नहीं है। उन फ़ाइलों के बारे में जानकारी पोस्ट करें जिन्हें आप सहायता के लिए शामिल करने का प्रयास कर रहे हैं। –

+1

@ubique .. या आपकी स्क्रिप्ट ने वर्तमान कार्यशील निर्देशिका को बदल दिया है। getcwd() यह देखने के लिए कि यह क्या है। –

2

एक स्लेश के साथ शुरुआत किसी भी पथ एक निरपेक्ष पथ हो जाएगा। सर्वर के रूट-फ़ोल्डर से और आपके दस्तावेज़ रूट के रूट-फ़ोल्डर से नहीं। आप मूल निर्देशिका में जाने के लिए ../ का उपयोग कर सकते हैं।

+0

मैंने इस लगातार त्रुटि के लिए समस्या निवारण चेकलिस्ट शुरू कर दी है: stackoverflow.com/a/36577021/2873507 –

4

इस बात पर निर्भर करता है कि आप जिस फ़ाइल से शामिल करने का प्रयास कर रहे हैं वह स्थित है।

उदाहरण:

/rootdir/pages/file.php

/someotherDir/index.php

यदि आप index.php में निम्नलिखित लिखा है: include('/rootdir/pages/file.php'); यह त्रुटि क्योंकि यह प्राप्त करने की कोशिश करेगी:

/someotherDir/rootdir/pages/file.php निश्चित रूप से कौन सा मौजूद नहीं है ...

<? 
function absolute_include($file) 
     { 
     /* 
     $file is the file url relative to the root of your site. 
     Yourdomain.com/folder/file.inc would be passed as 
     "folder/file.inc" 
     */ 

     $folder_depth = substr_count($_SERVER["PHP_SELF"] , "/"); 

     if($folder_depth == false) 
      $folder_depth = 1; 

     include(str_repeat("../", $folder_depth - 1) . $file); 
     } 
?> 

आशा है कि यह मदद करता है: 10 तो तुम यहाँ कुछ मेरे मन में है कि समस्या के साथ लिखा था है include('../rootdir/pages/file.php');

+0

मैंने समस्या निवारण शुरू कर दिया है इस लगातार त्रुटि के लिए यहां चेकलिस्ट: stackoverflow.com/a/36577021/2873507 –

2

लेमन नियमों और व्यावहारिकता में, मैं इसे एक पुरानी डॉस चाल/चीज़ के रूप में देखता हूं। वाह! वह क्या था? डॉस? कभी नहीं सुना!

".." आपको मौजूदा उप-निर्देशिका से एक बार उच्च फ़ोल्डर/निर्देशिका, और पर वापस ले जाता है .. दर्ज करें 2 बार दो बार उच्च पैरेंट फ़ोल्डर्स टाइप करें।" .. "वापस दर्ज करें और आप जल्द ही निर्देशिका के शीर्ष स्तर पर पाएंगे।

न्यूबीज के लिए यह बेहतर समझने के लिए, इस पर विचार करें (होम पीसी या "सी: \ ड्राइव" के संदर्भ में यदि आप जानते हैं कि इसका क्या अर्थ है, बल्कि वेब-सर्वर/होस्ट "रूट निर्देशिका" से)। जबकि आप इसे देखते हैं, अपनी वेबसाइट पर कहीं भी अपने होम पीसी की हार्ड ड्राइव पर मौजूद है, जिसे सी: \ ड्राइव के नीचे कुछ फ़ोल्डर में दफन किया गया है। आखिरकार, आप इसे " .. "एक निर्देशिका वापस है और"/"एक निर्देशिका/फ़ोल्डर आगे है।

अब! यदि आप कमांड प्रॉम्प्ट का उपयोग कर रहे हैं और "myDocuments" आपके पीसी के फ़ोल्डर में हैं, तो आपको "../" टाइप करके उच्च निर्देशिका "सी: \" के करीब पहुंचने के लिए उस फ़ोल्डर से वापस जाना होगा। । यदि आप अभी भी मेरे दस्तावेज़ फ़ोल्डर में हैं, तो विधवा निर्देशिका में स्थित फ़ाइल तक पहुंचना चाहते हैं, तो आप सैद्धांतिक रूप से टाइप करेंगे ../windows; डीओएस कमांड प्रॉम्प्ट की वास्तविकता में आप बस टाइप करेंगे .., लेकिन मैं आपको वेब के लिए सेट अप कर रहा हूं। / स्वाभाविक रूप से दूसरी निर्देशिका में रीडायरेक्ट करता है।

का उपयोग करना "myDocuments" देता बहाना है कि आप 2 फ़ोल्डर्स में यह "PHP1" और "PHP2" कहा जाता है बनाया है, इस तरह के में हम अब फ़ोल्डर:

  • C: \ myDocuments \ PHP1
  • C: \ myDocuments \ PHP2

PHP1 में आप एक फ़ाइल index.php कहा जाता है जगह। और PHP2 फ़ोल्डर में आपने Found.php नामक एक फ़ाइल रखी है। यह अब हो जाता है:

  • C: \ myDocuments \ PHP1 \ index.php
  • C: \ myDocuments \ PHP2 \ found.php

सी के अंदर: \ मेरे दस्तावेज़ \ PHP1 \ index.php फ़ाइल आपको कुछ संपादित करने और टाइप करने की आवश्यकता होगी:

<?php include ('../php2/found.php')?> 
": \ MyDocuments \ PHP1 \ index.php सी 'और एक निर्देश वापस PHP1 निर्देशिका से बाहर को यह कह रही है और दर्ज करें या में आगे बढ़ने है

../ स्थितीय इस प्रकार यह अपने वर्तमान फ़ाइल स्थान पर विचार करती है Found.php फ़ाइल देखने के लिए PHP2 निर्देशिका। लेकिन क्या यह इसे पढ़ता है? नीचे मुसीबत शूटिंग पर मेरे विचार देखें।

अब!मान लीजिए कि आप 1 फ़ोल्डर PHP1 और एक उप-फ़ोल्डर PHP2 है:

  • C: \ myDocuments \ PHP1 \ PHP2

आप बस संदर्भ हैं/कोड

<?php include('/PHP2/found.php') ?> 

PHP2 के रूप में नीचे या PHP1 निर्देशिका के भीतर, उप-निर्देशिका के रूप में मौजूद है।

यदि उपर्युक्त काम नहीं करता है तो इसे एक्सेस/एचटीएसीएसी या निर्देशिका या टाइपो के लिए अनुमति हो सकती है। इसे बढ़ाने के लिए ... मुसीबत शूटिंग में हो रही है ... यदि "found.php" फ़ाइल में त्रुटियों/टाइपो के भीतर है, तो यह त्रुटि पर प्रतिपादन पर क्रैश हो जाएगा, ऐसा कारण हो सकता है (आवश्यकता/requ_once) कि आप हैं भ्रम का अनुभव करना कि यह निर्देशिका बदल रहा है या फ़ाइल तक नहीं पहुंच रहा है। इस मामले पर पिछले सोचा में, आप का उपयोग करने के शामिल/आवश्यकता होती है "जो कुछ भी" एक नया वेरिएबल बनाने या वस्तु से इस तरह के रूप

$newObject = new nameobject("origianlThingy"); 

याद में अपने कार्यों या संदर्भ का दृष्टांत करना पड़ सकता है सिर्फ इसलिए कि आप कर रहे हैं जिसमें कुछ/आवश्यक है, कभी-कभी इसका मतलब है कि, इसे चलाने के लिए शामिल/आवश्यक है, लेकिन इसे सक्रिय करने या इसे एक्सेस करने के लिए इसे फिर से बनाने की आवश्यकता हो सकती है। नया निश्चित रूप से इसका एक उदाहरण फिर से बना देगा "अगर यह पठनीय है" और मूल को संरक्षित करते समय इसे वर्तमान दस्तावेज़ में उपलब्ध कराएं। हालांकि आपको सभी उदाहरणों में नव निर्मित चर $ newObject का संदर्भ देना चाहिए .... यदि इसकी वैश्विक है।

इसे कुछ वेब होस्ट खाते के परिप्रेक्ष्य में रखने के लिए; वेब होस्ट आकार के हार्ड ड्राइव (जैसे कि आपके पीसी पर) पर कुछ बड़ा है और आपका डोमेन आपके द्वारा असाइन किए गए फ़ोल्डर से अधिक कुछ नहीं है। आपके फ़ोल्डर को रूट कहा जाता है। उस फ़ोल्डर के अंदर आप कुछ भी कर सकते हैं जिसे आपको करने की अनुमति है। अपने निर्देशिकाओं के बीच ले जाने के लिए "कई मायनों की एक"/फ़ोल्डर संदर्भ में अपने वर्तमान से बाहर वापस करने के लिए स्थिति को ढूंढना चाहते हैं फ़ोल्डर में ../ हालांकि कई बार उपयोग करने के लिए है।

मेरे नशे की हालत में मुझे लगता है मैं भी समझदार होने के लिए ज्यादा पता है कि, और नहीं पर्याप्त पागल होना करने के लिए! "

0

(PHP में) रूट निर्देशिका फ़ाइल की निर्देशिका है कि उदाहरण के लिए, मैं http://localhost/directory/to/file/index.php पर जाता हूं, रूट निर्देशिका "/ dictory/to/file" होगी, क्योंकि यह वह है जिसे आपने वेब अनुरोध किया है।

+0

टिप्पणी के रूप में पोस्ट किया जा सकता है –

0

मैंने फ्रैंक से प्रेरणा ली और मैं मेरी "settings.php" फ़ाइल में ऐसा कुछ जोड़ा गया है जिसे तब लिंक के दौरान सभी पृष्ठों में शामिल किया गया है:

"settings.php"

$folder_depth = substr_count($_SERVER["PHP_SELF"] , "/"); 

    $slash=""; 

    for ($i=1;$i<=($folder_depth-2);++$i){ 

     $slash= $slash."../"; 

    } 

मेरी header.php में सभी पृष्ठों में शामिल किया जाना:

a href = .... php echo $ slash.'index.php '। ...

लगता है कि यह स्थानीय और होस्टेड वातावरण दोनों पर काम करता है ....

(नोट: मैं कर रहा हूँ एक निरपेक्ष शुरुआत)

0

था एक ही मुद्दा पहले इस तरह हल:

शामिल ('/..//config.php शामिल'); // टिप्पणी '/' '../includes/config.php'

0

से पहले प्रदर्शित होने के लिए अपने सर्वर फ़ाइल मूल निर्देशिका का उपयोग कर

include '../somefilein_parent.php'

इस कोशिश को हल नहीं है, तो:

include __DIR__ . "/../somefilein_parent.php";

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