Tôi cần lấy đường dẫn cho công khai: // lúc chạy. Có một chức năng tôi có thể sử dụng để có được nó?
Tôi cần lấy đường dẫn cho công khai: // lúc chạy. Có một chức năng tôi có thể sử dụng để có được nó?
Câu trả lời:
Bạn có thể sử dụng mã sau đây, để có được đường dẫn công khai thực sự: //.
if ($wrapper = file_stream_wrapper_get_instance_by_uri('public://')) {
$realpath = $wrapper->realpath();
// ...
}
Mã này là phiên bản đơn giản của mã được sử dụng bởi file_create_url()
, với các khác biệt sau:
$wrapper->getExternalUrl()
vì OP đang yêu cầu đường dẫn, không phải cho URLNếu OP muốn URL công khai: //, thì tôi đã sử dụng đoạn mã sau, đây vẫn là phiên bản đơn giản của mã được sử dụng bởi hàm Drupal, cần phải chung chung hơn.
if ($wrapper = file_stream_wrapper_get_instance_by_uri('public://')) {
$url = $wrapper->getExternalUrl();
}
file_create_url()
; bạn sẽ thấy mã được thực thi, trong trường hợp này, chính xác là mã tôi đã viết trong câu trả lời của mình.
file_create_url()
mang lại cho bạn.
/var/www/webroot/etc/more_folders/
Bạn có thể sử dụng hàm file_create_url .
$uri = 'public://';
$path= file_create_url($uri)
global $base_url
để loại bỏ nó và làm cho máy chủ này không thể tin được. global $base_url; $path = file_create_url($file_object->uri); $path = preg_replace('#' . $base_url . '#', '', $path);
Đảm bảo sử dụng '#' trong regex, nếu không, thay thế sẽ thất bại do không thoát '/' trong $ base_url.
Trong trường hợp nếu bạn chỉ sử dụng các tệp cục bộ ( không phải từ xa! ), Bạn cũng có thể thử drupal_realpath ()
$path = 'public://custom_map';
drupal_realpath($path);
Nó sẽ trở lại:
D:\Work\OpenServer\domains\local.testsite.com\sites\default\files\custom_map
Xem các ví dụ sau:
$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);
}
hoặc là:
$wrapper = file_stream_wrapper_get_instance_by_uri($uri);
$path = $wrapper->getDirectoryPath() . "/" . file_uri_target($uri);
print $path;
Kiểm tra API cho DrupalPublicStreamWrapper
.
Việc sử dụng file_create_url()
không hoạt động trong mọi trường hợp (như các câu trả lời khác đề xuất), vì URL được trả lại không phải trên cùng một máy chủ. Và sử dụng $_SERVER['DOCUMENT_ROOT']
chỉ hoạt động cho các cấu hình máy chủ nhất định.
Nếu bạn không muốn sử dụng trình bao bọc luồng, bạn có thể thử giải pháp đơn giản hơn:
$path = variable_get('file_public_path', conf_path() . '/files') . '/' . file_uri_target($uri);
Mặt khác, nếu bạn cần một cái gì đó hoạt động chung hơn, hãy kiểm tra giải pháp của @ 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.
}
Đọc thêm: Làm thế nào tôi có thể chuyển đổi một tập tin uri thành đường dẫn tương đối?
Liên quan: