Error message

You are browsing documentation for drupal 7.x, which is not supported anymore. Read the updated version of this page for drupal 11.x (the latest version).

function file_create_url

Same name and namespace in other branches
  1. 9 core/includes/file.inc \file_create_url()
  2. 8.9.x core/includes/file.inc \file_create_url()

Creates a web-accessible URL for a stream to an external or local file.

Compatibility: normal paths and stream wrappers.

There are two kinds of local files:

  • "managed files", i.e. those stored by a Drupal-compatible stream wrapper. These are files that have either been uploaded by users or were generated automatically (for example through CSS aggregation).
  • "shipped files", i.e. those outside of the files directory, which ship as part of Drupal core or contributed modules or themes.

Parameters

$uri: The URI to a file for which we need an external URL, or the path to a shipped file.

Return value

A string containing a URL that may be used to access the file. If the provided string already contains a preceding 'http', 'https', or '/', nothing is done and the same string is returned. If a stream wrapper could not be found to generate an external URL, then FALSE is returned.

See also

http://drupal.org/node/515192

Related topics

File interface
Common file handling functions.
40 calls to file_create_url()
CascadingStylesheetsTestCase::testRenderFile in modules/simpletest/tests/common.test
Tests rendering the stylesheets.
ColorTestCase::_testColor in modules/color/color.test
Tests the Color module functionality using the given theme.
DrupalUnitTestCase::setUp in modules/simpletest/drupal_web_test_case.php
Sets up unit test environment.
DrupalWebTestCase::prepareEnvironment in modules/simpletest/drupal_web_test_case.php
Prepares the current environment for running the test.
drupal_build_css_cache in includes/common.inc
Aggregates and optimizes CSS files into a cache file in the files directory.

... See full list

File

includes/file.inc, line 381

Code

function file_create_url ($uri) {
 // Allow the URI to be altered, e.g. to serve a file from a CDN or static
 // file server.
 drupal_alter ('file_url', $uri);
 $scheme = file_uri_scheme ($uri);
 if (!$scheme) {
 // Allow for:
 // - root-relative URIs (e.g. /foo.jpg in http://example.com/foo.jpg)
 // - protocol-relative URIs (e.g. //bar.jpg, which is expanded to
 // http://example.com/bar.jpg by the browser when viewing a page over
 // HTTP and to https://example.com/bar.jpg when viewing a HTTPS page)
 // Both types of relative URIs are characterized by a leading slash, hence
 // we can use a single check.
 if (drupal_substr ($uri, 0, 1) == '/') {
 return $uri;
 }
 else {
 // If this is not a properly formatted stream, then it is a shipped file.
 // Therefore, return the urlencoded URI with the base URL prepended.
 return $GLOBALS['base_url'] . '/' . drupal_encode_path ($uri);
 }
 }
 elseif ($scheme == 'http' || $scheme == 'https') {
 // Check for HTTP so that we don't have to implement getExternalUrl() for
 // the HTTP wrapper.
 return $uri;
 }
 else {
 // Attempt to return an external URL using the appropriate wrapper.
 if ($wrapper = file_stream_wrapper_get_instance_by_uri ($uri)) {
 return $wrapper->getExternalUrl ();
 }
 else {
 return FALSE;
 }
 }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.