Làm cách nào để lấy url công khai của tệp từ tên tệp hoặc tên tệp


7

Tôi đang sử dụng php từ chế độ xem ( Lượt xem PHP ) Tôi đang cố trích xuất url thực của tệp từ tham chiếu tệp. Tôi có thể lấy uri của tập tin và tên tệp. Tôi có thể sử dụng chức năng drupal nào để lấy URL công khai thực sự của tệp?.

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

Câu trả lời:


17

Bạn có ý nghĩa gì bởi "URL công khai" chính xác?

file_create_url () có thể cung cấp URL tuyệt đối cho hình ảnh bên ngoài hộp.

$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()mong đợi một uri hợp lệ. drupal_realpath()đưa ra đường dẫn máy chủ không hoạt động.

Tôi cũng đã thay đổi truy vấn cơ sở dữ liệu của bạn để tránh bất kỳ SQL SQL nào dễ bị tấn công.


9

Đừng sử dụng drupal_realpath()vì nó đã bị phản đối ngay bây giờ.

Một trong những điều sau đây có thể được sử dụng:

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 Giải pháp trên có hiệu quả với bạn không, hoặc nếu bạn tìm thấy giải pháp nào đó tốt hơn xin vui lòng chia sẻ. Cảm ơn!!
Ankit Agrawal

Đây là một quan niệm sai lầm phổ biến mà không chính xác. drupal_realpath()không bị phản đối - nó chỉ không được khuyến khích trong trường hợp một đường dẫn có thể ở xa, vì nó chỉ hoạt động cho các đường dẫn cục bộ. Đoạn mã đầu tiên được đăng ở trên chính xác là những gì drupal_realpath()làm dưới mui xe.
GuyPaddock

Để làm rõ: nhận xét của tôi là dành riêng cho Drupal 7. Dù bằng cách nào, tôi vẫn khẳng định rằng việc sử dụng cùng một mã với những gì bên trong hàm bị phản đối không tốt hơn là chỉ gọi hàm bị phản đối.
GuyPaddock

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.