web-dev-qa-db-fra.com

Obtenir le chemin brut et relatif d'un uri de fichier

J'ai un fichier avec un uri et je veux obtenir son chemin brut et relatif.

Uri: public://videos/Test Video.mp4 Chemin: /sites/default/files/videos/Test Video.mp4

J'ai déjà trouvé un moyen de le faire:

$file_uri = $file->getFileUri();
// public://videos/Test Video.mp4

$absolute_url = file_create_url($file_uri);
// https://www.example.com/sites/default/files/videos/Test%20Video.mp4

$relative_url = file_url_transform_relative($absolute_url);
// /sites/default/files/videos/Test%20Video.mp4

$relative_raw_url = rawurldecode($relative_url);
// /sites/default/files/videos/Test Video.mp4

Est-ce la voie Drupal? Ou existe-t-il une meilleure solution pour ce faire?

2
btemperli

La "voie Drupal" est toujours un terme flou car il y a généralement plus d'une réponse qui fonctionne.

Quoi qu'il en soit, si vous recherchez quelque chose de moins verbeux, il serait utile de regarder l'objet File et c'est la méthode url() . Cela vous évite quelques étapes et peut vous faire économiser du travail si l'ancien D7 fonctions de l'API du module de fichiers est prévu pour amortissement (comme file_load A).

Enfin, il est toujours utile d'utiliser les fonctions natives PHP quand vous le pouvez car elles rendent les choses plus portables. Pour dire parse_url() vous permet de découper/dés les URL des composants que vous souhaitez.

En mettant tout cela ensemble, rawurldecode(parse_url($file->url(), PHP_URL_PATH)) rassemble tous vos appels de fonction pour un résultat.

2
Shawn Conn