URIまたはファイル名からファイルのパブリックURLを取得する方法


7

ビューでPHPを使用しています(ビューPHP)ファイル参照からファイルの実際のURLを抽出しようとしています。ファイルのURIまたはファイル名を取得できます。ファイルの実際のパブリックURLを取得するには、どのdrupal関数を使用できますか?

$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);

回答:


17

「パブリックURL」とはどういう意味ですか?

file_create_url()は、そのままの状態で画像の絶対URLを提供できます。

$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()有効なURIが必要です。drupal_realpath()機能しないサーバーパスを指定します。

SQLインジェクションの脆弱性を回避するために、データベースクエリも変更しました。


9

現在非推奨drupal_realpath()となっているため、使用しないでください。

次のいずれかを使用できます。

。(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();
}


。(file_create_url($uri)):

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

@ user379468上記の解決策はうまくいきましたか、または共有するよりも良い解決策を見つけた場合。ありがとう!!
Ankit Agrawal 2013

これは正しくない一般的な誤解です。drupal_realpath()は非推奨ではありません-パスがローカルパスに対してのみ機能するため、パスがリモートである可能性がある場合はお勧めしません。上に掲載された最初のコードスニペットは、実際には内部で何をするかdrupal_realpath()です。
GuyPaddock

明確にするために:私のコメントはDrupal 7に固有のものです。どちらの方法でも、廃止予定の関数内にあるものと同じコードを使用することは、廃止予定の関数を呼び出すだけにすぎないという私の主張に引き続き同意します。
GuyPaddock

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.