2012-06-19 5 views
40

मैं एक फ़ोल्डर संरचना इस प्रकार है , जो फ़ोल्डर-बी में एक छवि को इंगित करता है।php कैसे एक स्तर ऊपर जाने के लिए dirname पर (__ FILE__)

फ़ोल्डर-ए में एक स्क्रिप्ट के अंदर, मैं dirname (फ़ाइल) का उपयोग कर रहा फ़ाइल नाम लाने के लिए और मैं mydomain.com/Folder-A मिलता है। इस स्क्रिप्ट के अंदर, मुझे एक स्ट्रिंग प्राप्त करने की आवश्यकता है जो 'mydomain.com/Folder-B/image1.jpg कहती है। मैंने कोशिश की

$path=dirname(__FILE__).'/'.'../Folder-B/image1.jpg'; 

यह mydomain.com%2FFolder-A%2F..%2FFolder-B%2Fimage1.jpg

यह एक फेसबुक शेयर बटन के लिए है के रूप में दिखाई देता है और यह सही छवि को लाने के लिए विफल रहता है। किसी को भी सही तरीके से रास्ता कैसे प्राप्त करना है?

संपादित करें: मैं एक यूआरएल पाने के लिए आशा है कि >>> mydomain.com% 2FFolder-बी% 2Fimage1.jpg

+0

[Petah द्वारा इस उत्तर] (http://stackoverflow.com/questions/11094776/php-how-to-go-one-level-up-on-dirname-file#answer-11094813) वास्तव में स्वीकार किए गए उत्तर से बेहतर प्रश्न का उत्तर देते हैं। (यह वास्तव में आपको बताता है कि कैसे स्तर को स्थानांतरित करना है, न कि केवल इससे बचने के लिए कैसे।) – Byson

उत्तर

114

पीएचपी < के लिए 5.3 उपयोग:

$upOne = realpath(dirname(__FILE__) . '/..'); 

या PHP 5.3+ उपयोग में:

$upOne = realpath(__DIR__ . '/..'); 
+0

समस्या यह है कि, मेरी लक्ष्य फ़ाइल डेटाबेस में ../Folder-B/image1.jpg के रूप में सहेजी जाती है। तो आपके दृष्टिकोण के साथ-साथ मेरा, मुझे mydomain.com/Folder-A/../Folder-B/image1.jpg मिलता है। शेयर बटन इसे पहचान नहीं पाता है, हालांकि अगर मैं इसे ब्राउज़र में कॉपी करता हूं, तो ऐसा लगता है कि सही छवि मिलती है। – aVC

+0

@Petah - मैंने इस पर घंटों बिताए हैं, फिर आपकी पोस्ट से 'realpath() 'की खोज की है। पूरी तरह आउटपुट के साथ मेरा आखिरी निगल हल किया, धन्यवाद! – James

+1

यह उत्तर वास्तव में प्रश्न का उत्तर देता है। स्वीकृत उत्तर केवल समस्या से बचने के लिए एक समाधान प्रदान करता है, लेकिन वास्तव में हमें नहीं बताता है कि "एक नाम को द्वारनाम (__ FILE__) पर कैसे जाना है"। बहुत बढ़िया। – Byson

6

आप PHP के dirname फ़ंक्शन का उपयोग कर सकते हैं। <?php echo dirname(__DIR__); ?>। इससे आपको __DIR__ की मूल निर्देशिका का नाम मिलेगा, जो वर्तमान निर्देशिका को संग्रहीत करता है।

+0

मैंने कोशिश की, और मैं यूआरएल प्राप्त कर सकता हूं। समस्या यह है कि, मेरे पास मेरे लक्ष्य फ़ाइल के नाम में ../ है जो डेटाबेस में सहेजा गया है। मुझे अंतिम यूआरएल में इससे छुटकारा पाना होगा। – aVC

+0

शायद एक नियमित अभिव्यक्ति, /[^\/\\]+\.\.\/?\/ पथ से माता-पिता /../ को हटाने के लिए इसका उपयोग करें। काम करना चाहिए, हालांकि परीक्षण नहीं किया है। – Shane

+0

क्षमा करें, मैंने उपरोक्त नियमित अभिव्यक्ति में थोड़ी सी त्रुटि की है, \/वास्तव में होना चाहिए?/ – Shane

12

इस

dirname(dirname(__ FILE__)) 

संपादित करें का प्रयास करें: हटाया "./" क्योंकि यह सही सिंटैक्स नहीं है। इसके बिना, यह पूरी तरह से काम करता है।

-3

मैं इस का उपयोग करें, यदि कोई निरपेक्ष पथ है (यह एक उदाहरण है):

$img = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT']."/Folder-B/image1.jpg"); 

अगर वहाँ दिखाने के लिए एक तस्वीर है, यह पर्याप्त है:

echo("<img src='/Folder-B/image1.jpg'>"); 
1

आप उपयोग कर सकते हैं realpath unnessesary हिस्से को हटाने के लिए:

// One level up 
echo str_replace(realpath(dirname(__FILE__) . '/..'), '', realpath(dirname(__FILE__))); 

// Two levels etc. 
echo str_replace(realpath(dirname(__FILE__) . '/../..'), '', realpath(dirname(__FILE__))); 

खिड़कियों पर भीकी जगह यूआरएल में अगर / के साथ 10 की आवश्यकता है।

0

एक स्तर ऊपर, मैं का इस्तेमाल किया है:

str_replace(basename(__DIR__) . '/' . basename(__FILE__), '', realpath(__FILE__)) . '/required.php'; 

या php < 5.3 के लिए:

str_replace(basename(dirname(__FILE__)) . '/' . basename(__FILE__), '', realpath(__FILE__)) . '/required.php'; 
7

आप php 7.0 आप स्तरों इस्तेमाल कर सकते हैं के लिए होता है।

dirname(__FILE__, 2) दूसरे पैरामीटर के साथ आप उन स्तरों की मात्रा को परिभाषित कर सकते हैं जिन्हें आप वापस जाना चाहते हैं।

http://php.net/manual/en/function.dirname.php

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