web-dev-qa-db-fra.com

Comment puis-je obtenir l'url publique d'un fichier à partir de l'URI ou du nom de fichier

J'utilise php à partir d'une vue ( Vues PHP ) J'essaie d'extraire l'URL réelle d'un fichier à partir d'une référence de fichier. Je peux obtenir l'uri du fichier et/ou le nom du fichier. Quelle fonction drupal puis-je utiliser pour obtenir l'URL publique réelle du fichier?.

$videouri = db_query('SELECT filename FROM `file_managed` WHERE fid = ' . $nidvideo)->fetchColumn();
//drupal_set_message('<pre>'. print_r($videourl, TRUE) .'</pre>');
$realpath = drupal_realpath($videouri);
$videourl = file_create_url($realpath);
return($videourl);
7
user379468

Qu'entendez-vous exactement par "URL publique"?

file_create_url () peut donner l'URL absolue à l'image hors de la boîte.

$videouri = db_query('SELECT uri FROM {file_managed} WHERE fid = :nidvideo', array(':nidvideo' => $nidvideo))->fetchColumn();
//drupal_set_message('<pre>'. print_r($videourl, TRUE) .'</pre>');
$videourl = file_create_url($videouri);

file_create_url() attend un uri valide. drupal_realpath() donne le chemin du serveur qui ne fonctionne pas.

J'ai également modifié votre requête de base de données pour éviter toute vulnérabilité d'injection SQL.

16
AyeshK

N'utilisez pas drupal_realpath() car il a été obsolète maintenant.

L'un des éléments suivants peut être utilisé:

1 . (file_stream_wrapper_get_instance_by_uri($uri)):

$uri = $field[0]['uri'];  // file path as uri: 'public://';
if ($wrapper = file_stream_wrapper_get_instance_by_uri($uri)) {
  $path = $wrapper->realpath();
}


2 . (file_create_url($uri)):

$uri = $node->field_video['und'][0]['uri'];  // file path as uri: 'public://';
$video_path = file_create_url($uri);
9
Ankit Agrawal
3
kenorb