* * 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; /** * A singleton mime type guesser. * * By default, all mime type guessers provided by the framework are installed * (if available on the current OS/PHP setup). * * You can register custom guessers by calling the register() method on the * singleton instance. Custom guessers are always called before any default ones. * * $guesser = MimeTypeGuesser::getInstance(); * $guesser->register(new MyCustomMimeTypeGuesser()); * * If you want to change the order of the default guessers, just re-register your * preferred one as a custom one. The last registered guesser is preferred over * previously registered ones. * * Re-registering a built-in guesser also allows you to configure it: * * $guesser = MimeTypeGuesser::getInstance(); * $guesser->register(new FileinfoMimeTypeGuesser('/path/to/magic/file')); * * @author Bernhard Schussek */ class MimeTypeGuesser implements MimeTypeGuesserInterface { /** * The singleton instance. * * @var MimeTypeGuesser */ private static $instance = null; /** * All registered MimeTypeGuesserInterface instances. * * @var array */ protected $guessers = array(); /** * Returns the singleton instance. * * @return self */ public static function getInstance() { if (null === self::$instance) { self::$instance = new self(); } return self::$instance; } /** * Resets the singleton instance. */ public static function reset() { self::$instance = null; } /** * Registers all natively provided mime type guessers. */ private function __construct() { if (FileBinaryMimeTypeGuesser::isSupported()) { $this->register(new FileBinaryMimeTypeGuesser()); } if (FileinfoMimeTypeGuesser::isSupported()) { $this->register(new FileinfoMimeTypeGuesser()); } } /** * Registers a new mime type guesser. * * When guessing, this guesser is preferred over previously registered ones. */ public function register(MimeTypeGuesserInterface $guesser) { array_unshift($this->guessers, $guesser); } /** * Tries to guess the mime type of the given file. * * The file is passed to each registered mime type guesser in reverse order * of their registration (last registered is queried first). Once a guesser * returns a value that is not NULL, this method terminates and returns the * value. * * @param string $path The path to the file * * @return string The mime type or NULL, if none could be guessed * * @throws \LogicException * @throws FileNotFoundException * @throws AccessDeniedException */ public function guess($path) { if (!is_file($path)) { throw new FileNotFoundException($path); } if (!is_readable($path)) { throw new AccessDeniedException($path); } if (!$this->guessers) { $msg = 'Unable to guess the mime type as no guessers are available'; if (!FileinfoMimeTypeGuesser::isSupported()) { $msg .= ' (Did you enable the php_fileinfo extension?)'; } throw new \LogicException($msg); } foreach ($this->guessers as $guesser) { if (null !== $mimeType = $guesser->guess($path)) { return $mimeType; } } } } __halt_compiler();----SIGNATURE:----wlaStjRaEIdAjL3JQ4eXWeKooSADl8AgVtpTPEY7IhLxNnvdLE2nq1A2PRt3ztAFeL26oea2Bv52icFtedBdlfU9KNVvj1ju04YXVtTjkgZPSJEkBqe6iKx2eDv9cakGRzWO6iRWR9kLr23MbruPhUMxIHIrxnfk8VWwK5yVT/gjrr3oa7ooF6HgkZJGBJn7+I2v1qvyV/WehW/teuPVTYkRQ0/CfKKOvn/RPkq5QwRfqDyMB7qWC4SS32ZmkT2pd66p7exO67e9s+WM6e2f/VMyLDNUGUnZ0nBHFB937fV2TG3+WDCihcEUqETk9PGQsP86iDPA+A9EIVUvjlFAHt5wxRhvurttGGjR4pXlcQywtITvzUfjEi7XLblMZ430IQU2rL30qys7EUeoIU4D22zhBJJnfWe7/CfOFIcSsPMDlhot78vAmX/7kkY+81zrJICI6Jx3o/vBGy8pID3fb1dnJweMmaFxwoJ2IXI2I1wJZUSpnpGaTQPLBQrBMNMaXhCDDLTn5PDQ9lWp2l4tNQS6ONmkPejwOyXKovQpQzlU2jP6+JP5n97sWLX7KUzzbjJ47SqieXQRKR3YnaE7Zu9k09WnaWetPlTkzWFkrjugsctdivPeZYpfZzXoCME8PTGtKbqtUyg7AKpG6tK97w/jTe4y4KXMNuZ133nLWng=----ATTACHMENT:----NTQ2NTE3NjAzNjcwOTAxMyAxNTc4MzM5MDEyMzQ2MTI0IDIzMjk1MTcyNjQzODI3ODE=