जवाबों:
आप निम्न कोड का उपयोग कर सकते हैं, जनता का वास्तविक मार्ग प्राप्त करने के लिए: //।
if ($wrapper = file_stream_wrapper_get_instance_by_uri('public://')) {
$realpath = $wrapper->realpath();
// ...
}
यह कोड file_create_url()
निम्नलिखित अंतरों के साथ उपयोग किए गए कोड का सरलीकृत संस्करण है :
$wrapper->getExternalUrl()
क्योंकि ओपी पथ के लिए पूछ रहा है, URL के लिए नहींयदि ओपी जनता के लिए URL चाहता था: //, मैंने निम्नलिखित कोड का उपयोग किया होगा, जो अभी भी Drupal फ़ंक्शन द्वारा उपयोग किए जाने वाले कोड का सरलीकृत संस्करण है, जिसे अधिक सामान्य होने की आवश्यकता है।
if ($wrapper = file_stream_wrapper_get_instance_by_uri('public://')) {
$url = $wrapper->getExternalUrl();
}
file_create_url()
; आप निष्पादित कोड देखेंगे, इस मामले में, ठीक वही है जो मैंने अपने उत्तर में लिखा था।
file_create_url()
देता है जो आपको देता है।
/var/www/webroot/etc/more_folders/
आप file_create_url फ़ंक्शन का उपयोग कर सकते हैं ।
$uri = 'public://';
$path= file_create_url($uri)
global $base_url
इसे हटाने और इस सर्वर को अज्ञेय बनाने के लिए एक साधारण रेगेक्स और उपयोग किया । global $base_url; $path = file_create_url($file_object->uri); $path = preg_replace('#' . $base_url . '#', '', $path);
रेगेक्स में '#' का उपयोग करना सुनिश्चित करें, अन्यथा $ base_url में अन-एस्केप किए गए '/' के कारण प्रतिस्थापित विफल हो जाएगा।
यदि आप केवल स्थानीय फ़ाइलों का उपयोग कर रहे हैं ( दूरस्थ नहीं! ) तो आप ड्रुपल_रेलपैथ () भी आज़मा सकते हैं।
$path = 'public://custom_map';
drupal_realpath($path);
यह वापस आ जाएगी:
D:\Work\OpenServer\domains\local.testsite.com\sites\default\files\custom_map
निम्नलिखित उदाहरण देखें:
$scheme = file_uri_scheme($file);
if ($scheme && file_stream_wrapper_valid_scheme($scheme)) {
$wrapper = file_stream_wrapper_get_instance_by_scheme($scheme);
$path = $wrapper->getLocalPath($file);
}
या:
$wrapper = file_stream_wrapper_get_instance_by_uri($uri);
$path = $wrapper->getDirectoryPath() . "/" . file_uri_target($uri);
print $path;
के लिए एपीआई की जाँच करें DrupalPublicStreamWrapper
।
उपयोग करना file_create_url()
सभी मामलों में काम नहीं करता है (जैसा कि अन्य उत्तर बताते हैं), क्योंकि लौटाया गया URL एक ही सर्वर पर नहीं होना चाहिए। और $_SERVER['DOCUMENT_ROOT']
केवल कुछ सर्वर कॉन्फ़िगरेशन के लिए काम करता है।
यदि आप स्ट्रीम रैपर का उपयोग नहीं करना चाहते हैं, तो आप सरल समाधान आजमा सकते हैं:
$path = variable_get('file_public_path', conf_path() . '/files') . '/' . file_uri_target($uri);
अन्यथा अगर आपको ऐसी चीज़ की ज़रूरत है जो आम तौर पर काम करती है, तो @ hannanxp का समाधान देखें:
$wrapper = file_stream_wrapper_get_instance_by_uri($uri);
if ($wrapper instanceof DrupalLocalStreamWrapper) {
$path = $wrapper->getDirectoryPath() . '/' . file_uri_target($uri);
}
else {
// This does not appear to be a local file so there's no such thing as
// a relative path; do appropriate error handling here.
}
और पढ़ें: मैं एक फ़ाइल uri को सापेक्ष पथ में कैसे बदल सकता हूं?
सम्बंधित: