当前位置: 首页>>技术问答>>正文


我如何获得公共路径://

webfans 技术问答 , , 去评论

问题描述

我需要获取公共路径://在运行时。有没有我可以用来获得它的功能?

最佳解决思路

您可以使用以下代码来获取public://的真实路径。

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

此代码是file_create_url()使用的代码的简化版本,具有以下不同之处:

  • 它不允许third-party模块更改URL,因为OP要求与public关联的路径://

  • 它不检查URI contains://,因为这显然是真的

  • 它不检查URI是否为root-relative URI,因为对于public来说这显然是错误的://

  • 它不检查URI是否与协议相关,因为在OP的情况下这显然是错误的

  • 它不检查URI是否为格式正确的流,因为public://是格式正确的流

  • 它不检查该方案是http还是https,因为在这种情况下是公开的

  • 它不会调用$wrapper->getExternalUrl(),因为OP正在请求路径,而不是URL

如果OP需要public://的URL,我会使用下面的代码,它仍然是Drupal函数使用的代码的简化版本,它需要更通用。

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

次佳解决思路

您可以使用file_create_url功能。

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

第三种解决思路

如果你只使用本地文件(不是远程!),你也可以尝试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;

检查DrupalPublicStreamWrapper的API。

使用file_create_url()在所有情况下都不起作用(如其他答案所示),因为返回的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.
}

阅读更多:How can I convert a file uri to relative path?


有关:

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2005.html,转载请务必附带本地址声明。