ファイルの実際のパスを取得する


11

Drupal 8でExcel読み取りモジュールを作成しています。public://2016-03/Places.xlsのようなパスから読み取るために、ファイルの実際のパスを取得したいと考えています。

ファイルの実際のパスを取得するには、どの関数を呼び出す必要がありますか?



4
何で読むの?そのパスはほとんどすべてで機能します。たとえば、file_get_contents( 'public:// ...')は問題なく機能します。
Berdir 2016年

1
私はdrupal 8に関して答えを得ました。それは `\ Drupal :: service( 'file_system')-> realpath( 'public://2016-03/Places_2.xlsx')`
Nisam

1
それを応答として投稿し、解決策として受け入れます。それは同じ質問を持つ他の人を助けるでしょう。
Aram Boyajyan 2016年

1
私は似たような状況があったが、一緒に行くことになったfile_create_urlそれは扱うことができるためmanaged files (These are files that have either been uploaded by users or were generated automatically (for example through CSS aggregation))shipped files (those outside of the files directory, which ship as part of Drupal core or contributed modules or themes)
usernameabc

回答:


16

最後に、Drupalコードを掘り下げることで解決策を得ました。file_systemサービス
を使用して、実際のパスまたは絶対パスを取得できます。

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

4
これらはDrupalを介してアップロードされたファイル用ですか?外部でホストされている場合はどうなりますか? FileSystem :: realpathThe use of this method is discouraged, because it does not work for remote URIs. Except in rare cases, URIs should not be manually resolved.
usernameabc

13

@Nisamの答えは正しかったが、現在は非推奨です。関数drupal_realpath

非推奨

Drupal 8.0.x-devでは、Drupal 9.0.0より前に削除されます。\ Drupal \ Core \ File \ FileSystem :: realpath()を使用します。

したがって、FileSystem :: realpathを使用する必要があります

例:

$file = File::load($file_id);
$uri = $file->getFileUri();
$stream_wrapper_manager = \Drupal::service('stream_wrapper_manager')->getViaUri($uri);
$file_path = $stream_wrapper_manager->realpath();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.