file_create_url($uri)
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:
string $uri: The URI to a file for which we need an external URL, or the path to a shipped file.
string 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.
https://www.drupal.org/node/515192
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::moduleHandler()->alter('file_url', $uri); $scheme = \Drupal::service('file_system')->uriScheme($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 (Unicode::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. $options = UrlHelper::parse($uri); $path = $GLOBALS['base_url'] . '/' . UrlHelper::encodePath($options['path']); // Append the query. if ($options['query']) { $path .= '?' . UrlHelper::buildQuery($options['query']); } // Append fragment. if ($options['fragment']) { $path .= '#' . $options['fragment']; } return $path; } } elseif ($scheme == 'http' || $scheme == 'https' || $scheme == 'data') { // Check for HTTP and data URI-encoded URLs so that we don't have to // implement getExternalUrl() for the HTTP and data schemes. return $uri; } else { // Attempt to return an external URL using the appropriate wrapper. if ($wrapper = \Drupal::service('stream_wrapper_manager')->getViaUri($uri)) { return $wrapper->getExternalUrl(); } else { return FALSE; } } }
© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/core!includes!file.inc/function/file_create_url/8.1.x