Unverified Commit 5831c967 authored by Alex Pott's avatar Alex Pott
Browse files

Issue #2228087 by quietone, longwave, Kristen Pol, jungle, VladimirAus,...

Issue #2228087 by quietone, longwave, Kristen Pol, jungle, VladimirAus, phayes: PhpStreamWrapperInterface lacks docblocks

(cherry picked from commit 5af306307dcd345210ad752b376dc32e34338b50)
parent cf7be709
Loading
Loading
Loading
Loading
+19 −176
Original line number Diff line number Diff line
@@ -144,21 +144,7 @@ protected function getLocalPath($uri = NULL) {
  }

  /**
   * Support for fopen(), file_get_contents(), file_put_contents() etc.
   *
   * @param string $uri
   *   A string containing the URI to the file to open.
   * @param int $mode
   *   The file mode ("r", "wb" etc.).
   * @param int $options
   *   A bit mask of STREAM_USE_PATH and STREAM_REPORT_ERRORS.
   * @param string $opened_path
   *   A string containing the path actually opened.
   *
   * @return bool
   *   Returns TRUE if file was opened successfully.
   *
   * @see http://php.net/manual/streamwrapper.stream-open.php
   * {@inheritdoc}
   */
  public function stream_open($uri, $mode, $options, &$opened_path) {
    $this->uri = $uri;
@@ -179,20 +165,7 @@ public function stream_open($uri, $mode, $options, &$opened_path) {
  }

  /**
   * Support for flock().
   *
   * @param int $operation
   *   One of the following:
   *   - LOCK_SH to acquire a shared lock (reader).
   *   - LOCK_EX to acquire an exclusive lock (writer).
   *   - LOCK_UN to release a lock (shared or exclusive).
   *   - LOCK_NB if you don't want flock() to block while locking (not
   *     supported on Windows).
   *
   * @return bool
   *   Always returns TRUE at the present time.
   *
   * @see http://php.net/manual/streamwrapper.stream-lock.php
   * {@inheritdoc}
   */
  public function stream_lock($operation) {
    if (in_array($operation, [LOCK_SH, LOCK_EX, LOCK_UN, LOCK_NB])) {
@@ -203,42 +176,21 @@ public function stream_lock($operation) {
  }

  /**
   * Support for fread(), file_get_contents() etc.
   *
   * @param int $count
   *   Maximum number of bytes to be read.
   *
   * @return string|bool
   *   The string that was read, or FALSE in case of an error.
   *
   * @see http://php.net/manual/streamwrapper.stream-read.php
   * {@inheritdoc}
   */
  public function stream_read($count) {
    return fread($this->handle, $count);
  }

  /**
   * Support for fwrite(), file_put_contents() etc.
   *
   * @param string $data
   *   The string to be written.
   *
   * @return int
   *   The number of bytes written.
   *
   * @see http://php.net/manual/streamwrapper.stream-write.php
   * {@inheritdoc}
   */
  public function stream_write($data) {
    return fwrite($this->handle, $data);
  }

  /**
   * Support for feof().
   *
   * @return bool
   *   TRUE if end-of-file has been reached.
   *
   * @see http://php.net/manual/streamwrapper.stream-eof.php
   * {@inheritdoc}
   */
  public function stream_eof() {
    return feof($this->handle);
@@ -254,49 +206,28 @@ public function stream_seek($offset, $whence = SEEK_SET) {
  }

  /**
   * Support for fflush().
   *
   * @return bool
   *   TRUE if data was successfully stored (or there was no data to store).
   *
   * @see http://php.net/manual/streamwrapper.stream-flush.php
   * {@inheritdoc}
   */
  public function stream_flush() {
    return fflush($this->handle);
  }

  /**
   * Support for ftell().
   *
   * @return bool
   *   The current offset in bytes from the beginning of file.
   *
   * @see http://php.net/manual/streamwrapper.stream-tell.php
   * {@inheritdoc}
   */
  public function stream_tell() {
    return ftell($this->handle);
  }

  /**
   * Support for fstat().
   *
   * @return bool
   *   An array with file status, or FALSE in case of an error - see fstat()
   *   for a description of this array.
   *
   * @see http://php.net/manual/streamwrapper.stream-stat.php
   * {@inheritdoc}
   */
  public function stream_stat() {
    return fstat($this->handle);
  }

  /**
   * Support for fclose().
   *
   * @return bool
   *   TRUE if stream was successfully closed.
   *
   * @see http://php.net/manual/streamwrapper.stream-close.php
   * {@inheritdoc}
   */
  public function stream_close() {
    return fclose($this->handle);
@@ -368,15 +299,7 @@ public function stream_truncate($new_size) {
  }

  /**
   * Support for unlink().
   *
   * @param string $uri
   *   A string containing the URI to the resource to delete.
   *
   * @return bool
   *   TRUE if resource was successfully deleted.
   *
   * @see http://php.net/manual/streamwrapper.unlink.php
   * {@inheritdoc}
   */
  public function unlink($uri) {
    $this->uri = $uri;
@@ -384,36 +307,14 @@ public function unlink($uri) {
  }

  /**
   * Support for rename().
   *
   * @param string $from_uri
   *   The URI to the file to rename.
   * @param string $to_uri
   *   The new URI for file.
   *
   * @return bool
   *   TRUE if file was successfully renamed.
   *
   * @see http://php.net/manual/streamwrapper.rename.php
   * {@inheritdoc}
   */
  public function rename($from_uri, $to_uri) {
    return rename($this->getLocalPath($from_uri), $this->getLocalPath($to_uri));
  }

  /**
   * Gets the name of the directory from a given path.
   *
   * This method is usually accessed through
   * \Drupal\Core\File\FileSystemInterface::dirname(), which wraps around the
   * PHP dirname() function because it does not support stream wrappers.
   *
   * @param string $uri
   *   A URI or path.
   *
   * @return string
   *   A string containing the directory name.
   *
   * @see \Drupal\Core\File\FileSystemInterface::dirname()
   * {@inheritdoc}
   */
  public function dirname($uri = NULL) {
    list($scheme) = explode('://', $uri, 2);
@@ -428,19 +329,7 @@ public function dirname($uri = NULL) {
  }

  /**
   * Support for mkdir().
   *
   * @param string $uri
   *   A string containing the URI to the directory to create.
   * @param int $mode
   *   Permission flags - see mkdir().
   * @param int $options
   *   A bit mask of STREAM_REPORT_ERRORS and STREAM_MKDIR_RECURSIVE.
   *
   * @return bool
   *   TRUE if directory was successfully created.
   *
   * @see http://php.net/manual/streamwrapper.mkdir.php
   * {@inheritdoc}
   */
  public function mkdir($uri, $mode, $options) {
    $this->uri = $uri;
@@ -464,17 +353,7 @@ public function mkdir($uri, $mode, $options) {
  }

  /**
   * Support for rmdir().
   *
   * @param string $uri
   *   A string containing the URI to the directory to delete.
   * @param int $options
   *   A bit mask of STREAM_REPORT_ERRORS.
   *
   * @return bool
   *   TRUE if directory was successfully removed.
   *
   * @see http://php.net/manual/streamwrapper.rmdir.php
   * {@inheritdoc}
   */
  public function rmdir($uri, $options) {
    $this->uri = $uri;
@@ -489,18 +368,7 @@ public function rmdir($uri, $options) {
  }

  /**
   * Support for stat().
   *
   * @param string $uri
   *   A string containing the URI to get information about.
   * @param int $flags
   *   A bit mask of STREAM_URL_STAT_LINK and STREAM_URL_STAT_QUIET.
   *
   * @return array
   *   An array with file status, or FALSE in case of an error - see fstat()
   *   for a description of this array.
   *
   * @see http://php.net/manual/streamwrapper.url-stat.php
   * {@inheritdoc}
   */
  public function url_stat($uri, $flags) {
    $this->uri = $uri;
@@ -516,17 +384,7 @@ public function url_stat($uri, $flags) {
  }

  /**
   * Support for opendir().
   *
   * @param string $uri
   *   A string containing the URI to the directory to open.
   * @param int $options
   *   Unknown (parameter is not documented in PHP Manual).
   *
   * @return bool
   *   TRUE on success.
   *
   * @see http://php.net/manual/streamwrapper.dir-opendir.php
   * {@inheritdoc}
   */
  public function dir_opendir($uri, $options) {
    $this->uri = $uri;
@@ -536,24 +394,14 @@ public function dir_opendir($uri, $options) {
  }

  /**
   * Support for readdir().
   *
   * @return string
   *   The next filename, or FALSE if there are no more files in the directory.
   *
   * @see http://php.net/manual/streamwrapper.dir-readdir.php
   * {@inheritdoc}
   */
  public function dir_readdir() {
    return readdir($this->handle);
  }

  /**
   * Support for rewinddir().
   *
   * @return bool
   *   TRUE on success.
   *
   * @see http://php.net/manual/streamwrapper.dir-rewinddir.php
   * {@inheritdoc}
   */
  public function dir_rewinddir() {
    rewinddir($this->handle);
@@ -564,12 +412,7 @@ public function dir_rewinddir() {
  }

  /**
   * Support for closedir().
   *
   * @return bool
   *   TRUE on success.
   *
   * @see http://php.net/manual/streamwrapper.dir-closedir.php
   * {@inheritdoc}
   */
  public function dir_closedir() {
    closedir($this->handle);
+311 −4
Original line number Diff line number Diff line
@@ -10,37 +10,144 @@
interface PhpStreamWrapperInterface {

  /**
   * Close directory handle.
   *
   * This method is called in response to closedir(). Any resources which were
   * locked, or allocated, during opening and use of the directory stream
   * should be released.
   *
   * @return bool
   *   Returns TRUE on success or FALSE on failure.
   *
   * @see closedir()
   * @see http://php.net/manual/en/streamwrapper.dir-closedir.php
   */
  public function dir_closedir();

  /**
   * Open directory handle.
   *
   * This method is called in response to opendir().
   *
   * @param string $path
   *   Specifies the URL that was passed to opendir().
   * @param int $options
   *   Whether or not to enforce safe_mode (0x04).
   *
   * @return bool
   *   Returns TRUE on success or FALSE on failure.
   *
   * @see opendir()
   * @see http://php.net/manual/en/streamwrapper.dir-opendir.php
   */
  public function dir_opendir($path, $options);

  /**
   * @return string
   * Read entry from directory handle.
   *
   * This method is called in response to readdir().
   *
   * @return string|false
   *   Should return string representing the next filename, or FALSE if there
   *   is no next file. Note, the return value will be casted to string.
   *
   * @see readdir()
   * @see http://php.net/manual/en/streamwrapper.dir-readdir.php
   */
  public function dir_readdir();

  /**
   * Rewind directory handle.
   *
   * This method is called in response to rewinddir(). Should reset the output
   * generated by PhpStreamWrapperInterface::dir_readdir. The next call to
   * PhpStreamWrapperInterface::dir_readdir should return the first entry in the
   * location returned by PhpStreamWrapperInterface::dir_opendir.
   *
   * @return bool
   *   Returns TRUE on success or FALSE on failure.
   *
   * @see rewinddir()
   * @see PhpStreamWrapperInterface::dir_readdir()
   * @see http://php.net/manual/en/streamwrapper.dir-rewinddir.php
   */
  public function dir_rewinddir();

  /**
   * Create a directory.
   *
   * This method is called in response to mkdir()
   *
   * Note, in order for the appropriate error message to be returned this method
   * should not be defined if the wrapper does not support creating directories.
   *
   * Note, the streamWrapper::$context property is updated if a valid context is
   * passed to the caller function.
   *
   * @param string $path
   *   Directory which should be created.
   * @param int $mode
   *   The value passed to mkdir().
   * @param int $options
   *   A bitwise mask of values, such as STREAM_MKDIR_RECURSIVE.
   *
   * @return bool
   *   Returns TRUE on success or FALSE on failure.
   *
   * @see mkdir()
   * @see PhpStreamWrapperInterface::rmdir()
   * @see http://php.net/manual/en/streamwrapper.mkdir.php
   */
  public function mkdir($path, $mode, $options);

  /**
   * Renames a file or directory.
   *
   * This method is called in response to rename(). Should attempt to rename
   * $path_from to $path_to.
   *
   * Note, in order for the appropriate error message to be returned this method
   * should not be defined if the wrapper does not support renaming files.
   *
   * Note, the streamWrapper::$context property is updated if a valid context is
   * passed to the caller function.
   *
   * @param string $path_from
   *   The URL to the current file.
   * @param string $path_to
   *   The URL which the $path_from should be renamed to.
   *
   * @return bool
   *   Returns TRUE on success or FALSE on failure.
   *
   * @see rename()
   * @see http://php.net/manual/en/streamwrapper.rename.php
   */
  public function rename($path_from, $path_to);

  /**
   * Removes a directory.
   *
   * This method is called in response to rmdir().
   *
   * Note, in order for the appropriate error message to be returned this method
   * should not be defined if the wrapper does not support removing directories.
   *
   * Note, the streamWrapper::$context property is updated if a valid context is
   * passed to the caller function.
   *
   * @param string $path
   *   The directory URL which should be removed.
   * @param int $options
   *   A bitwise mask of values, such as STREAM_MKDIR_RECURSIVE.
   *
   * @return bool
   *   Returns TRUE on success or FALSE on failure.
   *
   * @see rmdir()
   * @see PhpStreamWrapperInterface::mkdir()
   * @see PhpStreamWrapperInterface::unlink()
   * @see http://php.net/manual/en/streamwrapper.rmdir.php
   */
  public function rmdir($path, $options);

@@ -65,21 +172,77 @@ public function stream_cast($cast_as);

  /**
   * Closes stream.
   *
   * This method is called in response to fclose(). All resources that were
   * locked, or allocated, by the wrapper should be released.
   *
   * @see fclose()
   * @see PhpStreamWrapperInterface::dir_closedir()
   * @see http://php.net/manual/en/streamwrapper.stream-close.php
   */
  public function stream_close();

  /**
   * Tests for end-of-file on a file pointer.
   *
   * This method is called in response to feof().
   *
   * Warning, when reading the whole file (for example, with
   * file_get_contents()), PHP will call
   * PhpStreamWrapperInterface::stream_read() followed by
   * PhpStreamWrapperInterface::stream_eof() in a loop but as long as
   * PhpStreamWrapperInterface::stream_read() returns a non-empty string, the
   * return value of PhpStreamWrapperInterface::stream_eof() is ignored.
   *
   * @return bool
   *   Should return TRUE if the read/write position is at the end of the
   *   stream and if no more data is available to be read, or FALSE otherwise.
   *
   * @see feof()
   * @see http://php.net/manual/en/streamwrapper.stream-eof.php
   */
  public function stream_eof();

  /**
   * Flushes the output.
   *
   * This method is called in response to fflush() and when the stream is being
   * closed while any un-flushed data has been written to it before. If you have
   * cached data in your stream but not yet stored it into the underlying
   * storage, you should do so now.
   *
   * Note, if not implemented, FALSE is assumed as the return value.
   *
   * @return bool
   *   Should return TRUE if the cached data was successfully stored (or if
   *   there was no data to store), or FALSE if the data could not be stored.
   *
   * @see fflush()
   * @see http://php.net/manual/en/streamwrapper.stream-flush.php
   */
  public function stream_flush();

  /**
   * Advisory file locking.
   *
   * This method is called in response to flock(), when file_put_contents()
   * (when flags contains LOCK_EX), stream_set_blocking() and when closing the
   * stream (LOCK_UN).
   *
   * @param int $operation
   *   One of:
   *   - LOCK_SH: To acquire a shared lock (reader).
   *   - LOCK_EX: To acquire an exclusive lock (writer).
   *   - LOCK_UN: To release a lock (shared or exclusive).
   *   - LOCK_NB: If you don't want flock() to block while locking. This
   *     operation is not supported on Windows.
   *
   * @return bool
   *   Returns TRUE on success or FALSE on failure.
   *
   * @see flock()
   * @see stream_set_blocking()
   * @see http://php.net/manual/en/streamwrapper.stream-lock.php
   */
  public function stream_lock($operation);

@@ -116,12 +279,73 @@ public function stream_lock($operation);
  public function stream_metadata($path, $option, $value);

  /**
   * Opens file or URL.
   *
   * This method is called immediately after the wrapper is initialized (e.g.
   * by fopen() and file_get_contents()).
   *
   * Note the streamWrapper::$context property is updated if a valid context
   * is passed to the caller function.
   *
   * @param string $path
   *   Specifies the URL that was passed to the original function. Note that
   *   the URL can be broken apart with parse_url(). Note that only URLs
   *   delimited by "://" are supported. ":" and ":/" while technically valid
   *   URLs, are not.
   * @param string $mode
   *   The mode used to open the file, as detailed for fopen(). Note, remember
   *   to check if the mode is valid for the path requested.
   * @param int $options
   *   Holds additional flags set by the streams API. It can hold one or more
   *   of the following values ORed together:
   *   - STREAM_USE_PATH: If path is relative, search for the resource using
   *     the include_path.
   *   - STREAM_REPORT_ERRORS: If this flag is set, you are responsible for
   *     raising errors using trigger_error() during opening of the stream. If
   *     this flag is not set, you should not raise any errors.
   * @param string $opened_path
   *   If the path is opened successfully, and STREAM_USE_PATH is set in
   *   options, opened_path should be set to the full path of the file/resource
   *   that was actually opened.
   *
   * @return bool
   *   Returns TRUE on success or FALSE on failure.
   *
   * @see fopen()
   * @see parse_url()
   * @see http://php.net/manual/en/streamwrapper.stream-open.php
   */
  public function stream_open($path, $mode, $options, &$opened_path);

  /**
   * @return string
   * Read from stream.
   *
   * This method is called in response to fread() and fgets().
   *
   * Note, remember to update the read/write position of the stream (by the
   * number of bytes that were successfully read).
   *
   * Note, PhpStreamWrapperInterface::stream_eof() is called directly after
   * calling PhpStreamWrapperInterface::stream_read() to check if EOF has been
   * reached. If not implemented, EOF is assumed.
   *
   * Warning, when reading the whole file (e.g., with file_get_contents()), PHP
   * will call PhpStreamWrapperInterface::stream_read() followed by
   * PhpStreamWrapperInterface::stream_eof() in a loop but as long as
   * PhpStreamWrapperInterface::stream_read() returns a non-empty string, the
   * return value of PhpStreamWrapperInterface::stream_eof() is ignored.
   *
   * @param int $count
   *   How many bytes of data from the current position should be returned.
   *
   * @return string|false
   *   If there are less than $count bytes available, return as many as are
   *   available. If no more data is available, return either FALSE or an empty
   *   string.
   *
   * @see fread()
   * @see fgets()
   * @see http://php.net/manual/en/streamwrapper.stream-read.php
   */
  public function stream_read($count);

@@ -183,12 +407,30 @@ public function stream_seek($offset, $whence = SEEK_SET);
  public function stream_set_option($option, $arg1, $arg2);

  /**
   * @return array
   * Retrieve information about a file resource.
   *
   * This method is called in response to fstat().
   *
   * @return array|false
   *   See stat().
   *
   * @see stat()
   * @see PhpStreamWrapperInterface::url_stat()
   * @see http://php.net/manual/en/streamwrapper.stream-stat.php
   */
  public function stream_stat();

  /**
   * Retrieve the current position of a stream.
   *
   * This method is called in response to fseek() to determine the current
   * position.
   *
   * @return int
   *   Should return the current position of the stream.
   *
   * @see PhpStreamWrapperInterface::stream_tell()
   * @see http://php.net/manual/en/streamwrapper.stream-tell.php
   */
  public function stream_tell();

@@ -202,21 +444,86 @@ public function stream_tell();
   *
   * @return bool
   *   TRUE on success, FALSE otherwise.
   *
   * @see ftruncate()
   * @see http://php.net/manual/en/streamwrapper.stream-truncate.php
   */
  public function stream_truncate($new_size);

  /**
   * Write to stream.
   *
   * This method is called in response to fwrite(). Remember to update the
   * current position of the stream by number of bytes that were successfully
   * written.
   *
   * @param string $data
   *   Should be stored into the underlying stream. If there is not enough room
   *   in the underlying stream, store as much as possible.
   *
   * @return int
   *   Should return the number of bytes that were successfully stored, or 0 if
   *   none could be stored.
   *
   * @see fwrite()
   * @see http://php.net/manual/en/streamwrapper.stream-write.php
   */
  public function stream_write($data);

  /**
   * Delete a file.
   *
   * This method is called in response to unlink().
   *
   * Note, in order for the appropriate error message to be returned this method
   * should not be defined if the wrapper does not support removing files.
   *
   * Note, the streamWrapper::$context property is updated if a valid context is
   * passed to the caller function.
   *
   * @param string $path
   *   The file URL which should be deleted.
   *
   * @return bool
   *   Returns TRUE on success or FALSE on failure.
   *
   * @see unlink()
   * @see PhpStreamWrapperInterface::rmdir()
   * @see http://php.net/manual/en/streamwrapper.unlink.php
   */
  public function unlink($path);

  /**
   * @return array
   * Retrieve information about a file.
   *
   * This method is called in response to all stat() related functions.
   *
   * Note, the streamWrapper::$context property is updated if a valid context is
   * passed to the caller function.
   *
   * @param string $path
   *   The file path or URL to stat. Note that in the case of a URL, it must be
   *   a "://" delimited URL. Other URL forms are not supported.
   * @param int $flags
   *   Holds additional flags set by the streams API. It can hold one or more
   *   of the following values ORed together:
   *   - STREAM_URL_STAT_LINK: For resources with the ability to link to other
   *     resource (such as an HTTP Location: forward, or a filesystem symlink).
   *     This flag specified that only information about the link itself should
   *     be returned, not the resource pointed to by the link. This flag is set
   *     in response to calls to lstat(), is_link(), or filetype().
   *   - STREAM_URL_STAT_QUIET: If this flag is set, your wrapper should not
   *     raise any errors. If this flag is not set, you are responsible for
   *     reporting errors using the trigger_error() function during stating of
   *     the path.
   *
   * @return array|false
   *   Should return the same as stat() does. Unknown or unavailable values
   *   should be set to a rational value (usually 0).
   *
   * @see stat()
   * @see PhpStreamWrapperInterface::stream_stat()
   * @see http://php.net/manual/en/streamwrapper.url-stat.php
   */
  public function url_stat($path, $flags);