代码之家  ›  专栏  ›  技术社区  ›  Mohit Jain

如何在Drupal中获得图像的绝对路径?

  •  5
  • Mohit Jain  · 技术社区  · 14 年前

    我在drupal/sites/default/files/images/中有一些图片。

    我怎样才能得到像abc.jpg这样放在这个目录中的图像的绝对路径?

    6 回复  |  直到 8 年前
        1
  •  12
  •   user113292    14 年前

    如果Drupal在自己的域中(即, http://example.com ,绝对路径为 /sites/default/files/images/abc.jpg .

    如果Drupal在子文件夹中(例如 http://example.com/drupal ,绝对路径为 /drupal/sites/default/files/images/abc.jpg .


    正如我在回答你删除的同一个问题时所解释的,如果你试图以编程方式生成路径(也就是说,你不知道文件目录在哪里),你需要使用 file_directory_path() :

    $image = file_directory_path() . "/images/abc.jpg";
    

    因此,如果文件位于:

    • 网站/默认/文件 : $image = "sites/default/files/images/abc.jpg" .
    • 网站/example.com/files : $image = "sites/example.com/files/images/abc.jpg" .

    假设前面的问题仍然是用例,那么应该使用 l() theme_image() 在模块中分别生成链接和图像。这将确保在Drupal的环境中生成的路径是正确的。

    使用之前提供的预期输出,解决方案将是:

    // Images are in drupalroot/sites/default/files/images
    $path = file_directory_path() . '/images/';
    
    $detail_file = 'detail_1.jpg';
    $image_file  = '1.jpg';
    
    $img = theme('image', $path . $image_file);
    
    $options = array(
      'attributes' => array(
        'title' => t('Sample title for image 1 lorem ipsum'),
      ),
      'html' => TRUE,
    );
    $output = l($img, $path . $detail_file, $options);
    

    因此,假设您的站点位于 http://example.com/ 输出为:

    <a href="/sites/default/files/images/default_1.jpg" title="Sample title for image 1 lorem ipsum">
      <img src="/sites/default/files/images/1.jpg" height="<image height>" width="<image width>" />
    </a>
    

    但如果您的站点位于子文件夹中(例如 http://example.com/drupal ,输出为:

    <a href="/drupal/sites/default/files/images/default_1.jpg" title="Sample title for image 1 lorem ipsum">
      <img src="/drupal/sites/default/files/images/1.jpg" height="<image height>" width="<image width>" />
    </a>
    
        2
  •  11
  •   nxplace    12 年前

    德鲁巴7

    $relativePath = "blabla/abc.jpg";
    
    $uri = file_build_uri($relativePath);
    
    //show public://blabla/abc.jpg
    echo $uri; 
    
    $url = file_create_url($uri);
    
    //show http://www.yoursite.com/sites/default/files/blabla/abc.jpg
    echo $url; 
    
        3
  •  4
  •   Rafa    13 年前

    只使用

    $url_image = url('sites/default/files/'.file_uri_target($uri), array('absolute'=>true));
    

    在这种情况下,您将拥有类似“http://www.mywebsite.com/sites/default/files/images/image.jpeg”的路径。

    $uri是一个内部路径,如“public://images/image.jpeg”

    这是Drupal 7,享受它,爱它

        4
  •  2
  •   rashidkhan    11 年前

    已在Drupal 7中删除文件\目录\路径。如果使用它,将收到一个错误“调用未定义函数”。请尝试使用Drupal_real_path或。您可以在这里找到不推荐使用的函数。 http://api.drupal.org/api/drupal/includes!file.inc/function/file_directory_path/6

        5
  •  1
  •   warmth    12 年前

    public:// 将为您提供公用文件夹的绝对路径

    示例:访问

    drupal/sites/default/files/images/
    

    只放

    public://images/
    
        6
  •  0
  •   trante    13 年前

    我尝试了马克的解决方案,发现我的目录是 “/sites/default/files/images/a.jpg”页

    但是当我将它作为img-src写入节点时,它没有显示相关的图像。 另外,当我写信的时候 “./sites/default/files/images/a.jpg(站点/默认值/文件/图像/a.jpg)”。 它奏效了:

    因为在第一种情况下,Drupal试图在 “内容/网站/默认值/文件/图像/a.jpg”