Same name and namespace in other branches
  1. 8.9.x core/lib/Drupal/Core/StreamWrapper/PublicStream.php \Drupal\Core\StreamWrapper\PublicStream
  2. 9 core/lib/Drupal/Core/StreamWrapper/PublicStream.php \Drupal\Core\StreamWrapper\PublicStream

Defines a Drupal public (public://) stream wrapper class.

Provides support for storing publicly accessible files with the Drupal file interface.

Hierarchy

Expanded class hierarchy of PublicStream

15 files declare their use of PublicStream
CachedStorageTest.php in core/tests/Drupal/KernelTests/Core/Config/Storage/CachedStorageTest.php
DummyRemoteStreamWrapper.php in core/modules/file/tests/file_test/src/StreamWrapper/DummyRemoteStreamWrapper.php
FileStorageTest.php in core/tests/Drupal/KernelTests/Core/Config/Storage/FileStorageTest.php
FileSystemForm.php in core/modules/system/src/Form/FileSystemForm.php
FilterHtmlImageSecureTest.php in core/modules/filter/tests/src/Functional/FilterHtmlImageSecureTest.php

... See full list

1 string reference to 'PublicStream'
core.services.yml in core/core.services.yml
core/core.services.yml
1 service uses PublicStream
stream_wrapper.public in core/core.services.yml
Drupal\Core\StreamWrapper\PublicStream

File

core/lib/Drupal/Core/StreamWrapper/PublicStream.php, line 16

Namespace

Drupal\Core\StreamWrapper
View source
class PublicStream extends LocalStream {

  /**
   * {@inheritdoc}
   */
  public static function getType() {
    return StreamWrapperInterface::LOCAL_NORMAL;
  }

  /**
   * {@inheritdoc}
   */
  public function getName() {
    return t('Public files');
  }

  /**
   * {@inheritdoc}
   */
  public function getDescription() {
    return t('Public local files served by the webserver.');
  }

  /**
   * {@inheritdoc}
   */
  public function getDirectoryPath() {
    return static::basePath();
  }

  /**
   * {@inheritdoc}
   */
  public function getExternalUrl() {
    $path = str_replace('\\', '/', $this
      ->getTarget());
    return static::baseUrl() . '/' . UrlHelper::encodePath($path);
  }

  /**
   * Finds and returns the base URL for public://.
   *
   * Defaults to the current site's base URL plus directory path.
   *
   * Note that this static method is used by \Drupal\system\Form\FileSystemForm
   * so you should alter that form or substitute a different form if you change
   * the class providing the stream_wrapper.public service.
   *
   * @return string
   *   The external base URL for public://
   */
  public static function baseUrl() {
    $settings_base_url = Settings::get('file_public_base_url', '');
    if ($settings_base_url) {
      return (string) $settings_base_url;
    }
    else {
      return $GLOBALS['base_url'] . '/' . static::basePath();
    }
  }

  /**
   * Returns the base path for public://.
   *
   * If we have a setting for the public:// scheme's path, we use that.
   * Otherwise we build a reasonable default based on the site.path service if
   * it's available, or a default behavior based on the request.
   *
   * Note that this static method is used by \Drupal\system\Form\FileSystemForm
   * so you should alter that form or substitute a different form if you change
   * the class providing the stream_wrapper.public service.
   *
   * The site path is injectable from the site.path service:
   * @code
   * $base_path = PublicStream::basePath(\Drupal::getContainer()->getParameter('site.path'));
   * @endcode
   *
   * @param string $site_path
   *   (optional) The site.path service parameter, which is typically the path
   *   to sites/ in a Drupal installation. This allows you to inject the site
   *   path using services from the caller. If omitted, this method will use the
   *   global service container or the kernel's default behavior to determine
   *   the site path.
   *
   * @return string
   *   The base path for public:// typically sites/default/files.
   */
  public static function basePath($site_path = NULL) {
    if ($site_path === NULL) {

      // Find the site path. Kernel service is not always available at this
      // point, but is preferred, when available.
      if (\Drupal::hasService('kernel')) {
        $site_path = \Drupal::getContainer()
          ->getParameter('site.path');
      }
      else {

        // If there is no kernel available yet, we call the static
        // findSitePath().
        $site_path = DrupalKernel::findSitePath(Request::createFromGlobals());
      }
    }
    return Settings::get('file_public_path', $site_path . '/files');
  }

  /**
   * {@inheritdoc}
   */
  protected function getLocalPath($uri = NULL) {
    $path = parent::getLocalPath($uri);
    if (!$path || str_starts_with($path, 'vfs://')) {
      return $path;
    }
    if (Settings::get('sa_core_2022_012_override') === TRUE) {
      return $path;
    }
    $private_path = Settings::get('file_private_path');
    if ($private_path) {
      $private_path = realpath($private_path);
      if ($private_path && str_starts_with($path, $private_path)) {
        return FALSE;
      }
    }
    return $path;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
LocalStream::$context public property Stream context resource.
LocalStream::$handle public property A generic resource handle.
LocalStream::$uri protected property Instance URI (stream).
LocalStream::dirname public function Gets the name of the directory from a given path. Overrides StreamWrapperInterface::dirname
LocalStream::dir_closedir public function Close directory handle. Overrides PhpStreamWrapperInterface::dir_closedir
LocalStream::dir_opendir public function Open directory handle. Overrides PhpStreamWrapperInterface::dir_opendir
LocalStream::dir_readdir public function Read entry from directory handle. Overrides PhpStreamWrapperInterface::dir_readdir
LocalStream::dir_rewinddir public function Rewind directory handle. Overrides PhpStreamWrapperInterface::dir_rewinddir
LocalStream::getFileSystem private function Returns file system service.
LocalStream::getTarget protected function Returns the local writable target of the resource within the stream.
LocalStream::getUri public function Returns the stream resource URI. Overrides StreamWrapperInterface::getUri
LocalStream::mkdir public function Create a directory. Overrides PhpStreamWrapperInterface::mkdir 1
LocalStream::realpath public function Returns canonical, absolute path of the resource. Overrides StreamWrapperInterface::realpath 1
LocalStream::rename public function Renames a file or directory. Overrides PhpStreamWrapperInterface::rename 1
LocalStream::rmdir public function Removes a directory. Overrides PhpStreamWrapperInterface::rmdir 1
LocalStream::setUri public function Sets the absolute stream resource URI. Overrides StreamWrapperInterface::setUri
LocalStream::stream_cast public function Retrieve the underlying stream resource. Overrides PhpStreamWrapperInterface::stream_cast
LocalStream::stream_close public function Closes stream. Overrides PhpStreamWrapperInterface::stream_close
LocalStream::stream_eof public function Tests for end-of-file on a file pointer. Overrides PhpStreamWrapperInterface::stream_eof
LocalStream::stream_flush public function Flushes the output. Overrides PhpStreamWrapperInterface::stream_flush 1
LocalStream::stream_lock public function Advisory file locking. Overrides PhpStreamWrapperInterface::stream_lock 1
LocalStream::stream_metadata public function Sets metadata on the stream. Overrides PhpStreamWrapperInterface::stream_metadata 1
LocalStream::stream_open public function Opens file or URL. Overrides PhpStreamWrapperInterface::stream_open 1
LocalStream::stream_read public function Read from stream. Overrides PhpStreamWrapperInterface::stream_read
LocalStream::stream_seek public function Seeks to specific location in a stream. Overrides PhpStreamWrapperInterface::stream_seek
LocalStream::stream_set_option public function Since Windows systems do not allow it and it is not needed for most use cases anyway, this method is not supported on local files and will trigger an error and return false. If needed, custom subclasses can provide OS-specific implementations for… Overrides PhpStreamWrapperInterface::stream_set_option
LocalStream::stream_stat public function Retrieve information about a file resource. Overrides PhpStreamWrapperInterface::stream_stat
LocalStream::stream_tell public function Retrieve the current position of a stream. Overrides PhpStreamWrapperInterface::stream_tell
LocalStream::stream_truncate public function Truncate stream. Overrides PhpStreamWrapperInterface::stream_truncate 1
LocalStream::stream_write public function Write to stream. Overrides PhpStreamWrapperInterface::stream_write 1
LocalStream::unlink public function Delete a file. Overrides PhpStreamWrapperInterface::unlink 1
LocalStream::url_stat public function Retrieve information about a file. Overrides PhpStreamWrapperInterface::url_stat
PublicStream::basePath public static function Returns the base path for public://. 1
PublicStream::baseUrl public static function Finds and returns the base URL for public://. 1
PublicStream::getDescription public function Returns the description of the stream wrapper for use in the UI. Overrides StreamWrapperInterface::getDescription 2
PublicStream::getDirectoryPath public function Gets the path that the wrapper is responsible for. Overrides LocalStream::getDirectoryPath
PublicStream::getExternalUrl public function Returns a web accessible URL for the resource. Overrides StreamWrapperInterface::getExternalUrl
PublicStream::getLocalPath protected function Returns the canonical absolute path of the URI, if possible. Overrides LocalStream::getLocalPath
PublicStream::getName public function Returns the name of the stream wrapper for use in the UI. Overrides StreamWrapperInterface::getName 2
PublicStream::getType public static function Returns the type of stream wrapper. Overrides LocalStream::getType 2
StreamWrapperInterface::ALL constant A filter that matches all wrappers.
StreamWrapperInterface::HIDDEN constant Defines the stream wrapper bit flag for a hidden file.
StreamWrapperInterface::LOCAL constant Refers to a local file system location.
StreamWrapperInterface::LOCAL_HIDDEN constant Hidden, readable and writable using local files.
StreamWrapperInterface::LOCAL_NORMAL constant Visible, readable and writable using local files.
StreamWrapperInterface::NORMAL constant The default 'type' flag.
StreamWrapperInterface::READ constant Wrapper is readable (almost always true).
StreamWrapperInterface::READ_VISIBLE constant Visible and read-only.
StreamWrapperInterface::VISIBLE constant Exposed in the UI and potentially web accessible.
StreamWrapperInterface::WRITE constant Wrapper is writable.
StreamWrapperInterface::WRITE_VISIBLE constant Visible, readable and writable.