Obtenez le vrai chemin d'un fichier


11

Je crée un module de lecture Excel dans Drupal 8. Je veux obtenir le vrai chemin d'un fichier pour le lire à partir d'un chemin comme public: //2016-03/Places.xls.

Quelle fonction dois-je appeler pour obtenir le vrai chemin d'un fichier?



4
Pour lire avec quoi? Ce chemin fonctionne avec presque tout, par exemple file_get_contents ('public: // ...') fonctionne très bien.
Berdir

1
J'ai eu la réponse en termes de drupal 8, c'est `\ Drupal :: service ('file_system') -> realpath ('public: //2016-03/Places_2.xlsx')`
Nisam

1
Postez-le comme réponse et acceptez-le comme solution. Cela aidera les autres avec la même question.
Aram Boyajyan

1
J'ai eu une situation similaire, mais j'ai fini par utiliser file_create_url car il peut gérer managed files (These are files that have either been uploaded by users or were generated automatically (for example through CSS aggregation))etshipped files (those outside of the files directory, which ship as part of Drupal core or contributed modules or themes)
usernameabc

Réponses:


16

Enfin, j'ai obtenu la solution en creusant le code Drupal.
Nous pouvons obtenir le chemin réel ou le chemin absolu en utilisant le service file_system .

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

4
sont-ils pour les fichiers téléchargés via Drupal? Que se passe-t-il s'ils sont hébergés en externe? 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.est mentionné la documentation pour FileSystem :: realpath
usernameabc

13

La réponse @Nisam était correcte mais maintenant elle est obsolète: fonction drupal_realpath

Obsolète

dans Drupal 8.0.x-dev, sera supprimé avant Drupal 9.0.0. Utilisez \ Drupal \ Core \ File \ FileSystem :: realpath ().

Vous devez donc utiliser FileSystem :: realpath .

Exemple:

$file = File::load($file_id);
$uri = $file->getFileUri();
$stream_wrapper_manager = \Drupal::service('stream_wrapper_manager')->getViaUri($uri);
$file_path = $stream_wrapper_manager->realpath();
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.