00001 <?php
00025 require_once 'Zend/Validate/File/MimeType.php';
00026
00035 class Zend_Validate_File_ExcludeMimeType extends Zend_Validate_File_MimeType
00036 {
00037 const FALSE_TYPE = 'fileExcludeMimeTypeFalse';
00038 const NOT_DETECTED = 'fileExcludeMimeTypeNotDetected';
00039 const NOT_READABLE = 'fileExcludeMimeTypeNotReadable';
00040
00052 public function isValid($value, $file = null)
00053 {
00054 if ($file === null) {
00055 $file = array(
00056 'type' => null,
00057 'name' => $value
00058 );
00059 }
00060
00061
00062 require_once 'Zend/Loader.php';
00063 if (!Zend_Loader::isReadable($value)) {
00064 return $this->_throw($file, self::NOT_READABLE);
00065 }
00066
00067 $mimefile = $this->getMagicFile();
00068 if (class_exists('finfo', false)) {
00069 $const = defined('FILEINFO_MIME_TYPE') ? FILEINFO_MIME_TYPE : FILEINFO_MIME;
00070 if (!empty($mimefile)) {
00071 $mime = new finfo($const, $mimefile);
00072 } else {
00073 $mime = new finfo($const);
00074 }
00075
00076 if ($mime !== false) {
00077 $this->_type = $mime->file($value);
00078 }
00079 unset($mime);
00080 }
00081
00082 if (empty($this->_type)) {
00083 if (function_exists('mime_content_type') && ini_get('mime_magic.magicfile')) {
00084 $this->_type = mime_content_type($value);
00085 } elseif ($this->_headerCheck) {
00086 $this->_type = $file['type'];
00087 }
00088 }
00089
00090 if (empty($this->_type)) {
00091 return $this->_throw($file, self::NOT_DETECTED);
00092 }
00093
00094 $mimetype = $this->getMimeType(true);
00095 if (in_array($this->_type, $mimetype)) {
00096 return $this->_throw($file, self::FALSE_TYPE);
00097 }
00098
00099 $types = explode('/', $this->_type);
00100 $types = array_merge($types, explode('-', $this->_type));
00101 foreach($mimetype as $mime) {
00102 if (in_array($mime, $types)) {
00103 return $this->_throw($file, self::FALSE_TYPE);
00104 }
00105 }
00106
00107 return true;
00108 }
00109 }