File

class File extends SplFileInfo

A file in the file system.

Methods

public __construct(string $path, bool $checkPath = true) Constructs a new file from the given path.
public string|null guessExtension() Returns the extension based on the mime type.
public string|null getMimeType() Returns the mime type of the file.
public File move(string $directory, string $name = null) Moves the file to a new location.
protected getTargetFile($directory, $name = null) No description
protected string getName(string $name) Returns locale independent base name of the given path.

Details

at line 34

__construct()

public __construct(string $path, bool $checkPath = true)

Constructs a new file from the given path.

Parameters

string $path The path to the file
bool $checkPath Whether to check the path or not

Exceptions

FileNotFoundException If the given path is not a file
at line 56

guessExtension()

public string|null guessExtension()

Returns the extension based on the mime type.

If the mime type is unknown, returns null.

This method uses the mime type as guessed by getMimeType() to guess the file extension.

Return Value

string|null The guessed extension or null if it cannot be guessed

See also

ExtensionGuesser
getMimeType()
at line 75

getMimeType()

public string|null getMimeType()

Returns the mime type of the file.

The mime type is guessed using a MimeTypeGuesser instance, which uses finfo(), mime_content_type() and the system binary "file" (in this order), depending on which of those are available.

Return Value

string|null The guessed mime type (e.g. "application/pdf")

See also

MimeTypeGuesser
at line 92

move()

public File move(string $directory, string $name = null)

Moves the file to a new location.

Parameters

string $directory The destination folder
string $name The new file name

Return Value

File A File object representing the new file

Exceptions

FileException if the target file could not be created
at line 106

getTargetFile()

protected getTargetFile($directory, $name = null)

Parameters

$directory
$name
at line 128

getName()

protected string getName(string $name)

Returns locale independent base name of the given path.

Parameters

string $name The new file name

Return Value

string containing

Source code

<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace App\Khan\Component\HttpFoundation\File;

use App\Khan\Component\HttpFoundation\File\Exception\FileException;
use App\Khan\Component\HttpFoundation\File\Exception\FileNotFoundException;
use App\Khan\Component\HttpFoundation\File\MimeType\MimeTypeGuesser;
use App\Khan\Component\HttpFoundation\File\MimeType\ExtensionGuesser;

/**
 * A file in the file system.
 *
 * @author Bernhard Schussek <bschussek@gmail.com>
 */
class File extends \SplFileInfo
{
    /**
     * Constructs a new file from the given path.
     *
     * @param string $path      The path to the file
     * @param bool   $checkPath Whether to check the path or not
     *
     * @throws FileNotFoundException If the given path is not a file
     */
    public function __construct(string $path, bool $checkPath = true)
    {
        if ($checkPath && !is_file($path)) {
            throw new FileNotFoundException($path);
        }

        parent::__construct($path);
    }

    /**
     * Returns the extension based on the mime type.
     *
     * If the mime type is unknown, returns null.
     *
     * This method uses the mime type as guessed by getMimeType()
     * to guess the file extension.
     *
     * @return string|null The guessed extension or null if it cannot be guessed
     *
     * @see ExtensionGuesser
     * @see getMimeType()
     */
    public function guessExtension()
    {
        $type = $this->getMimeType();
        $guesser = ExtensionGuesser::getInstance();

        return $guesser->guess($type);
    }

    /**
     * Returns the mime type of the file.
     *
     * The mime type is guessed using a MimeTypeGuesser instance, which uses finfo(),
     * mime_content_type() and the system binary "file" (in this order), depending on
     * which of those are available.
     *
     * @return string|null The guessed mime type (e.g. "application/pdf")
     *
     * @see MimeTypeGuesser
     */
    public function getMimeType()
    {
        $guesser = MimeTypeGuesser::getInstance();

        return $guesser->guess($this->getPathname());
    }

    /**
     * Moves the file to a new location.
     *
     * @param string $directory The destination folder
     * @param string $name      The new file name
     *
     * @return self A File object representing the new file
     *
     * @throws FileException if the target file could not be created
     */
    public function move($directory, $name = null)
    {
        $target = $this->getTargetFile($directory, $name);

        if (!@rename($this->getPathname(), $target)) {
            $error = error_get_last();
            throw new FileException(sprintf('Could not move the file "%s" to "%s" (%s)', $this->getPathname(), $target, strip_tags($error['message'])));
        }

        @chmod($target, 0666 & ~umask());

        return $target;
    }

    protected function getTargetFile($directory, $name = null)
    {
        if (!is_dir($directory)) {
            if (false === @mkdir($directory, 0777, true) && !is_dir($directory)) {
                throw new FileException(sprintf('Unable to create the "%s" directory', $directory));
            }
        } elseif (!is_writable($directory)) {
            throw new FileException(sprintf('Unable to write in the "%s" directory', $directory));
        }

        $target = rtrim($directory, '/\\').DIRECTORY_SEPARATOR.(null === $name ? $this->getBasename() : $this->getName($name));

        return new self($target, false);
    }

    /**
     * Returns locale independent base name of the given path.
     *
     * @param string $name The new file name
     *
     * @return string containing
     */
    protected function getName($name)
    {
        $originalName = str_replace('\\', '/', $name);
        $pos = strrpos($originalName, '/');
        $originalName = false === $pos ? $originalName : substr($originalName, $pos + 1);

        return $originalName;
    }
}