Отримайте реальний шлях файлу


11

Я створюю модуль читання Excel в Drupal 8. Я хочу отримати реальний шлях до файлу для його читання з такого шляху, як public: //2016-03/Places.xls.

Яку функцію потрібно викликати для отримання реального шляху до файлу?



4
Для читання з чим? Цей шлях працює практично з усім, наприклад, file_get_contents ('public: // ...') працює чудово.
Бердір

1
Я отримав відповідь з точки зору drupal 8, це `\ Drupal :: service ('file_system') -> realpath ('public: //2016-03/Places_2.xlsx')`
Я не

1
Опублікуйте це як відповідь і прийміть його як рішення. Це допоможе іншим у тому ж питанні.
Арам Бояджян

1
У мене була подібна ситуація, але в кінцевому підсумку перейшло до файлу_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)
ім'я користувачаabc

Відповіді:


16

Нарешті я отримав рішення, викопавши код Drupal.
Ми можемо отримати реальний шлях або абсолютний шлях за допомогою сервісу file_system .

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

4
це для завантаження файлів через Drupal? Що станеться, якщо вони розміщуються зовні? 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.згадується документація для FileSystem :: realpath
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();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.