Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Upload.php
Go to the documentation of this file.
1 <?php
25 #require_once 'Zend/Validate/Abstract.php';
26 
36 {
40  const INI_SIZE = 'fileUploadErrorIniSize';
41  const FORM_SIZE = 'fileUploadErrorFormSize';
42  const PARTIAL = 'fileUploadErrorPartial';
43  const NO_FILE = 'fileUploadErrorNoFile';
44  const NO_TMP_DIR = 'fileUploadErrorNoTmpDir';
45  const CANT_WRITE = 'fileUploadErrorCantWrite';
46  const EXTENSION = 'fileUploadErrorExtension';
47  const ATTACK = 'fileUploadErrorAttack';
48  const FILE_NOT_FOUND = 'fileUploadErrorFileNotFound';
49  const UNKNOWN = 'fileUploadErrorUnknown';
55  protected $_messageTemplates = array(
56  self::INI_SIZE => "File '%value%' exceeds the defined ini size",
57  self::FORM_SIZE => "File '%value%' exceeds the defined form size",
58  self::PARTIAL => "File '%value%' was only partially uploaded",
59  self::NO_FILE => "File '%value%' was not uploaded",
60  self::NO_TMP_DIR => "No temporary directory was found for file '%value%'",
61  self::CANT_WRITE => "File '%value%' can't be written",
62  self::EXTENSION => "A PHP extension returned an error while uploading the file '%value%'",
63  self::ATTACK => "File '%value%' was illegally uploaded. This could be a possible attack",
64  self::FILE_NOT_FOUND => "File '%value%' was not found",
65  self::UNKNOWN => "Unknown error while uploading file '%value%'"
66  );
67 
72  protected $_files = array();
73 
83  public function __construct($files = array())
84  {
85  if ($files instanceof Zend_Config) {
86  $files = $files->toArray();
87  }
88 
89  $this->setFiles($files);
90  }
91 
99  public function getFiles($file = null)
100  {
101  if ($file !== null) {
102  $return = array();
103  foreach ($this->_files as $name => $content) {
104  if ($name === $file) {
105  $return[$file] = $this->_files[$name];
106  }
107 
108  if ($content['name'] === $file) {
109  $return[$name] = $this->_files[$name];
110  }
111  }
112 
113  if (count($return) === 0) {
114  #require_once 'Zend/Validate/Exception.php';
115  throw new Zend_Validate_Exception("The file '$file' was not found");
116  }
117 
118  return $return;
119  }
120 
121  return $this->_files;
122  }
123 
130  public function setFiles($files = array())
131  {
132  if (count($files) === 0) {
133  $this->_files = $_FILES;
134  } else {
135  $this->_files = $files;
136  }
137 
138  // see ZF-10738
139  if (is_null($this->_files)) {
140  $this->_files = array();
141  }
142 
143  foreach($this->_files as $file => $content) {
144  if (!isset($content['error'])) {
145  unset($this->_files[$file]);
146  }
147  }
148 
149  return $this;
150  }
151 
162  public function isValid($value, $file = null)
163  {
164  $this->_messages = [];
165  if (array_key_exists($value, $this->_files)) {
166  $files[$value] = $this->_files[$value];
167  } else {
168  foreach ($this->_files as $file => $content) {
169  if (isset($content['name']) && ($content['name'] === $value)) {
170  $files[$file] = $this->_files[$file];
171  }
172 
173  if (isset($content['tmp_name']) && ($content['tmp_name'] === $value)) {
174  $files[$file] = $this->_files[$file];
175  }
176  }
177  }
178 
179  if (empty($files)) {
180  return $this->_throw($file, self::FILE_NOT_FOUND);
181  }
182 
183  foreach ($files as $file => $content) {
184  $this->_value = $file;
185  switch($content['error']) {
186  case 0:
187  if (!is_uploaded_file($content['tmp_name'])) {
188  $this->_throw($content, self::ATTACK);
189  }
190  break;
191 
192  case 1:
193  $this->_throw($content, self::INI_SIZE);
194  break;
195 
196  case 2:
197  $this->_throw($content, self::FORM_SIZE);
198  break;
199 
200  case 3:
201  $this->_throw($content, self::PARTIAL);
202  break;
203 
204  case 4:
205  $this->_throw($content, self::NO_FILE);
206  break;
207 
208  case 6:
209  $this->_throw($content, self::NO_TMP_DIR);
210  break;
211 
212  case 7:
213  $this->_throw($content, self::CANT_WRITE);
214  break;
215 
216  case 8:
217  $this->_throw($content, self::EXTENSION);
218  break;
219 
220  default:
221  $this->_throw($content, self::UNKNOWN);
222  break;
223  }
224  }
225 
226  return empty($this->_messages);
227  }
228 
236  protected function _throw($file, $errorType)
237  {
238  if ($file !== null) {
239  if (is_array($file) and !empty($file['name'])) {
240  $this->_value = $file['name'];
241  }
242  }
243 
244  $this->_error($errorType);
245  return false;
246  }
247 }
setFiles($files=array())
Definition: Upload.php:130
__construct($files=array())
Definition: Upload.php:83
getFiles($file=null)
Definition: Upload.php:99
_error($messageKey, $value=null)
Definition: Abstract.php:284
$value
Definition: gender.phtml:16
_throw($file, $errorType)
Definition: Upload.php:236
foreach($appDirs as $dir) $files
isValid($value, $file=null)
Definition: Upload.php:162
if(!isset($_GET['name'])) $name
Definition: log.php:14