8.2.x bootstrap.inc drupal_get_path($type, $name)
8.0.x bootstrap.inc drupal_get_path($type, $name)
8.1.x bootstrap.inc drupal_get_path($type, $name)
4.6.x common.inc drupal_get_path($type, $name)
4.7.x common.inc drupal_get_path($type, $name)
5.x common.inc drupal_get_path($type, $name)
6.x common.inc drupal_get_path($type, $name)
7.x common.inc drupal_get_path($type, $name)

Returns the path to a system item (module, theme, etc.).


$type: The type of the item (i.e. theme, theme_engine, module, profile).

$name: The name of the item for which the path is requested.

Return value

The path to the requested item.

42 calls to drupal_get_path()
aggregator_init in modules/aggregator/aggregator.module
Implementation of hook_init().
block-admin-display-form.tpl.php in modules/block/block-admin-display-form.tpl.php
block-admin-display-form.tpl.php Default theme implementation to configure blocks.
block_admin_display_form in modules/block/block.admin.inc
Generate main blocks administration form.
book_init in modules/book/book.module
Implementation of hook_init(). Add's the book module's CSS.
color_get_info in modules/color/color.module
Retrieve the color.module info for a particular theme.

... See full list


includes/common.inc, line 1790
Common functions that many Drupal modules will need to reference.


function drupal_get_path($type, $name) {
  return dirname(drupal_get_filename($type, $name));


If you need to refer to other files within the same module.


doesn't require a database hit so has better performance

Program to an interface not an implementation. That's the whole point of this function. :)

Just to clarify a few points about seanburlington comment on database hits:

  • drupal_get_filename statically caches its results so you only have a DB hit on the first drupal_get_path call for a given module or theme.
  • global $theme_path; is a quick way to get at the path to the current theme without hitting the DB.
  • You can often use relative paths within a module. Use dirname(__FILE__) when you need the whole path.

The path returned by this function will be relative to the DocumentRoot in which Drupal is running.

you may not need to use the path argument of the hook_theme(), instead you can just prefix the value of the template string with the name of the subfolder that contains the template

'template' => 'templates/mymoduletemplate' ,

Had some problems with this. Here's a simple way to use this:

    function my_path() {
        return drupal_get_path('theme', 'YourThemeName');
<img src="<?php echo my_path(); ?>/img/test.jpg">

You can condense this down further and include it in a header that's required on every page and end up with a relative path variable like:

<?php echo p(); ?>/img/test.jpg

Hope this helps someone.

It's usually best to avoid calling functions in .tpl files (excepting the obvious use-cases of course).
In this case, why don't you add a variable to all page templates via template_preprocess_page() to hold your relative path?
This would condense all those function calls into just one, or none if you write the p() function contents inside your _preprocess_page() function.

What i mean is writing this in template.php:

function mytheme_preprocess_page(&$vars){
  $vars['p'] = drupal_get_path('theme', 'mytheme');

This avoids all those function calls (since the function above is called only once!), and in your .tpl file you'd have something like this:

<?php echo $p; ?>/img/test.jpg

Note that the function call has been replaced by a variable, thus making it even better, right?


Remember that the $name variable is the machine-readable name, which is the name of your .info file, not the human-readable name contained in the .info file. So, for a theme, if your info file is called mytheme.info, and the name variable within that file is My Theme Name, use mytheme for the $name variable.

Cross linking to function for current theme...


Shouldn't available types be listed or cross-referenced here?

like this.
drupal_add_js(drupal_get_path('module', 'project_extras') . '/project_extras.js');
drupal_add_js(drupal_get_path('module', 'yourmodulename') . '/yourmodulename.js');

if its in theme
drupal_add_js(drupal_get_path('theme', 'themename') . '/themename.js');

For example, I'd like to get the path of sites/all/libraries/. What can I do?

base_path() . "/sites/all/libraries/";


global $base_path;

$base_path . "sites/all/libraries";

Assuming you have the Libraries module installed, you can use libraries_get_path()

Note that drupal_get_path() does NOT add a trailing slash. So if you want to include some file in module's folder, you will need to add the slash yourself.