7
* This source file is subject to the new BSD license that is bundled
8
* with this package in the file LICENSE.txt.
9
* It is also available through the world-wide-web at this URL:
10
* http://framework.zend.com/license/new-bsd
11
* If you did not receive a copy of the license and are unable to
12
* obtain it through the world-wide-web, please send an email
13
* to license@zend.com so we can send you a copy immediately.
16
* @package Zend_Validate
17
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
18
* @license http://framework.zend.com/license/new-bsd New BSD License
23
* @see Zend_Validate_File_Hash
25
require_once 'Zend/Validate/File/Hash.php';
28
* Validator for the md5 hash of given files
31
* @package Zend_Validate
32
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
33
* @license http://framework.zend.com/license/new-bsd New BSD License
35
class Zend_Validate_File_Md5 extends Zend_Validate_File_Hash
38
* @const string Error constants
40
const DOES_NOT_MATCH = 'fileMd5DoesNotMatch';
41
const NOT_DETECTED = 'fileMd5NotDetected';
42
const NOT_FOUND = 'fileMd5NotFound';
45
* @var array Error message templates
47
protected $_messageTemplates = array(
48
self::DOES_NOT_MATCH => "The file '%value%' does not match the given md5 hashes",
49
self::NOT_DETECTED => "There was no md5 hash detected for the given file",
50
self::NOT_FOUND => "The file '%value%' could not be found"
61
* Sets validator options
63
* $hash is the hash we accept for the file $file
65
* @param string|array $options
68
public function __construct($options)
70
if ($options instanceof Zend_Config) {
71
$options = $options->toArray();
72
} elseif (is_scalar($options)) {
73
$options = array('hash1' => $options);
74
} elseif (!is_array($options)) {
75
require_once 'Zend/Validate/Exception.php';
76
throw new Zend_Validate_Exception('Invalid options to validator provided');
79
$this->setMd5($options);
83
* Returns all set md5 hashes
87
public function getMd5()
89
return $this->getHash();
93
* Sets the md5 hash for one or multiple files
95
* @param string|array $options
96
* @param string $algorithm (Deprecated) Algorithm to use, fixed to md5
97
* @return Zend_Validate_File_Hash Provides a fluent interface
99
public function setHash($options)
101
if (!is_array($options)) {
102
$options = (array) $options;
105
$options['algorithm'] = 'md5';
106
parent::setHash($options);
111
* Sets the md5 hash for one or multiple files
113
* @param string|array $options
114
* @return Zend_Validate_File_Hash Provides a fluent interface
116
public function setMd5($options)
118
$this->setHash($options);
123
* Adds the md5 hash for one or multiple files
125
* @param string|array $options
126
* @param string $algorithm (Depreciated) Algorithm to use, fixed to md5
127
* @return Zend_Validate_File_Hash Provides a fluent interface
129
public function addHash($options)
131
if (!is_array($options)) {
132
$options = (array) $options;
135
$options['algorithm'] = 'md5';
136
parent::addHash($options);
141
* Adds the md5 hash for one or multiple files
143
* @param string|array $options
144
* @return Zend_Validate_File_Hash Provides a fluent interface
146
public function addMd5($options)
148
$this->addHash($options);
153
* Defined by Zend_Validate_Interface
155
* Returns true if and only if the given file confirms the set hash
157
* @param string $value Filename to check for hash
158
* @param array $file File data from Zend_File_Transfer
161
public function isValid($value, $file = null)
163
// Is file readable ?
164
require_once 'Zend/Loader.php';
165
if (!Zend_Loader::isReadable($value)) {
166
return $this->_throw($file, self::NOT_FOUND);
169
$hashes = array_unique(array_keys($this->_hash));
170
$filehash = hash_file('md5', $value);
171
if ($filehash === false) {
172
return $this->_throw($file, self::NOT_DETECTED);
175
foreach($hashes as $hash) {
176
if ($filehash === $hash) {
181
return $this->_throw($file, self::DOES_NOT_MATCH);