Source of file MimeType.php
Size: 7,868 Bytes - Last Modified: 2021-12-23T10:26:32+00:00
/var/www/docs.ssmods.com/process/src/thirdparty/Zend/Validate/File/MimeType.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 | <?php /** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category Zend * @package Zend_Validate * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @version $Id: $ */ /** * @see Zend_Validate_Abstract */ require_once 'Zend/Validate/Abstract.php'; /** * Validator for the mime type of a file * * @category Zend * @package Zend_Validate * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ class Zend_Validate_File_MimeType extends Zend_Validate_Abstract { /**#@+ * @const Error type constants */ const FALSE_TYPE = 'fileMimeTypeFalse'; const NOT_DETECTED = 'fileMimeTypeNotDetected'; const NOT_READABLE = 'fileMimeTypeNotReadable'; /**#@-*/ /** * @var array Error message templates */ protected $_messageTemplates = array( self::FALSE_TYPE => "The file '%value%' has a false mimetype of '%type%'", self::NOT_DETECTED => "The mimetype of file '%value%' could not been detected", self::NOT_READABLE => "The file '%value%' can not be read" ); /** * @var array */ protected $_messageVariables = array( 'type' => '_type' ); /** * @var string */ protected $_type; /** * Mimetypes * * If null, there is no mimetype * * @var string|null */ protected $_mimetype; /** * Magicfile to use * * @var string|null */ protected $_magicfile; /** * Sets validator options * * Mimetype to accept * * @param string|array $mimetype MimeType * @return void */ public function __construct($mimetype) { if ($mimetype instanceof Zend_Config) { $mimetype = $mimetype->toArray(); } elseif (is_string($mimetype)) { $mimetype = explode(',', $mimetype); } elseif (!is_array($mimetype)) { require_once 'Zend/Validate/Exception.php'; throw new Zend_Validate_Exception("Invalid options to validator provided"); } if (isset($mimetype['magicfile'])) { $this->setMagicFile($mimetype['magicfile']); } $this->setMimeType($mimetype); } /** * Returna the actual set magicfile * * @return string */ public function getMagicFile() { return $this->_magicfile; } /** * Sets the magicfile to use * if null, the MAGIC constant from php is used * * @param string $file * @return Zend_Validate_File_MimeType Provides fluid interface */ public function setMagicFile($file) { if (empty($file)) { $this->_magicfile = null; } else if (!is_readable($file)) { require_once 'Zend/Validate/Exception.php'; throw new Zend_Validate_Exception('The given magicfile can not be read'); } else { $this->_magicfile = (string) $file; } return $this; } /** * Returns the set mimetypes * * @param boolean $asArray Returns the values as array, when false an concated string is returned * @return string|array */ public function getMimeType($asArray = false) { $asArray = (bool) $asArray; $mimetype = (string) $this->_mimetype; if ($asArray) { $mimetype = explode(',', $mimetype); } return $mimetype; } /** * Sets the mimetypes * * @param string|array $mimetype The mimetypes to validate * @return Zend_Validate_File_Extension Provides a fluent interface */ public function setMimeType($mimetype) { $this->_mimetype = null; $this->addMimeType($mimetype); return $this; } /** * Adds the mimetypes * * @param string|array $mimetype The mimetypes to add for validation * @return Zend_Validate_File_Extension Provides a fluent interface */ public function addMimeType($mimetype) { $mimetypes = $this->getMimeType(true); if (is_string($mimetype)) { $mimetype = explode(',', $mimetype); } elseif (!is_array($mimetype)) { require_once 'Zend/Validate/Exception.php'; throw new Zend_Validate_Exception("Invalid options to validator provided"); } if (isset($mimetype['magicfile'])) { unset($mimetype['magicfile']); } foreach ($mimetype as $content) { if (empty($content) || !is_string($content)) { continue; } $mimetypes[] = trim($content); } $mimetypes = array_unique($mimetypes); // Sanity check to ensure no empty values foreach ($mimetypes as $key => $mt) { if (empty($mt)) { unset($mimetypes[$key]); } } $this->_mimetype = implode(',', $mimetypes); return $this; } /** * Defined by Zend_Validate_Interface * * Returns true if the mimetype of the file matches the given ones. Also parts * of mimetypes can be checked. If you give for example "image" all image * mime types will be accepted like "image/gif", "image/jpeg" and so on. * * @param string $value Real file to check for mimetype * @param array $file File data from Zend_File_Transfer * @return boolean */ public function isValid($value, $file = null) { // Is file readable ? require_once 'Zend/Loader.php'; if (!Zend_Loader::isReadable($value)) { return $this->_throw($file, self::NOT_READABLE); } if ($file !== null) { $mimefile = $this->getMagicFile(); if (class_exists('finfo', false) && ((!empty($mimefile)) or (defined('MAGIC')))) { if (!empty($mimefile)) { $mime = new finfo(FILEINFO_MIME, $mimefile); } else { $mime = new finfo(FILEINFO_MIME); } $this->_type = $mime->file($value); unset($mime); } elseif (function_exists('mime_content_type') && ini_get('mime_magic.magicfile')) { $this->_type = mime_content_type($value); } else { $this->_type = $file['type']; } } if (empty($this->_type)) { return $this->_throw($file, self::NOT_DETECTED); } $mimetype = $this->getMimeType(true); if (in_array($this->_type, $mimetype)) { return true; } $types = explode('/', $this->_type); $types = array_merge($types, explode('-', $this->_type)); foreach($mimetype as $mime) { if (in_array($mime, $types)) { return true; } } return $this->_throw($file, self::FALSE_TYPE); } /** * Throws an error of the given type * * @param string $file * @param string $errorType * @return false */ protected function _throw($file, $errorType) { if ($file !== null) { $this->_value = $file['name']; } $this->_error($errorType); return false; } } |