2011-07-11 12 views
9

मैं कई वर्षों से PHP में प्रोग्रामिंग कर रहा हूं और कभी इससे पहले इस त्रुटि का सामना करना पड़ा।Requ_once PHP त्रुटि

यहाँ मेरी widget.php फ़ाइल है:

require_once('fruit.php'); 
echo "I am compiling just fine!!!"; 

और मेरे fruit.php फ़ाइल:

$bVar = true; 

इन दो फ़ाइलों इस तरह दिखेगा जब^तो सब कुछ नहीं त्रुटियों के साथ संकलित और मुझे "मिल रहा है मैं बस ठीक कर रहा हूँ !!!" सफलता संदेश।

अब, मिनट मैं fruit.php फ़ाइल एक निर्देशिका स्तर ऊपर ले जाएँ, और निर्देशिका पुनर्गठन प्रतिबिंबित करने के लिए मेरी widget.php फ़ाइल बदल: अब सब अचानक

require_once('../fruit.php'); 
echo "I am compiling just fine!!!"; 

, मैं पीएचपी चेतावनी मिल & घातक त्रुटियों:

Warning: require_once(../fruit.php) [function.require-once]: failed to open stream: No such file or directory in /webroot/app/widget.php on line 1 

Fatal error: require_once() [function.require]: Failed opening required '../fruit.php' (include_path='.:/usr/local/php5/lib/php') in /webroot/app/widget.php on line 1 

मेरे सभी वर्षों में पीएचपी साथ काम करना, मैं कभी नहीं किया है se en requ_once() पहले इस तरह विफल हो। कोई विचार?!?!

+5

एकमात्र चीज जिसे मैं तुरंत सोच सकता हूं, क्या आपने मूल फ़ोल्डर के लिए वेबसर्वर उपयोगकर्ता की अनुमतियों की जांच की है?आप ऑपरेटिंग सिस्टम, वेबसर्वर इत्यादि की पुष्टि करना चाह सकते हैं। मैं देख सकता हूं कि इस मामले में प्रासंगिक होना। जेफ के लिए –

+0

+1 ... क्या वेब सर्वर "उपयोगकर्ता" के पास मूल निर्देशिका तक पहुंच है। – sdolgy

+0

@ जेफ पार्कर - कोई भी जो मेरे दिमाग को कभी पार नहीं कर पाया; मुझे मेजबान को फोन करना होगा और पूछना होगा। क्या यह अपाचे या PHP में एक चर होगा? कौन सी फाइल और चर नाम? और धन्यवाद! – Kim

उत्तर

1

याद रखें कि दूसरे मामले में, आप पथ निर्दिष्ट कर रहे हैं, लेकिन पहले मामले में यह आपके पथ का उपयोग करता है। शायद स्पष्ट रूप से निर्दिष्ट करने के बजाय .. दूसरे मामले में, आप मामले को अपने पथ को संशोधित करते हैं।

http://php.net/manual/en/function.set-include-path.php

+0

सुझाव के लिए धन्यवाद और मैं आज सुबह इसे देख लूंगा, लेकिन मुझे आवश्यकता नहीं है "./" या "../" के उपयोग से पहले मुझे आवश्यकता नहीं है() कथन, और पहले कभी भी इस तरह के किसी भी मुद्दे को ठीक करने के लिए set_include_path() फ़ंक्शन का उपयोग नहीं करना पड़ा था। एक बार फिर धन्यवाद! – Kim

+0

आईएमएचओ, सेट में पथ शामिल नहीं है जब आप सीधे फ़ाइल सहित @ किम कर रहे हैं, तो मुझे गलत करें अगर मैं गलत हूं। – Kumar

+0

ऐसा हो सकता है अगर किसी ने चडीर या ऐसा कुछ किया हो। –

-1
require_once('fruit.php'); 

यह वही निर्देशिका में fruit.php की खोज करता है के रूप में widget.php में है, कोई बात नहीं क्या वर्तमान कार्यशील निर्देशिका है।

require_once('../fruit.php'); 

यह वर्तमान निर्देशिका के ऊपर एक निर्देशिका में fruit.php की खोज करता है, एक widget.php में है ऊपर निर्देशिका में नहीं।

+0

नहीं, यह गलत है। 'fruit.php'' include_path' का उपयोग करके पथ को हल करने का प्रयास करता है (याद दिलाता है कि वर्तमान कार्य निर्देशिका '.' आमतौर पर इसका हिस्सा है) और '../ fruit.php' वर्तमान कार्य का उपयोग करके इसे _only_ को हल करने का प्रयास करता है निर्देशिका। – KingCrunch

+0

अतिरिक्त: 'fruit.php' को कॉल करने का मतलब यह नहीं है कि वर्तमान कार्य निर्देशिका निर्देशिका को इंगित करती है, जहां' fruit.php' है: 'php some/directory/fruit.php'। या यह 'chwd() 'का उपयोग करके बदल गया है – KingCrunch

13

शायद तुम गलत काम निर्देशिका में हैं। वैसे भी इसका भरोसा करना एक बुरा विचार है (वैसे भी आप इसे स्पष्ट रूप से एक्सेस करना चाहते हैं) वैसे भी। का प्रयोग करें

require __DIR__ . '/../fruit.php'; 

या पूर्व-5,3

require dirname(__FILE__) . '/../fruit.php'; 

याद दिलाएं साथ, .. के साथ शुरू है कि पथ, या .नहीं शामिल-पथ के खिलाफ संकल्प लिया हैं, लेकिन केवल वर्तमान काम निर्देशिका के खिलाफ।

0

मुझे पता है कि सवाल पुराना है, लेकिन यह अभी भी प्रासंगिक है।

मेरे अनुभव में, "open_basedir" directive इस समस्या का कारण होने की संभावना है।

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