<?php /** * CodeIgniter * * An open source application development framework for PHP * * This content is released under the MIT License (MIT) * * Copyright (c) 2014-2019 British Columbia Institute of Technology * Copyright (c) 2019 CodeIgniter Foundation * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * @package CodeIgniter * @author CodeIgniter Dev Team * @copyright 2019 CodeIgniter Foundation * @license https://opensource.org/licenses/MIT MIT License * @link https://codeigniter.com * @since Version 4.0.0 * @filesource */ namespace CodeIgniter\HTTP\Files; /** * Value object representing a single file uploaded through an * HTTP request. Used by the IncomingRequest class to * provide files. * * Typically, implementors will extend the SplFileInfo class. * * @package CodeIgniter\HTTP */ interface UploadedFileInterface { /** * Accepts the file information as would be filled in from the $_FILES array. * * @param string $path The temporary location of the uploaded file. * @param string $originalName The client-provided filename. * @param string $mimeType The type of file as provided by PHP * @param integer $size The size of the file, in bytes * @param integer $error The error constant of the upload (one of PHP's UPLOADERRXXX constants) */ public function __construct(string $path, string $originalName, string $mimeType = null, int $size = null, int $error = null); //-------------------------------------------------------------------- /** * Move the uploaded file to a new location. * * $targetPath may be an absolute path, or a relative path. If it is a * relative path, resolution should be the same as used by PHP's rename() * function. * * The original file MUST be removed on completion. * * If this method is called more than once, any subsequent calls MUST raise * an exception. * * When used in an SAPI environment where $_FILES is populated, when writing * files via moveTo(), is_uploaded_file() and move_uploaded_file() SHOULD be * used to ensure permissions and upload status are verified correctly. * * If you wish to move to a stream, use getStream(), as SAPI operations * cannot guarantee writing to stream destinations. * * @see http://php.net/is_uploaded_file * @see http://php.net/move_uploaded_file * * @param string $targetPath Path to which to move the uploaded file. * @param string $name the name to rename the file to. * * @throws \InvalidArgumentException if the $path specified is invalid. * @throws \RuntimeException on any error during the move operation. * @throws \RuntimeException on the second or subsequent call to the method. */ public function move(string $targetPath, string $name = null); //-------------------------------------------------------------------- /** * Returns whether the file has been moved or not. If it has, * the move() method will not work and certain properties, like * the tempName, will no longer be available. * * @return boolean */ public function hasMoved(): bool; //-------------------------------------------------------------------- /** * Retrieve the error associated with the uploaded file. * * The return value MUST be one of PHP's UPLOAD_ERR_XXX constants. * * If the file was uploaded successfully, this method MUST return * UPLOAD_ERR_OK. * * Implementations SHOULD return the value stored in the "error" key of * the file in the $_FILES array. * * @see http://php.net/manual/en/features.file-upload.errors.php * @return integer One of PHP's UPLOAD_ERR_XXX constants. */ public function getError(): int; //-------------------------------------------------------------------- /** * Retrieve the filename sent by the client. * * Do not trust the value returned by this method. A client could send * a malicious filename with the intention to corrupt or hack your * application. * * Implementations SHOULD return the value stored in the "name" key of * the file in the $_FILES array. * * @return string|null The filename sent by the client or null if none * was provided. */ public function getName(): string; //-------------------------------------------------------------------- /** * Gets the temporary filename where the file was uploaded to. * * @return string */ public function getTempName(): string; //-------------------------------------------------------------------- /** * Returns the original file extension, based on the file name that * was uploaded. This is NOT a trusted source. * For a trusted version, use guessExtension() instead. * * @return string|null */ public function getClientExtension(): string; //-------------------------------------------------------------------- /** * Returns the mime type as provided by the client. * This is NOT a trusted value. * For a trusted version, use getMimeType() instead. * * @return string|null */ public function getClientMimeType(): string; //-------------------------------------------------------------------- /** * Returns whether the file was uploaded successfully, based on whether * it was uploaded via HTTP and has no errors. * * @return boolean */ public function isValid(): bool; //-------------------------------------------------------------------- /** * Returns the destination path for the move operation where overwriting is not expected. * * First, it checks whether the delimiter is present in the filename, if it is, then it checks whether the * last element is an integer as there may be cases that the delimiter may be present in the filename. * For the all other cases, it appends an integer starting from zero before the file's extension. * * @param string $destination * @param string $delimiter * @param integer $i * * @return string */ public function getDestination(string $destination, string $delimiter = '_', int $i = 0): string; //-------------------------------------------------------------------- }