답변:
다음 코드를 사용하여 public : //의 실제 경로를 얻을 수 있습니다.
if ($wrapper = file_stream_wrapper_get_instance_by_uri('public://')) {
$realpath = $wrapper->realpath();
// ...
}
이 코드는에 의해 사용되는 코드의 단순화 된 버전이며 file_create_url()
다음과 같은 차이점이 있습니다.
$wrapper->getExternalUrl()
OP가 URL이 아닌 경로를 요구하기 때문에 호출하지 않습니다.OP가 public : //의 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의 이스케이프 처리되지 않은 '/'로 인해 교체가 실패합니다.
원격 파일이 아닌 로컬 파일 만 사용하는 경우 drupal_realpath () 시도 할 수도 있습니다
$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;
에 대한 API를 확인하십시오 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를 상대 경로로 변환하려면 어떻게해야합니까?
관련 :