# 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);
        }
    }