it-swarm-ko.tech

공개 경로를 얻는 방법

런타임에 public : // 경로를 가져와야합니다. 그것을 얻기 위해 사용할 수있는 기능이 있습니까?

45
vintorg

다음 코드를 사용하여 public : //의 실제 경로를 얻을 수 있습니다.

if ($wrapper = file_stream_wrapper_get_instance_by_uri('public://')) {
  $realpath = $wrapper->realpath();
  // ...
}

이 코드는 file_create_url()에서 사용하는 코드의 단순화 된 버전이며 다음과 같은 차이점이 있습니다.

  • OP가 public : //과 관련된 경로를 요청하므로 타사 모듈이 URL을 변경할 수 없습니다.
  • URI가 : //를 포함하는지 확인하지 않습니다.
  • URI가 루트 상대 URI인지 확인하지 않습니다. public : //의 경우 분명히 거짓이기 때문입니다.
  • OP의 경우 분명히 거짓이므로 URI가 프로토콜에 상대적인지 확인하지 않습니다.
  • Public : //가 올바른 형식의 스트림이므로 URI가 올바른 형식의 스트림이 아닌지 확인하지 않습니다.
  • 이 경우 체계가 http인지 https인지 확인하지 않습니다.
  • OP가 URL이 아닌 경로를 요청하므로 $wrapper->getExternalUrl()을 (를) 호출하지 않습니다.

OP가 public : //의 URL을 원한다면 다음 코드를 사용했을 것입니다.이 코드는 여전히 Drupal 함수에서 사용하는 코드의 단순화 된 버전입니다. .

if ($wrapper = file_stream_wrapper_get_instance_by_uri('public://')) {
  $url = $wrapper->getExternalUrl();
}
35
kiamlaluno

file_create_url 함수를 사용할 수 있습니다.

$uri = 'public://';
$path= file_create_url($uri)
40
junedkazi

로컬 파일 만 사용하는 경우 (원격이 아님!) drupal_realpath ()

$path = 'public://custom_map';
drupal_realpath($path);

다음을 반환합니다 :

D:\Work\OpenServer\domains\local.testsite.com\sites\default\files\custom_map
22
Andrey Rudenko

다음 예를 참조하십시오.

$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 에 대한 API를 확인하십시오.

반환 된 URL이 동일한 서버에있을 필요가 없으므로 file_create_url()을 사용하는 것은 모든 경우에 작동하지 않습니다 (다른 답변에서 제안한 바와 같이). $_SERVER['DOCUMENT_ROOT']를 사용하면 특정 서버 구성에 대해서만 작동합니다.

스트림 래퍼를 사용하지 않으려면 더 간단한 해결책을 시도하십시오.

$path = variable_get('file_public_path', conf_path() . '/files') . '/' . file_uri_target($uri);

그렇지 않으면 더 일반적으로 작동하는 것이 필요하면 @ hannanxp 's 솔루션을 확인하십시오.

$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를 상대 경로로 변환하려면 어떻게해야합니까?


관련 :

3
kenorb