Saya perlu mendapatkan jalur untuk publik: // saat runtime. Apakah ada fungsi yang bisa saya gunakan untuk mendapatkannya?
43
Anda dapat menggunakan kode berikut, untuk mendapatkan jalur publik yang sebenarnya: //.
if ($wrapper = file_stream_wrapper_get_instance_by_uri('public://')) {
$realpath = $wrapper->realpath();
// ...
}
Kode ini adalah versi sederhana dari kode yang digunakan oleh file_create_url()
, dengan perbedaan berikut:
$wrapper->getExternalUrl()
karena OP meminta path, bukan untuk URLJika OP menginginkan URL untuk publik: //, saya akan menggunakan kode berikut, yang masih merupakan versi sederhana dari kode yang digunakan oleh fungsi Drupal, yang harus lebih umum.
if ($wrapper = file_stream_wrapper_get_instance_by_uri('public://')) {
$url = $wrapper->getExternalUrl();
}
file_create_url()
; Anda akan melihat kode yang dieksekusi, dalam hal ini, persis yang saya tulis dalam jawaban saya.file_create_url()
memberi Anda./var/www/webroot/etc/more_folders/
Anda dapat menggunakan fungsi file_create_url .
sumber
global $base_url
untuk menghapusnya dan membuat server ini agnostik.global $base_url; $path = file_create_url($file_object->uri); $path = preg_replace('#' . $base_url . '#', '', $path);
Pastikan untuk menggunakan '#' di regex, jika tidak ganti akan gagal karena '/' tidak diloloskan di $ base_url.Jika Anda hanya menggunakan file lokal ( tidak jauh! ), Anda juga dapat mencoba drupal_realpath ()
Itu akan kembali:
sumber
Lihat contoh-contoh berikut:
atau:
Periksa API untuk
DrupalPublicStreamWrapper
.Penggunaan
file_create_url()
tidak berfungsi dalam semua kasus (seperti yang disarankan jawaban lain), karena URL yang dikembalikan tidak harus berada di server yang sama. Dan menggunakan$_SERVER['DOCUMENT_ROOT']
hanya berfungsi untuk konfigurasi server tertentu.Jika Anda tidak ingin menggunakan pembungkus aliran, Anda dapat mencoba solusi yang lebih sederhana:
Kalau tidak, jika Anda membutuhkan sesuatu yang berfungsi lebih umum, periksa solusi @ hannanxp :
Baca selengkapnya: Bagaimana saya bisa mengkonversi file uri ke path relatif?
Terkait:
sumber