FileinfoMimeTypeGuesser

class FileinfoMimeTypeGuesser implements MimeTypeGuesserInterface

Guesses the mime type using the PECL extension FileInfo.

Methods

public __construct(string $magicFile = null) No description
public static bool isSupported() Returns whether this guesser is supported on the current OS/PHP setup.
public string guess(string $path) Guesses the mime type of the file with the given path.

Details

at line 31

__construct()

public __construct(string $magicFile = null)

Parameters

string $magicFile A magic file to use with the finfo instance

See also

http://www.php.net/manual/en/function.finfo-open.php
at line 41

isSupported()

public static bool isSupported()

Returns whether this guesser is supported on the current OS/PHP setup.

Return Value

bool
at line 49

guess()

public string guess(string $path)

Guesses the mime type of the file with the given path.

Parameters

string $path The path to the file

Return Value

string The mime type or NULL, if none could be guessed

Exceptions

FileNotFoundException If the file does not exist
AccessDeniedException If the file could not be read

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 Symfony\Component\HttpFoundation\File\MimeType;

use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException;
use Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException;

/**
 * Guesses the mime type using the PECL extension FileInfo.
 *
 * @author Bernhard Schussek <bschussek@gmail.com>
 */
class FileinfoMimeTypeGuesser implements MimeTypeGuesserInterface
{
    private $magicFile;

    /**
     * @param string $magicFile A magic file to use with the finfo instance
     *
     * @see http://www.php.net/manual/en/function.finfo-open.php
     */
    public function __construct(string $magicFile = null)
    {
        $this->magicFile = $magicFile;
    }

    /**
     * Returns whether this guesser is supported on the current OS/PHP setup.
     *
     * @return bool
     */
    public static function isSupported()
    {
        return function_exists('finfo_open');
    }

    /**
     * {@inheritdoc}
     */
    public function guess($path)
    {
        if (!is_file($path)) {
            throw new FileNotFoundException($path);
        }

        if (!is_readable($path)) {
            throw new AccessDeniedException($path);
        }

        if (!self::isSupported()) {
            return;
        }

        if (!$finfo = new \finfo(FILEINFO_MIME_TYPE, $this->magicFile)) {
            return;
        }

        return $finfo->file($path);
    }
}