113 'ignoreNoFile' =>
false,
114 'useByteString' =>
true,
116 'detectInfos' =>
true,
174 #require_once 'Zend/File/Transfer/Exception.php'; 195 #require_once 'Zend/File/Transfer/Exception.php'; 216 $prefixSegment = ucfirst(strtolower(
$type));
217 $pathSegment = $prefixSegment;
218 if (!isset($this->_loaders[
$type])) {
220 'Zend_' . $prefixSegment .
'_' =>
'Zend/' . $pathSegment .
'/',
221 'Zend_' . $prefixSegment .
'_File' =>
'Zend/' . $pathSegment .
'/File',
224 #require_once 'Zend/Loader/PluginLoader.php'; 225 $this->_loaders[
$type] =
new Zend_Loader_PluginLoader(
$paths);
228 $prefix =
'Zend_' . $prefixSegment .
'_File_';
233 return $this->_loaders[
$type];
235 #require_once 'Zend/File/Transfer/Exception.php'; 268 foreach (array(self::FILTER, self::VALIDATE) as
$type) {
269 $cType = ucfirst(strtolower(
$type));
270 $pluginPath =
$path . DIRECTORY_SEPARATOR . $cType . DIRECTORY_SEPARATOR;
271 $pluginPrefix =
$prefix .
'_' . $cType;
273 $loader->addPrefixPath($pluginPrefix, $pluginPath);
277 #require_once 'Zend/File/Transfer/Exception.php'; 290 if (isset($spec[
'prefix']) && isset($spec[
'path'])) {
297 if (isset(
$paths[
'type'])) {
303 if (!isset(
$paths[
'prefix']) || !isset(
$paths[
'path'])) {
305 if (is_array($spec)) {
306 foreach ($spec as
$path) {
307 if (!is_string(
$path)) {
312 }
elseif (is_string($spec)) {
336 $name = get_class($validator);
337 }
elseif (is_string($validator)) {
341 if (is_array(
$options[
'messages'])) {
342 $validator->setMessages(
$options[
'messages']);
344 $validator->setMessage(
$options[
'messages']);
350 #require_once 'Zend/File/Transfer/Exception.php'; 354 $this->_validators[
$name] = $validator;
355 $this->_break[
$name] = $breakChainOnFailure;
357 foreach (
$files as $file) {
358 if (
$name ==
'NotEmpty') {
359 $temp = $this->_files[$file][
'validators'];
360 $this->_files[$file][
'validators'] = array(
$name);
361 $this->_files[$file][
'validators'] += $temp;
363 $this->_files[$file][
'validators'][] =
$name;
366 $this->_files[$file][
'validated'] =
false;
381 foreach ($validators as
$name => $validatorInfo) {
384 }
else if (is_string($validatorInfo)) {
385 if (!is_int(
$name)) {
390 }
else if (is_array($validatorInfo)) {
391 $argc = count($validatorInfo);
392 $breakChainOnFailure =
false;
394 if (isset($validatorInfo[
'validator'])) {
395 $validator = $validatorInfo[
'validator'];
396 if (isset($validatorInfo[
'breakChainOnFailure'])) {
397 $breakChainOnFailure = $validatorInfo[
'breakChainOnFailure'];
400 if (isset($validatorInfo[
'options'])) {
401 $options = $validatorInfo[
'options'];
406 if (is_string(
$name)) {
416 $validator = array_shift($validatorInfo);
418 $breakChainOnFailure = array_shift($validatorInfo);
420 $options = array_shift($validatorInfo);
422 if (!empty($validatorInfo)) {
423 $file = array_shift($validatorInfo);
432 #require_once 'Zend/File/Transfer/Exception.php'; 475 return $this->_validators[$identifier];
491 $validators = array();
492 foreach (
$files as $file) {
493 if (!empty($this->_files[$file][
'validators'])) {
494 $validators += $this->_files[$file][
'validators'];
498 $validators = array_unique($validators);
500 foreach ($validators as $validator) {
501 $result[$validator] = $this->_validators[$validator];
519 unset($this->_validators[$key]);
520 foreach (array_keys($this->_files) as $file) {
521 if (empty($this->_files[$file][
'validators'])) {
525 $index = array_search($key, $this->_files[$file][
'validators']);
530 unset($this->_files[$file][
'validators'][
$index]);
531 $this->_files[$file][
'validated'] =
false;
544 $this->_validators = array();
545 foreach (array_keys($this->_files) as $file) {
546 $this->_files[$file][
'validators'] = array();
547 $this->_files[$file][
'validated'] =
false;
565 $this->_options = array_merge($this->_options,
$options);
569 foreach ($file as $key =>
$content) {
572 $this->_files[$key][
'options'][
$name] = (string)
$value;
575 case 'ignoreNoFile' :
576 case 'useByteString' :
578 $this->_files[$key][
'options'][
$name] = (boolean)
$value;
582 #require_once 'Zend/File/Transfer/Exception.php'; 601 foreach ($file as $key =>
$content) {
602 if (isset($this->_files[$key][
'options'])) {
603 $options[$key] = $this->_files[$key][
'options'];
626 $this->_messages = array();
628 foreach($check as $key =>
$content) {
629 if (array_key_exists(
'validators',
$content) &&
630 in_array(
'Zend_Validate_File_Count',
$content[
'validators'])) {
631 $validator = $this->_validators[
'Zend_Validate_File_Count'];
637 if (array_key_exists(
'destination',
$content)) {
640 $checkit = dirname(
$content[
'tmp_name']);
643 $checkit .= DIRECTORY_SEPARATOR .
$content[
'name'];
644 $validator->addFile($checkit);
650 $this->_messages += $validator->getMessages();
654 foreach ($check as $key =>
$content) {
655 $fileerrors = array();
660 if (array_key_exists(
'validators',
$content)) {
662 $validator = $this->_validators[
$class];
663 if (method_exists($validator,
'setTranslator')) {
664 $validator->setTranslator($translator);
667 if ((
$class ===
'Zend_Validate_File_Upload') and (empty(
$content[
'tmp_name']))) {
673 if (!$validator->isValid($tocheck,
$content)) {
674 $fileerrors += $validator->getMessages();
677 if (!empty(
$content[
'options'][
'ignoreNoFile']) and (isset($fileerrors[
'fileUploadErrorNoFile']))) {
678 unset($fileerrors[
'fileUploadErrorNoFile']);
682 if ((
$class ===
'Zend_Validate_File_Upload') and (count($fileerrors) > 0)) {
686 if (($this->_break[
$class]) and (count($fileerrors) > 0)) {
693 if (count($fileerrors) > 0) {
694 $this->_files[$key][
'validated'] =
false;
696 $this->_files[$key][
'validated'] =
true;
699 $this->_messages += $fileerrors;
705 if (count($this->_messages) > 0) {
729 return array_keys($this->_messages);
739 return (!empty($this->_messages));
753 $class = get_class($filter);
754 }
elseif (is_string($filter)) {
758 #require_once 'Zend/File/Transfer/Exception.php'; 762 $this->_filters[
$class] = $filter;
764 foreach (
$files as $file) {
765 $this->_files[$file][
'filters'][] =
$class;
780 foreach (
$filters as $key => $spec) {
786 if (is_string($key)) {
792 if (is_string($spec)) {
797 if (is_array($spec)) {
798 if (!array_key_exists(
'filter', $spec)) {
802 $filter = $spec[
'filter'];
803 unset($spec[
'filter']);
850 return $this->_filters[$identifier];
868 foreach (
$files as $file) {
869 if (!empty($this->_files[$file][
'filters'])) {
870 $filters += $this->_files[$file][
'filters'];
877 $result[] = $this->_filters[$filter];
895 unset($this->_filters[$key]);
896 foreach (array_keys($this->_files) as $file) {
897 if (empty($this->_files[$file][
'filters'])) {
901 $index = array_search($key, $this->_files[$file][
'filters']);
906 unset($this->_files[$file][
'filters'][
$index]);
918 $this->_filters = array();
919 foreach (array_keys($this->_files) as $file) {
920 $this->_files[$file][
'filters'] = array();
933 #require_once 'Zend/File/Transfer/Exception.php'; 949 foreach(
$files as $file) {
950 if (empty($this->_files[$file][
'name'])) {
954 if (
$path ===
true) {
958 $result[$file] = $directory . $this->_files[$file][
'name'];
988 public function addFile($file, $validator =
null, $filter =
null)
990 #require_once 'Zend/File/Transfer/Exception.php'; 1002 #require_once 'Zend/File/Transfer/Exception.php'; 1017 #require_once 'Zend/File/Transfer/Exception.php'; 1033 $destination = rtrim($destination,
"/\\");
1034 if (!
is_dir($destination)) {
1035 #require_once 'Zend/File/Transfer/Exception.php'; 1037 'The given destination is not a directory or does not exist' 1042 #require_once 'Zend/File/Transfer/Exception.php'; 1044 'The given destination is not writable' 1049 foreach ($this->_files as $file =>
$content) {
1050 $this->_files[$file][
'destination'] = $destination;
1054 if (empty(
$files) and is_string($orig)) {
1055 $this->_files[$orig][
'destination'] = $destination;
1058 foreach (
$files as $file) {
1059 $this->_files[$file][
'destination'] = $destination;
1077 $destinations = array();
1078 if (empty(
$files) and is_string($orig)) {
1079 if (isset($this->_files[$orig][
'destination'])) {
1080 $destinations[$orig] = $this->_files[$orig][
'destination'];
1082 #require_once 'Zend/File/Transfer/Exception.php'; 1088 if (isset($this->_files[$key][
'destination'])) {
1089 $destinations[$key] = $this->_files[$key][
'destination'];
1093 $destinations[$key] = $tmpdir;
1097 if (empty($destinations)) {
1099 }
else if (count($destinations) == 1) {
1100 $destinations = current($destinations);
1103 return $destinations;
1115 if (
null === $translator) {
1116 $this->_translator =
null;
1118 $this->_translator = $translator;
1120 $this->_translator = $translator->getAdapter();
1122 #require_once 'Zend/File/Transfer/Exception.php'; 1151 $this->_translatorDisabled = (bool) $flag;
1175 if (!in_array($hash, hash_algos())) {
1176 #require_once 'Zend/File/Transfer/Exception.php'; 1183 if (file_exists(
$value[
'name'])) {
1185 }
else if (file_exists(
$value[
'tmp_name'])) {
1187 }
else if (empty(
$value[
'options'][
'ignoreNoFile'])) {
1188 #require_once 'Zend/File/Transfer/Exception.php'; 1212 if (file_exists(
$value[
'name']) || file_exists(
$value[
'tmp_name'])) {
1213 if (
$value[
'options'][
'useByteString']) {
1218 }
else if (empty(
$value[
'options'][
'ignoreNoFile'])) {
1219 #require_once 'Zend/File/Transfer/Exception.php'; 1241 if (file_exists(
$value[
'name'])) {
1243 }
else if (file_exists(
$value[
'tmp_name'])) {
1265 if (file_exists(
$value[
'name']) || file_exists(
$value[
'tmp_name'])) {
1267 }
else if (empty(
$value[
'options'][
'ignoreNoFile'])) {
1268 #require_once 'Zend/File/Transfer/Exception.php'; 1290 if (file_exists(
$value[
'name'])) {
1292 }
else if (file_exists(
$value[
'tmp_name'])) {
1293 $file =
$value[
'tmp_name'];
1299 $const = defined(
'FILEINFO_MIME_TYPE') ? FILEINFO_MIME_TYPE : FILEINFO_MIME;
1300 if (!empty(
$value[
'options'][
'magicFile'])) {
1301 $mime = @finfo_open($const,
$value[
'options'][
'magicFile']);
1305 $mime = @finfo_open($const);
1308 if (!empty($mime)) {
1309 $result = finfo_file($mime, $file);
1316 &&
ini_get(
'mime_magic.magicfile'))) {
1321 $result =
'application/octet-stream';
1335 $sizes = array(
'B',
'kB',
'MB',
'GB',
'TB',
'PB',
'EB',
'ZB',
'YB');
1336 for (
$i=0; $size >= 1024 &&
$i < 9;
$i++) {
1340 return round($size, 2) . $sizes[
$i];
1353 if (array_key_exists(
'filters',
$content)) {
1355 $filter = $this->_filters[
$class];
1359 $this->_files[
$name][
'destination'] = dirname(
$result);
1362 $this->_messages += array($e->getMessage());
1368 if (count($this->_messages) > 0) {
1383 if (
null === $this->_tmpDir) {
1386 $tmpdir[] = sys_get_temp_dir();
1389 if (!empty($_ENV[
'TMP'])) {
1390 $tmpdir[] = realpath($_ENV[
'TMP']);
1393 if (!empty($_ENV[
'TMPDIR'])) {
1394 $tmpdir[] = realpath($_ENV[
'TMPDIR']);
1397 if (!empty($_ENV[
'TEMP'])) {
1398 $tmpdir[] = realpath($_ENV[
'TEMP']);
1401 $upload =
ini_get(
'upload_tmp_dir');
1403 $tmpdir[] = realpath($upload);
1406 foreach($tmpdir as $directory) {
1408 $this->_tmpDir = $directory;
1412 if (empty($this->_tmpDir)) {
1414 $tempFile = tempnam(md5(uniqid(rand(), TRUE)),
'');
1416 $this->_tmpDir = realpath(dirname($tempFile));
1419 #require_once 'Zend/File/Transfer/Exception.php'; 1424 $this->_tmpDir = rtrim($this->_tmpDir,
"/\\");
1437 $tempFile = rtrim(
$path,
"/\\");
1438 $tempFile .=
'/' .
'test.1';
1473 foreach (
$files as $find) {
1475 foreach ($this->_files as $file =>
$content) {
1481 foreach (
$content[
'multifiles'] as $multifile) {
1482 $found[] = $multifile;
1487 if ($file === $find) {
1498 if (empty($found)) {
1499 if ($noexception !==
false) {
1503 #require_once 'Zend/File/Transfer/Exception.php'; 1515 $keys = array_keys($check);
1516 foreach ($keys as $key) {
1517 if (isset($check[$key][
'multifiles'])) {
1518 unset($check[$key]);
1524 $check = array_keys($check);
1538 if (array_key_exists(
$name, $this->_validators)) {
1542 foreach (array_keys($this->_validators) as $test) {
1543 if (preg_match(
'/' . preg_quote(
$name) .
'$/i', $test)) {
1559 if (array_key_exists(
$name, $this->_filters)) {
1563 foreach (array_keys($this->_filters) as $test) {
1564 if (preg_match(
'/' . preg_quote(
$name) .
'$/i', $test)) {
addValidators(array $validators, $files=null)
addType($type, $validator=null, $filter=null)
addFilter($filter, $options=null, $files=null)
addPrefixPath($prefix, $path, $type=null)
addFile($file, $validator=null, $filter=null)
setValidators(array $validators, $files=null)
elseif(isset( $params[ 'redirect_parent']))
setDestination($destination, $files=null)
getValidators($files=null)
addPrefixPaths(array $spec)
getHash($hash='crc32', $files=null)
addFilters(array $filters, $files=null)
getFileName($file=null, $path=true)
static _toByteString($size)
$_option $_optionId $class
getDestination($files=null)
addValidator($validator, $breakChainOnFailure=false, $options=null, $files=null)
_getValidatorIdentifier($name)
setTranslator($translator=null)
setFilters(array $filters, $files=null)
_getFiles($files, $names=false, $noexception=false)
setOptions($options=array(), $files=null)
setPluginLoader(Zend_Loader_PluginLoader_Interface $loader, $type)
setDisableTranslator($flag)
foreach($appDirs as $dir) $files
_getFilterIdentifier($name)
if(!isset($_GET['name'])) $name