*
* a) Create a new file in storage with the contents of a string
* @code
- * array(
+ * [
* 'op' => 'create',
* 'dst' => <storage path>,
* 'content' => <string of new file contents>,
* 'overwrite' => <boolean>,
* 'overwriteSame' => <boolean>,
* 'headers' => <HTTP header name/value map> # since 1.21
- * );
+ * ]
* @endcode
*
* b) Copy a file system file into storage
* @code
- * array(
+ * [
* 'op' => 'store',
* 'src' => <file system path, FSFile, or TempFSFile>,
* 'dst' => <storage path>,
* 'overwrite' => <boolean>,
* 'overwriteSame' => <boolean>,
* 'headers' => <HTTP header name/value map> # since 1.21
- * )
+ * ]
* @endcode
*
* c) Copy a file within storage
* @code
- * array(
+ * [
* 'op' => 'copy',
* 'src' => <storage path>,
* 'dst' => <storage path>,
* 'overwriteSame' => <boolean>,
* 'ignoreMissingSource' => <boolean>, # since 1.21
* 'headers' => <HTTP header name/value map> # since 1.21
- * )
+ * ]
* @endcode
*
* d) Move a file within storage
* @code
- * array(
+ * [
* 'op' => 'move',
* 'src' => <storage path>,
* 'dst' => <storage path>,
* 'overwriteSame' => <boolean>,
* 'ignoreMissingSource' => <boolean>, # since 1.21
* 'headers' => <HTTP header name/value map> # since 1.21
- * )
+ * ]
* @endcode
*
* e) Delete a file within storage
* @code
- * array(
+ * [
* 'op' => 'delete',
* 'src' => <storage path>,
* 'ignoreMissingSource' => <boolean>
- * )
+ * ]
* @endcode
*
* f) Update metadata for a file within storage
* @code
- * array(
+ * [
* 'op' => 'describe',
* 'src' => <storage path>,
* 'headers' => <HTTP header name/value map>
- * )
+ * ]
* @endcode
*
* g) Do nothing (no-op)
* @code
- * array(
+ * [
* 'op' => 'null',
- * )
+ * ]
* @endcode
*
* Boolean flags for operations (operation-specific):
*
* a) Create a new file in storage with the contents of a string
* @code
- * array(
+ * [
* 'op' => 'create',
* 'dst' => <storage path>,
* 'content' => <string of new file contents>,
* 'headers' => <HTTP header name/value map> # since 1.21
- * )
+ * ]
* @endcode
*
* b) Copy a file system file into storage
* @code
- * array(
+ * [
* 'op' => 'store',
* 'src' => <file system path, FSFile, or TempFSFile>,
* 'dst' => <storage path>,
* 'headers' => <HTTP header name/value map> # since 1.21
- * )
+ * ]
* @endcode
*
* c) Copy a file within storage
* @code
- * array(
+ * [
* 'op' => 'copy',
* 'src' => <storage path>,
* 'dst' => <storage path>,
* 'ignoreMissingSource' => <boolean>, # since 1.21
* 'headers' => <HTTP header name/value map> # since 1.21
- * )
+ * ]
* @endcode
*
* d) Move a file within storage
* @code
- * array(
+ * [
* 'op' => 'move',
* 'src' => <storage path>,
* 'dst' => <storage path>,
* 'ignoreMissingSource' => <boolean>, # since 1.21
* 'headers' => <HTTP header name/value map> # since 1.21
- * )
+ * ]
* @endcode
*
* e) Delete a file within storage
* @code
- * array(
+ * [
* 'op' => 'delete',
* 'src' => <storage path>,
* 'ignoreMissingSource' => <boolean>
- * )
+ * ]
* @endcode
*
* f) Update metadata for a file within storage
* @code
- * array(
+ * [
* 'op' => 'describe',
* 'src' => <storage path>,
* 'headers' => <HTTP header name/value map>
- * )
+ * ]
* @endcode
*
* g) Do nothing (no-op)
* @code
- * array(
+ * [
* 'op' => 'null',
- * )
+ * ]
* @endcode
*
* @par Boolean flags for operations (operation-specific):
/**
* Stream the file at a storage path in the backend.
+ *
* If the file does not exists, an HTTP 404 error will be given.
* Appropriate HTTP headers (Status, Content-Type, Content-Length)
* will be sent if streaming began, while none will be sent otherwise.
* Implementations should flush the output buffer before sending data.
*
* @param array $params Parameters include:
- * - src : source storage path
- * - headers : list of additional HTTP headers to send on success
- * - latest : use the latest available data
+ * - src : source storage path
+ * - headers : list of additional HTTP headers to send if the file exists
+ * - options : HTTP request header map with lower case keys (since 1.28). Supports:
+ * range : format is "bytes=(\d*-\d*)"
+ * if-modified-since : format is an HTTP date
+ * - headless : only include the body (and headers from "headers") (since 1.28)
+ * - latest : use the latest available data
+ * - allowOB : preserve any output buffers (since 1.28)
* @return Status
*/
abstract public function streamFile( array $params );
*
* Write operations should *never* be done on this file as some backends
* may do internal tracking or may be instances of FileBackendMultiWrite.
- * In that later case, there are copies of the file that must stay in sync.
+ * In that latter case, there are copies of the file that must stay in sync.
* Additionally, further calls to this function may return the same file.
*
* @param array $params Parameters include: