Yanıtlar:
Halkın asıl yolunu bulmak için aşağıdaki kodu kullanabilirsiniz: //.
if ($wrapper = file_stream_wrapper_get_instance_by_uri('public://')) {
$realpath = $wrapper->realpath();
// ...
}
Bu kod, file_create_url()
aşağıdaki farklılıklar ile kullanılan kodun basitleştirilmiş sürümüdür :
$wrapper->getExternalUrl()
OP değil URL için, yolun istiyor beriOP, URL’yi genel için istiyorsa: //, daha genel olması gereken Drupal işlevi tarafından kullanılan kodun basitleştirilmiş bir sürümü olan aşağıdaki kodu kullanırdım.
if ($wrapper = file_stream_wrapper_get_instance_by_uri('public://')) {
$url = $wrapper->getExternalUrl();
}
file_create_url()
; Yürütülen kodu göreceksiniz, bu durumda tam olarak cevabımda yazdığım kod.
file_create_url()
verir.
/var/www/webroot/etc/more_folders/
File_create_url işlevini kullanabilirsiniz .
$uri = 'public://';
$path= file_create_url($uri)
global $base_url
onu kaldırmak ve bu sunucuyu agnostik yapmak için kullandım. global $base_url; $path = file_create_url($file_object->uri); $path = preg_replace('#' . $base_url . '#', '', $path);
Regex'te '#' kullandığınızdan emin olun, aksi takdirde değiştirme işlemi $ base_url dosyasındaki çıkmamış bir '/' nedeniyle başarısız olur.
Yalnızca yerel dosyalar kullanıyorsanız ( uzak değil! ), Drupal_realpath () yöntemini de deneyebilirsiniz.
$path = 'public://custom_map';
drupal_realpath($path);
Geri dönecek:
D:\Work\OpenServer\domains\local.testsite.com\sites\default\files\custom_map
Aşağıdaki örneklere bakınız:
$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);
}
veya:
$wrapper = file_stream_wrapper_get_instance_by_uri($uri);
$path = $wrapper->getDirectoryPath() . "/" . file_uri_target($uri);
print $path;
İçin API'yi kontrol edin DrupalPublicStreamWrapper
.
Kullanmak file_create_url()
her durumda işe yaramaz (diğer yanıtların önerdiği gibi), çünkü döndürülen URL'nin aynı sunucuda olması gerekmez. Ve $_SERVER['DOCUMENT_ROOT']
yalnızca belirli sunucu yapılandırmaları için çalışır.
Akış sarmalayıcıları kullanmak istemiyorsanız, daha basit bir çözüm deneyebilirsiniz:
$path = variable_get('file_public_path', conf_path() . '/files') . '/' . file_uri_target($uri);
Aksi takdirde, daha genel olarak işe yarayan bir şeye ihtiyacınız olursa, @ hannanxp'in çözümüne göz atın :
$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.
}
Devamını oku: Bir dosyayı uri'yi göreli yola nasıl dönüştürebilirim?
İlgili: