Je dois obtenir le chemin pour public: // à l'exécution. Existe-t-il une fonction que je peux utiliser pour l'obtenir?
43
Vous pouvez utiliser le code suivant pour obtenir le chemin réel de public: //.
if ($wrapper = file_stream_wrapper_get_instance_by_uri('public://')) {
$realpath = $wrapper->realpath();
// ...
}
Ce code est la version simplifiée du code utilisé par file_create_url()
, avec les différences suivantes:
$wrapper->getExternalUrl()
puisque l'OP demande le chemin, pas l'URLSi l'OP voulait l'URL pour public: //, j'aurais utilisé le code suivant, qui est toujours une version simplifiée du code utilisé par la fonction Drupal, qui doit être plus générique.
if ($wrapper = file_stream_wrapper_get_instance_by_uri('public://')) {
$url = $wrapper->getExternalUrl();
}
file_create_url()
; vous verrez que le code exécuté, dans ce cas, est exactement celui que j'ai écrit dans ma réponse.file_create_url()
vous./var/www/webroot/etc/more_folders/
Vous pouvez utiliser la fonction file_create_url .
la source
global $base_url
pour le supprimer et rendre ce serveur agnostique.global $base_url; $path = file_create_url($file_object->uri); $path = preg_replace('#' . $base_url . '#', '', $path);
Assurez-vous d'utiliser le '#' dans l'expression régulière, sinon le remplacement échouera à cause d'un '/' non échappé dans $ base_url.Si vous utilisez uniquement des fichiers locaux ( pas à distance! ), Vous pouvez également essayer drupal_realpath ()
Il reviendra:
la source
Voir les exemples suivants:
ou:
Vérifiez l'API pour
DrupalPublicStreamWrapper
.L'utilisation
file_create_url()
ne fonctionne pas dans tous les cas (comme le suggèrent les autres réponses), car l'URL renvoyée ne doit pas nécessairement se trouver sur le même serveur. Et l'utilisation$_SERVER['DOCUMENT_ROOT']
ne fonctionne que pour certaines configurations de serveur.Si vous ne souhaitez pas utiliser les wrappers de flux, vous pouvez essayer une solution plus simple:
Sinon, si vous avez besoin de quelque chose qui fonctionne de manière plus générale, vérifiez la solution de @ hannanxp :
En savoir plus: Comment convertir un fichier URI en chemin relatif?
En relation:
la source