Wie erhalte ich die öffentliche URL einer Datei aus dem Uri oder Dateinamen?

7

Ich verwende PHP von mit einer Ansicht ( Views PHP ). Ich versuche, die echte URL einer Datei aus einer Dateireferenz zu extrahieren. Ich kann den Uri der Datei und / oder den Dateinamen abrufen. Welche Drupal-Funktion kann ich verwenden, um die tatsächliche öffentliche URL der Datei abzurufen?

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

Antworten:

17

Was genau meinst du mit "öffentliche URL"?

file_create_url () kann die absolute URL zum Bild sofort angeben .

$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()erwartet eine gültige uri. drupal_realpath()gibt den Serverpfad an, der nicht funktioniert.

Ich habe auch Ihre Datenbankabfrage geändert, um zu vermeiden, dass SQL-Injection anfällig ist.

AyeshK
quelle
9

Nicht verwenden, drupal_realpath()da es jetzt veraltet ist .

Es kann eine der folgenden Optionen verwendet werden:

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);
Ankit Agrawal
quelle
@ user379468 Hat die oben genannte Lösung für Sie funktioniert oder wenn Sie eine bessere Lösung gefunden haben, teilen Sie diese bitte mit. Vielen Dank!!
Ankit Agrawal
Dies ist ein häufiges Missverständnis, das falsch ist. drupal_realpath()ist nicht veraltet - es wird nur in Fällen abgeraten, in denen ein Pfad entfernt sein könnte, da er nur für lokale Pfade funktioniert. Das erste Code-Snippet, das oben veröffentlicht wurde, ist genau das, was drupal_realpath()unter der Haube funktioniert.
GuyPaddock
Zur Verdeutlichung: Mein Kommentar ist spezifisch für Drupal 7. In beiden Fällen stehe ich immer noch zu meiner Behauptung, dass es nicht besser ist, denselben Code wie in einer veralteten Funktion zu verwenden, als nur die veraltete Funktion aufzurufen.
GuyPaddock