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

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.


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

@ 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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.