Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.0.x will end 8 May 2023 (12 months).
  • Bug fixes for security issues in 4.0.x will end 13 November 2023 (18 months).
  • PHP version: minimum PHP 7.3.0 Note: the minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is also supported.
   1  <?php
   2  
   3  namespace Psr\Http\Message;
   4  
   5  /**
   6   * Value object representing a file uploaded through an HTTP request.
   7   *
   8   * Instances of this interface are considered immutable; all methods that
   9   * might change state MUST be implemented such that they retain the internal
  10   * state of the current instance and return an instance that contains the
  11   * changed state.
  12   */
  13  interface UploadedFileInterface
  14  {
  15      /**
  16       * Retrieve a stream representing the uploaded file.
  17       *
  18       * This method MUST return a StreamInterface instance, representing the
  19       * uploaded file. The purpose of this method is to allow utilizing native PHP
  20       * stream functionality to manipulate the file upload, such as
  21       * stream_copy_to_stream() (though the result will need to be decorated in a
  22       * native PHP stream wrapper to work with such functions).
  23       *
  24       * If the moveTo() method has been called previously, this method MUST raise
  25       * an exception.
  26       *
  27       * @return StreamInterface Stream representation of the uploaded file.
  28       * @throws \RuntimeException in cases when no stream is available or can be
  29       *     created.
  30       */
  31      public function getStream();
  32  
  33      /**
  34       * Move the uploaded file to a new location.
  35       *
  36       * Use this method as an alternative to move_uploaded_file(). This method is
  37       * guaranteed to work in both SAPI and non-SAPI environments.
  38       * Implementations must determine which environment they are in, and use the
  39       * appropriate method (move_uploaded_file(), rename(), or a stream
  40       * operation) to perform the operation.
  41       *
  42       * $targetPath may be an absolute path, or a relative path. If it is a
  43       * relative path, resolution should be the same as used by PHP's rename()
  44       * function.
  45       *
  46       * The original file or stream MUST be removed on completion.
  47       *
  48       * If this method is called more than once, any subsequent calls MUST raise
  49       * an exception.
  50       *
  51       * When used in an SAPI environment where $_FILES is populated, when writing
  52       * files via moveTo(), is_uploaded_file() and move_uploaded_file() SHOULD be
  53       * used to ensure permissions and upload status are verified correctly.
  54       *
  55       * If you wish to move to a stream, use getStream(), as SAPI operations
  56       * cannot guarantee writing to stream destinations.
  57       *
  58       * @see http://php.net/is_uploaded_file
  59       * @see http://php.net/move_uploaded_file
  60       * @param string $targetPath Path to which to move the uploaded file.
  61       * @throws \InvalidArgumentException if the $targetPath specified is invalid.
  62       * @throws \RuntimeException on any error during the move operation, or on
  63       *     the second or subsequent call to the method.
  64       */
  65      public function moveTo($targetPath);
  66      
  67      /**
  68       * Retrieve the file size.
  69       *
  70       * Implementations SHOULD return the value stored in the "size" key of
  71       * the file in the $_FILES array if available, as PHP calculates this based
  72       * on the actual size transmitted.
  73       *
  74       * @return int|null The file size in bytes or null if unknown.
  75       */
  76      public function getSize();
  77      
  78      /**
  79       * Retrieve the error associated with the uploaded file.
  80       *
  81       * The return value MUST be one of PHP's UPLOAD_ERR_XXX constants.
  82       *
  83       * If the file was uploaded successfully, this method MUST return
  84       * UPLOAD_ERR_OK.
  85       *
  86       * Implementations SHOULD return the value stored in the "error" key of
  87       * the file in the $_FILES array.
  88       *
  89       * @see http://php.net/manual/en/features.file-upload.errors.php
  90       * @return int One of PHP's UPLOAD_ERR_XXX constants.
  91       */
  92      public function getError();
  93      
  94      /**
  95       * Retrieve the filename sent by the client.
  96       *
  97       * Do not trust the value returned by this method. A client could send
  98       * a malicious filename with the intention to corrupt or hack your
  99       * application.
 100       *
 101       * Implementations SHOULD return the value stored in the "name" key of
 102       * the file in the $_FILES array.
 103       *
 104       * @return string|null The filename sent by the client or null if none
 105       *     was provided.
 106       */
 107      public function getClientFilename();
 108      
 109      /**
 110       * Retrieve the media type sent by the client.
 111       *
 112       * Do not trust the value returned by this method. A client could send
 113       * a malicious media type with the intention to corrupt or hack your
 114       * application.
 115       *
 116       * Implementations SHOULD return the value stored in the "type" key of
 117       * the file in the $_FILES array.
 118       *
 119       * @return string|null The media type sent by the client or null if none
 120       *     was provided.
 121       */
 122      public function getClientMediaType();
 123  }