vendor/symfony/http-foundation/File/MimeType/FileinfoMimeTypeGuesser.php line 18

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Component\HttpFoundation\File\MimeType;
  11. use Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException;
  12. use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException;
  13. use Symfony\Component\Mime\FileinfoMimeTypeGuesser as NewFileinfoMimeTypeGuesser;
  14. @trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.3, use "%s" instead.'FileinfoMimeTypeGuesser::class, NewFileinfoMimeTypeGuesser::class), \E_USER_DEPRECATED);
  15. /**
  16.  * Guesses the mime type using the PECL extension FileInfo.
  17.  *
  18.  * @author Bernhard Schussek <bschussek@gmail.com>
  19.  *
  20.  * @deprecated since Symfony 4.3, use {@link NewFileinfoMimeTypeGuesser} instead
  21.  */
  22. class FileinfoMimeTypeGuesser implements MimeTypeGuesserInterface
  23. {
  24.     private $magicFile;
  25.     /**
  26.      * @param string $magicFile A magic file to use with the finfo instance
  27.      *
  28.      * @see https://php.net/finfo-open
  29.      */
  30.     public function __construct(string $magicFile null)
  31.     {
  32.         $this->magicFile $magicFile;
  33.     }
  34.     /**
  35.      * Returns whether this guesser is supported on the current OS/PHP setup.
  36.      *
  37.      * @return bool
  38.      */
  39.     public static function isSupported()
  40.     {
  41.         return \function_exists('finfo_open');
  42.     }
  43.     /**
  44.      * {@inheritdoc}
  45.      */
  46.     public function guess($path)
  47.     {
  48.         if (!is_file($path)) {
  49.             throw new FileNotFoundException($path);
  50.         }
  51.         if (!is_readable($path)) {
  52.             throw new AccessDeniedException($path);
  53.         }
  54.         if (!self::isSupported()) {
  55.             return null;
  56.         }
  57.         if (!$finfo = new \finfo(\FILEINFO_MIME_TYPE$this->magicFile)) {
  58.             return null;
  59.         }
  60.         $mimeType $finfo->file($path);
  61.         if ($mimeType && === (\strlen($mimeType) % 2)) {
  62.             $mimeStart substr($mimeType0, \strlen($mimeType) >> 1);
  63.             $mimeType $mimeStart.$mimeStart === $mimeType $mimeStart $mimeType;
  64.         }
  65.         return $mimeType;
  66.     }
  67. }