phir dirname (__ FILE__) पर एक स्तर ऊपर कैसे जाना है


80

मेरे पास एक फ़ोल्डर संरचना इस प्रकार है:

mydomain.com
  ->Folder-A
  ->Folder-B

मेरे पास डेटाबेस से एक स्ट्रिंग है जो '../Folder-B/image1.jpg' है, जो फोल्डर-बी में एक छवि को इंगित करता है।

फ़ोल्डर-ए में एक स्क्रिप्ट के अंदर, मैं फ़ाइल नाम लाने के लिए dirname ( FILE ) का उपयोग कर रहा हूं और मुझे मिलता है 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-B% 2Fimage1.jpg


पेटा का यह उत्तर वास्तव में स्वीकृत उत्तर की तुलना में बेहतर प्रश्न का उत्तर देता है। (यह वास्तव में आपको बताता है कि एक स्तर को कैसे आगे
बढ़ाया जाए

जवाबों:


206

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

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

PHP 5.3 से 5.6 में उपयोग:

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

PHP में = = 7.0 का उपयोग करें:

$upOne = dirname(__DIR__, 1);

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

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

1
यह उत्तर वास्तव में प्रश्न का उत्तर देता है। स्वीकृत उत्तर समस्या से बचने के लिए सिर्फ एक समाधान प्रदान करता है, लेकिन वास्तव में हमें यह नहीं बताता है कि "dirname ( FILE ) पर एक स्तर ऊपर कैसे जाना है "। बहुत बढ़िया।
बाइसन

1
वैकल्पिक तरीका:dirname(__DIR__)
नेफ्लीम

@Nefelim हाँ, जो अन्य उत्तरों में उल्लिखित है।
पेटा

19

यदि आपके पास php 7.0+ है तो आप स्तरों का उपयोग कर सकते हैं।

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

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


17

इसे इस्तेमाल करे

dirname(dirname( __ FILE__))

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


6

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


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

हो सकता है कि एक नियमित अभिव्यक्ति, कुछ पंक्तियों के साथ: / /। 'काम' करना चाहिए, हालांकि परीक्षण नहीं किया है।
शेन

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

कोई बात नहीं, मुझे लगा कि यह एक टाइपो है। मैंने कुछ अतिरिक्त पढ़ने के साथ समस्या का पता लगाया। आपकी टिप्पणियों के लिए धन्यवाद :)
aVC

सबसे अच्छा समाधान IMHO
Nefelim

1

आप realpathअसमानता को दूर करने के लिए उपयोग कर सकते हैं :

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

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

खिड़कियों पर भी बदलने के \साथ /URL में है कि अगर जरूरत है।


1
dirname(__DIR__,level);
dirname(__DIR__,1);

स्तर कितनी बार आप फ़ोल्डर में वापस जाएंगे


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';

0

किसके साथ, शेयर होस्टिंग के माहौल के साथ बहरा और अभी भी वर्तमान PHP 7.0 से कम का मौका है जिनके पास नहीं है, dirname( __FILE__, 2 );निम्नलिखित का उपयोग करना संभव है।

function dirname_safe($path, $level = 0){
    $dir = explode(DIRECTORY_SEPARATOR, $path);
    $level = $level * -1;
    if($level == 0) $level = count($dir);
    array_splice($dir, $level);
    return implode($dir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;
}

print_r(dirname_safe(__DIR__, 2));

-3

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

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

यदि कोई चित्र दिखाना है, तो यह पर्याप्त है:

echo("<img src='/Folder-B/image1.jpg'>");
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.