Php 如何在drupal8中将文件uri转换为相对路径

Php 如何在drupal8中将文件uri转换为相对路径,php,drupal-8,Php,Drupal 8,我正试图找到转换uri的方法,如 public://field/image/link-carousel.png 相对路径 sites/default/files/directory/link-carousel.png (当然这是一个例子,因为public://可以有其他路径) 怎么做 代码: if(isset($article_node['field_image']['und']['n0']){ $uri=$article_node['field_image']['und']['n0']['ur

我正试图找到转换uri的方法,如

public://field/image/link-carousel.png

相对路径

sites/default/files/directory/link-carousel.png

(当然这是一个例子,因为public://可以有其他路径)

怎么做

代码:

if(isset($article_node['field_image']['und']['n0']){
$uri=$article_node['field_image']['und']['n0']['uri'];
$realpath=\Drupal::service('file\u system')->realpath($uri);
$path=str_replace($_服务器['DOCUMENT\u ROOT']./',''.$realpath);
}
在这里打印
$uri
将获得public://field/image/link-caribbean-carousel-epic-press-release.png.on 打印
$realpath
将显示一个空白页。

用于从sream包装的URI转换:

use Drupal\Core\File\FileSystem;

//$realpath = drupal_realpath($uri); // D7, D8 deprecated
$realpath = FileSystem::realpath($uri);
$path = str_replace($_SERVER['DOCUMENT_ROOT'].'/','',$realpath);
UPD:由于某些原因,上述示例无效,我们需要使用文件系统服务:

  $uri = $node->field_document->entity->getFileUri();
  $realpath = \Drupal::service('file_system')->realpath($uri);
  $path = str_replace($_SERVER['DOCUMENT_ROOT'] . '/', '', $realpath);
摘自:


更新的代码也不工作。我将更新我正在工作的代码on@MobyM,则$uri=$node->field_document->entity->getFileUri();string只是为了对如何从节点的文件字段获取uri有一个大致的了解(作为最常见的用例),我不知道你的文件名和变量可以为你编写一个随时可用的代码段……这与字段名和变量无关。变量可能是什么$uri必须是什么样的public://field/image/link-carousel.png.your 提到的代码$realpath=\Drupal::service('file\u system')->realpath($uri)$path=str_replace($_SERVER['DOCUMENT_ROOT']./',''$realpath);这些行应该是正确的。字符串\Drupal::service('file_system')->realpath($uri)非常好,您可以在core和contrib模块中找到它。有关文档,请参阅和。我唯一能猜到为什么你会出现白色屏幕的原因是文件不可读/不存在public://field/image/link-caribbean-carousel-epic-press-release.pngPlease 提供有关您在何处以及如何使用此代码段的更多信息。这是drupal stack exchange的副本,请参阅此处的答案现在可以简化为
$image\u path=File::load($fid)->createFileUrl()
获取相对文件路径,或
$image\u path=file::load($fid)->createFileUrl(FALSE)
获取绝对文件路径。
// public://images/blah.jpg
$drupal_file_uri = File::load($fid)->getFileUri();
// /sites/default/files/images/blah.jpg
$image_path = file_url_transform_relative(file_create_url($drupal_file_uri));