Obter o caminho real de um arquivo


11

Estou criando um módulo de leitura do Excel no Drupal 8. Quero obter o caminho real de um arquivo para lê-lo a partir de um caminho como public: //2016-03/Places.xls.

Que função devo chamar para obter o caminho real de um arquivo?



4
Para ler com o que? Esse caminho funciona com quase tudo, por exemplo, file_get_contents ('public: // ...') funciona muito bem.
Berdir 8/03/16

1
Eu recebi a resposta em termos do drupal 8, é `\ Drupal :: service ('file_system') -> realpath ('public: //2016-03/Places_2.xlsx')`
Nisam

1
Publique como resposta e aceite como solução. Isso ajudará outras pessoas com a mesma pergunta.
Aram Boyajyan # 8/16

1
Eu tinha uma situação semelhante, mas acabei indo com file_create_url porque ele pode manipular managed files (These are files that have either been uploaded by users or were generated automatically (for example through CSS aggregation))eshipped files (those outside of the files directory, which ship as part of Drupal core or contributed modules or themes)
usernameabc

Respostas:


16

Finalmente, obtive a solução digitando o código Drupal.
Podemos obter o caminho real ou absoluto usando o serviço file_system .

$absolute_path = \Drupal::service('file_system')->realpath('public://2016-03/Places_2.xlsx');

4
são para upload de arquivos através do Drupal? O que acontece se eles estiverem hospedados externamente? The use of this method is discouraged, because it does not work for remote URIs. Except in rare cases, URIs should not be manually resolved.é mencionado o documention para FileSystem :: realpath
usernameabc

13

A resposta @Nisam estava certa, mas agora está obsoleta: function drupal_realpath

Descontinuada

no Drupal 8.0.x-dev, será removido antes do Drupal 9.0.0. Use \ Drupal \ Core \ File \ FileSystem :: realpath ().

Portanto, você deve usar o FileSystem :: realpath .

Exemplo:

$file = File::load($file_id);
$uri = $file->getFileUri();
$stream_wrapper_manager = \Drupal::service('stream_wrapper_manager')->getViaUri($uri);
$file_path = $stream_wrapper_manager->realpath();
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.