function drupal_get_filename in Drupal 6
Same name and namespace in other branches
- 8 core/includes/bootstrap.inc \drupal_get_filename()
- 4 includes/bootstrap.inc \drupal_get_filename()
- 5 includes/bootstrap.inc \drupal_get_filename()
- 7 includes/bootstrap.inc \drupal_get_filename()
- 9 core/includes/bootstrap.inc \drupal_get_filename()
Returns and optionally sets the filename for a system item (module, theme, etc.). The filename, whether provided, cached, or retrieved from the database, is only returned if the file exists.
This function plays a key role in allowing Drupal's resources (modules and themes) to be located in different places depending on a site's configuration. For example, a module 'foo' may legally be be located in any of these three places:
modules/foo/foo.module sites/all/modules/foo/foo.module sites/example.com/modules/foo/foo.module
Calling drupal_get_filename('module', 'foo') will give you one of the above, depending on where the module is located.
Parameters
$type: The type of the item (i.e. theme, theme_engine, module, profile).
$name: The name of the item for which the filename is requested.
$filename: The filename of the item if it is to be set explicitly rather than by consulting the database.
Return value
The filename of the requested item.
5 calls to drupal_get_filename()
- drupal_get_path in includes/
common.inc - Returns the path to a system item (module, theme, etc.).
- drupal_install_system in includes/
install.inc - Callback to install the system module.
- drupal_load in includes/
bootstrap.inc - Includes a file with the provided type and name. This prevents including a theme, engine, module, etc., more than once.
- module_list in includes/
module.inc - Collect a list of all loaded modules. During the bootstrap, return only vital modules. See bootstrap.inc
- system_modules_uninstall_confirm_form in modules/
system/ system.admin.inc - Confirm uninstall of selected modules.
File
- includes/
bootstrap.inc, line 511 - Functions that need to be loaded on every Drupal request.
Code
function drupal_get_filename($type, $name, $filename = NULL) {
static $files = array();
if (!isset($files[$type])) {
$files[$type] = array();
}
if (!empty($filename) && file_exists($filename)) {
$files[$type][$name] = $filename;
}
elseif (isset($files[$type][$name])) {
// nothing
}
elseif (db_is_active() && (($file = db_result(db_query("SELECT filename FROM {system} WHERE name = '%s' AND type = '%s'", $name, $type))) && file_exists($file))) {
$files[$type][$name] = $file;
}
else {
// Fallback to searching the filesystem if the database connection is
// not established or the requested file is not found.
$config = conf_path();
$dir = $type == 'theme_engine' ? 'themes/engines' : "{$type}s";
$file = $type == 'theme_engine' ? "{$name}.engine" : "{$name}.{$type}";
foreach (array(
"{$config}/{$dir}/{$file}",
"{$config}/{$dir}/{$name}/{$file}",
"{$dir}/{$file}",
"{$dir}/{$name}/{$file}",
) as $file) {
if (file_exists($file)) {
$files[$type][$name] = $file;
break;
}
}
}
if (isset($files[$type][$name])) {
return $files[$type][$name];
}
}