source: trunk/library/Zend/Validate/File/Md5.php @ 5146

Revision 5146, 5.0 KB checked in by wmerlotto, 12 years ago (diff)

Ticket #2305 - Enviando alteracoes, desenvolvidas internamente na Prognus. Library: adicionando arquivos.

Line 
1<?php
2/**
3 * Zend Framework
4 *
5 * LICENSE
6 *
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.
14 *
15 * @category  Zend
16 * @package   Zend_Validate
17 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
18 * @license   http://framework.zend.com/license/new-bsd     New BSD License
19 * @version   $Id: Md5.php 22668 2010-07-25 14:50:46Z thomas $
20 */
21
22/**
23 * @see Zend_Validate_File_Hash
24 */
25require_once 'Zend/Validate/File/Hash.php';
26
27/**
28 * Validator for the md5 hash of given files
29 *
30 * @category  Zend
31 * @package   Zend_Validate
32 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
33 * @license   http://framework.zend.com/license/new-bsd     New BSD License
34 */
35class Zend_Validate_File_Md5 extends Zend_Validate_File_Hash
36{
37    /**
38     * @const string Error constants
39     */
40    const DOES_NOT_MATCH = 'fileMd5DoesNotMatch';
41    const NOT_DETECTED   = 'fileMd5NotDetected';
42    const NOT_FOUND      = 'fileMd5NotFound';
43
44    /**
45     * @var array Error message templates
46     */
47    protected $_messageTemplates = array(
48        self::DOES_NOT_MATCH => "File '%value%' does not match the given md5 hashes",
49        self::NOT_DETECTED   => "A md5 hash could not be evaluated for the given file",
50        self::NOT_FOUND      => "File '%value%' is not readable or does not exist",
51    );
52
53    /**
54     * Hash of the file
55     *
56     * @var string
57     */
58    protected $_hash;
59
60    /**
61     * Sets validator options
62     *
63     * $hash is the hash we accept for the file $file
64     *
65     * @param  string|array $options
66     * @return void
67     */
68    public function __construct($options)
69    {
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');
77        }
78
79        $this->setMd5($options);
80    }
81
82    /**
83     * Returns all set md5 hashes
84     *
85     * @return array
86     */
87    public function getMd5()
88    {
89        return $this->getHash();
90    }
91
92    /**
93     * Sets the md5 hash for one or multiple files
94     *
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
98     */
99    public function setHash($options)
100    {
101        if (!is_array($options)) {
102            $options = (array) $options;
103        }
104
105        $options['algorithm'] = 'md5';
106        parent::setHash($options);
107        return $this;
108    }
109
110    /**
111     * Sets the md5 hash for one or multiple files
112     *
113     * @param  string|array $options
114     * @return Zend_Validate_File_Hash Provides a fluent interface
115     */
116    public function setMd5($options)
117    {
118        $this->setHash($options);
119        return $this;
120    }
121
122    /**
123     * Adds the md5 hash for one or multiple files
124     *
125     * @param  string|array $options
126     * @param  string       $algorithm (Deprecated) Algorithm to use, fixed to md5
127     * @return Zend_Validate_File_Hash Provides a fluent interface
128     */
129    public function addHash($options)
130    {
131        if (!is_array($options)) {
132            $options = (array) $options;
133        }
134
135        $options['algorithm'] = 'md5';
136        parent::addHash($options);
137        return $this;
138    }
139
140    /**
141     * Adds the md5 hash for one or multiple files
142     *
143     * @param  string|array $options
144     * @return Zend_Validate_File_Hash Provides a fluent interface
145     */
146    public function addMd5($options)
147    {
148        $this->addHash($options);
149        return $this;
150    }
151
152    /**
153     * Defined by Zend_Validate_Interface
154     *
155     * Returns true if and only if the given file confirms the set hash
156     *
157     * @param  string $value Filename to check for hash
158     * @param  array  $file  File data from Zend_File_Transfer
159     * @return boolean
160     */
161    public function isValid($value, $file = null)
162    {
163        // Is file readable ?
164        require_once 'Zend/Loader.php';
165        if (!Zend_Loader::isReadable($value)) {
166            return $this->_throw($file, self::NOT_FOUND);
167        }
168
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);
173        }
174
175        foreach($hashes as $hash) {
176            if ($filehash === $hash) {
177                return true;
178            }
179        }
180
181        return $this->_throw($file, self::DOES_NOT_MATCH);
182    }
183}
Note: See TracBrowser for help on using the repository browser.