__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <[email protected]> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Validator\Constraints; use Symfony\Component\HttpFoundation\File\File as FileObject; use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\Mime\MimeTypes; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidator; use Symfony\Component\Validator\Exception\LogicException; use Symfony\Component\Validator\Exception\UnexpectedTypeException; use Symfony\Component\Validator\Exception\UnexpectedValueException; /** * @author Bernhard Schussek <[email protected]> */ class FileValidator extends ConstraintValidator { public const KB_BYTES = 1000; public const MB_BYTES = 1000000; public const KIB_BYTES = 1024; public const MIB_BYTES = 1048576; private const SUFFICES = [ 1 => 'bytes', self::KB_BYTES => 'kB', self::MB_BYTES => 'MB', self::KIB_BYTES => 'KiB', self::MIB_BYTES => 'MiB', ]; /** * @return void */ public function validate(mixed $value, Constraint $constraint) { if (!$constraint instanceof File) { throw new UnexpectedTypeException($constraint, File::class); } if (null === $value || '' === $value) { return; } if ($value instanceof UploadedFile && !$value->isValid()) { switch ($value->getError()) { case \UPLOAD_ERR_INI_SIZE: $iniLimitSize = UploadedFile::getMaxFilesize(); if ($constraint->maxSize && $constraint->maxSize < $iniLimitSize) { $limitInBytes = $constraint->maxSize; $binaryFormat = $constraint->binaryFormat; } else { $limitInBytes = $iniLimitSize; $binaryFormat = $constraint->binaryFormat ?? true; } [, $limitAsString, $suffix] = $this->factorizeSizes(0, $limitInBytes, $binaryFormat); $this->context->buildViolation($constraint->uploadIniSizeErrorMessage) ->setParameter('{{ limit }}', $limitAsString) ->setParameter('{{ suffix }}', $suffix) ->setCode((string) \UPLOAD_ERR_INI_SIZE) ->addViolation(); return; case \UPLOAD_ERR_FORM_SIZE: $this->context->buildViolation($constraint->uploadFormSizeErrorMessage) ->setCode((string) \UPLOAD_ERR_FORM_SIZE) ->addViolation(); return; case \UPLOAD_ERR_PARTIAL: $this->context->buildViolation($constraint->uploadPartialErrorMessage) ->setCode((string) \UPLOAD_ERR_PARTIAL) ->addViolation(); return; case \UPLOAD_ERR_NO_FILE: $this->context->buildViolation($constraint->uploadNoFileErrorMessage) ->setCode((string) \UPLOAD_ERR_NO_FILE) ->addViolation(); return; case \UPLOAD_ERR_NO_TMP_DIR: $this->context->buildViolation($constraint->uploadNoTmpDirErrorMessage) ->setCode((string) \UPLOAD_ERR_NO_TMP_DIR) ->addViolation(); return; case \UPLOAD_ERR_CANT_WRITE: $this->context->buildViolation($constraint->uploadCantWriteErrorMessage) ->setCode((string) \UPLOAD_ERR_CANT_WRITE) ->addViolation(); return; case \UPLOAD_ERR_EXTENSION: $this->context->buildViolation($constraint->uploadExtensionErrorMessage) ->setCode((string) \UPLOAD_ERR_EXTENSION) ->addViolation(); return; default: $this->context->buildViolation($constraint->uploadErrorMessage) ->setCode((string) $value->getError()) ->addViolation(); return; } } if (!\is_scalar($value) && !$value instanceof FileObject && !$value instanceof \Stringable) { throw new UnexpectedValueException($value, 'string'); } $path = $value instanceof FileObject ? $value->getPathname() : (string) $value; if (!is_file($path)) { $this->context->buildViolation($constraint->notFoundMessage) ->setParameter('{{ file }}', $this->formatValue($path)) ->setCode(File::NOT_FOUND_ERROR) ->addViolation(); return; } if (!is_readable($path)) { $this->context->buildViolation($constraint->notReadableMessage) ->setParameter('{{ file }}', $this->formatValue($path)) ->setCode(File::NOT_READABLE_ERROR) ->addViolation(); return; } $sizeInBytes = filesize($path); $basename = $value instanceof UploadedFile ? $value->getClientOriginalName() : basename($path); if ($constraint->filenameMaxLength && $constraint->filenameMaxLength < $filenameLength = \strlen($basename)) { $this->context->buildViolation($constraint->filenameTooLongMessage) ->setParameter('{{ filename_max_length }}', $this->formatValue($constraint->filenameMaxLength)) ->setCode(File::FILENAME_TOO_LONG) ->setPlural($constraint->filenameMaxLength) ->addViolation(); return; } if (0 === $sizeInBytes) { $this->context->buildViolation($constraint->disallowEmptyMessage) ->setParameter('{{ file }}', $this->formatValue($path)) ->setParameter('{{ name }}', $this->formatValue($basename)) ->setCode(File::EMPTY_ERROR) ->addViolation(); return; } if ($constraint->maxSize) { $limitInBytes = $constraint->maxSize; if ($sizeInBytes > $limitInBytes) { [$sizeAsString, $limitAsString, $suffix] = $this->factorizeSizes($sizeInBytes, $limitInBytes, $constraint->binaryFormat); $this->context->buildViolation($constraint->maxSizeMessage) ->setParameter('{{ file }}', $this->formatValue($path)) ->setParameter('{{ size }}', $sizeAsString) ->setParameter('{{ limit }}', $limitAsString) ->setParameter('{{ suffix }}', $suffix) ->setParameter('{{ name }}', $this->formatValue($basename)) ->setCode(File::TOO_LARGE_ERROR) ->addViolation(); return; } } $mimeTypes = (array) $constraint->mimeTypes; if ($constraint->extensions) { $fileExtension = strtolower(pathinfo($basename, \PATHINFO_EXTENSION)); $found = false; $normalizedExtensions = []; foreach ((array) $constraint->extensions as $k => $v) { if (!\is_string($k)) { $k = $v; $v = null; } $normalizedExtensions[] = $k; if ($fileExtension !== $k) { continue; } $found = true; if (null === $v) { if (!class_exists(MimeTypes::class)) { throw new LogicException('You cannot validate the mime-type of files as the Mime component is not installed. Try running "composer require symfony/mime".'); } $mimeTypesHelper = MimeTypes::getDefault(); $v = $mimeTypesHelper->getMimeTypes($k); } $mimeTypes = $mimeTypes ? array_intersect($v, $mimeTypes) : (array) $v; break; } if (!$found) { $this->context->buildViolation($constraint->extensionsMessage) ->setParameter('{{ file }}', $this->formatValue($path)) ->setParameter('{{ extension }}', $this->formatValue($fileExtension)) ->setParameter('{{ extensions }}', $this->formatValues($normalizedExtensions)) ->setParameter('{{ name }}', $this->formatValue($basename)) ->setCode(File::INVALID_EXTENSION_ERROR) ->addViolation(); } } if ($mimeTypes) { if ($value instanceof FileObject) { $mime = $value->getMimeType(); } elseif (isset($mimeTypesHelper) || class_exists(MimeTypes::class)) { $mime = ($mimeTypesHelper ?? MimeTypes::getDefault())->guessMimeType($path); } elseif (!class_exists(FileObject::class)) { throw new LogicException('You cannot validate the mime-type of files as the Mime component is not installed. Try running "composer require symfony/mime".'); } else { $mime = (new FileObject($value))->getMimeType(); } foreach ($mimeTypes as $mimeType) { if ($mimeType === $mime) { return; } if ($discrete = strstr($mimeType, '/*', true)) { if (strstr($mime, '/', true) === $discrete) { return; } } } $this->context->buildViolation($constraint->mimeTypesMessage) ->setParameter('{{ file }}', $this->formatValue($path)) ->setParameter('{{ type }}', $this->formatValue($mime)) ->setParameter('{{ types }}', $this->formatValues($mimeTypes)) ->setParameter('{{ name }}', $this->formatValue($basename)) ->setCode(File::INVALID_MIME_TYPE_ERROR) ->addViolation(); } } private static function moreDecimalsThan(string $double, int $numberOfDecimals): bool { return \strlen($double) > \strlen(round($double, $numberOfDecimals)); } /** * Convert the limit to the smallest possible number * (i.e. try "MB", then "kB", then "bytes"). */ private function factorizeSizes(int $size, int|float $limit, bool $binaryFormat): array { if ($binaryFormat) { $coef = self::MIB_BYTES; $coefFactor = self::KIB_BYTES; } else { $coef = self::MB_BYTES; $coefFactor = self::KB_BYTES; } // If $limit < $coef, $limitAsString could be < 1 with less than 3 decimals. // In this case, we would end up displaying an allowed size < 1 (eg: 0.1 MB). // It looks better to keep on factorizing (to display 100 kB for example). while ($limit < $coef) { $coef /= $coefFactor; } $limitAsString = (string) ($limit / $coef); // Restrict the limit to 2 decimals (without rounding! we // need the precise value) while (self::moreDecimalsThan($limitAsString, 2)) { $coef /= $coefFactor; $limitAsString = (string) ($limit / $coef); } // Convert size to the same measure, but round to 2 decimals $sizeAsString = (string) round($size / $coef, 2); // If the size and limit produce the same string output // (due to rounding), reduce the coefficient while ($sizeAsString === $limitAsString) { $coef /= $coefFactor; $limitAsString = (string) ($limit / $coef); $sizeAsString = (string) round($size / $coef, 2); } return [$sizeAsString, $limitAsString, self::SUFFICES[$coef]]; } }
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| AbstractComparison.php | File | 2.19 KB | 0664 |
|
| AbstractComparisonValidator.php | File | 4.1 KB | 0664 |
|
| All.php | File | 1.02 KB | 0664 |
|
| AllValidator.php | File | 1.31 KB | 0664 |
|
| AtLeastOneOf.php | File | 1.93 KB | 0664 |
|
| AtLeastOneOfValidator.php | File | 2.54 KB | 0664 |
|
| Bic.php | File | 3.29 KB | 0664 |
|
| BicValidator.php | File | 6.13 KB | 0664 |
|
| Blank.php | File | 1.19 KB | 0664 |
|
| BlankValidator.php | File | 1.07 KB | 0664 |
|
| Callback.php | File | 1.58 KB | 0664 |
|
| CallbackValidator.php | File | 2.09 KB | 0664 |
|
| CardScheme.php | File | 2.28 KB | 0664 |
|
| CardSchemeValidator.php | File | 5.01 KB | 0664 |
|
| Cascade.php | File | 1.26 KB | 0664 |
|
| Choice.php | File | 3.12 KB | 0664 |
|
| ChoiceValidator.php | File | 4.09 KB | 0664 |
|
| Cidr.php | File | 2.78 KB | 0664 |
|
| CidrValidator.php | File | 2.32 KB | 0664 |
|
| Collection.php | File | 3.7 KB | 0664 |
|
| CollectionValidator.php | File | 3.4 KB | 0664 |
|
| Composite.php | File | 5.44 KB | 0664 |
|
| Compound.php | File | 1.39 KB | 0664 |
|
| CompoundValidator.php | File | 1002 B | 0664 |
|
| Count.php | File | 3.5 KB | 0664 |
|
| CountValidator.php | File | 2.8 KB | 0664 |
|
| Country.php | File | 1.64 KB | 0664 |
|
| CountryValidator.php | File | 1.55 KB | 0664 |
|
| CssColor.php | File | 3.7 KB | 0664 |
|
| CssColorValidator.php | File | 5.36 KB | 0664 |
|
| Currency.php | File | 1.56 KB | 0664 |
|
| CurrencyValidator.php | File | 1.54 KB | 0664 |
|
| Date.php | File | 1.33 KB | 0664 |
|
| DateTime.php | File | 1.8 KB | 0664 |
|
| DateTimeValidator.php | File | 2.71 KB | 0664 |
|
| DateValidator.php | File | 2.12 KB | 0664 |
|
| DisableAutoMapping.php | File | 1.27 KB | 0664 |
|
| DivisibleBy.php | File | 956 B | 0664 |
|
| DivisibleByValidator.php | File | 1.52 KB | 0664 |
|
| Email.php | File | 3.45 KB | 0664 |
|
| EmailValidator.php | File | 4.79 KB | 0664 |
|
| EnableAutoMapping.php | File | 1.27 KB | 0664 |
|
| EqualTo.php | File | 999 B | 0664 |
|
| EqualToValidator.php | File | 723 B | 0664 |
|
| Existence.php | File | 612 B | 0664 |
|
| Expression.php | File | 2.63 KB | 0664 |
|
| ExpressionLanguageProvider.php | File | 1.09 KB | 0664 |
|
| ExpressionLanguageSyntax.php | File | 1.84 KB | 0664 |
|
| ExpressionLanguageSyntaxValidator.php | File | 2.37 KB | 0664 |
|
| ExpressionSyntax.php | File | 1.44 KB | 0664 |
|
| ExpressionSyntaxValidator.php | File | 1.92 KB | 0664 |
|
| ExpressionValidator.php | File | 2.05 KB | 0664 |
|
| File.php | File | 7.84 KB | 0664 |
|
| FileValidator.php | File | 11.92 KB | 0664 |
|
| GreaterThan.php | File | 1001 B | 0664 |
|
| GreaterThanOrEqual.php | File | 1020 B | 0664 |
|
| GreaterThanOrEqualValidator.php | File | 795 B | 0664 |
|
| GreaterThanValidator.php | File | 767 B | 0664 |
|
| GroupSequence.php | File | 2.62 KB | 0664 |
|
| GroupSequenceProvider.php | File | 790 B | 0664 |
|
| Hostname.php | File | 1.37 KB | 0664 |
|
| HostnameValidator.php | File | 2.03 KB | 0664 |
|
| Iban.php | File | 1.92 KB | 0664 |
|
| IbanValidator.php | File | 12.94 KB | 0664 |
|
| IdenticalTo.php | File | 1.02 KB | 0664 |
|
| IdenticalToValidator.php | File | 741 B | 0664 |
|
| Image.php | File | 9.63 KB | 0664 |
|
| ImageValidator.php | File | 9.21 KB | 0664 |
|
| Ip.php | File | 3.32 KB | 0664 |
|
| IpValidator.php | File | 2.48 KB | 0664 |
|
| IsFalse.php | File | 1.19 KB | 0664 |
|
| IsFalseValidator.php | File | 1.12 KB | 0664 |
|
| IsNull.php | File | 1.19 KB | 0664 |
|
| IsNullValidator.php | File | 1.05 KB | 0664 |
|
| IsTrue.php | File | 1.19 KB | 0664 |
|
| IsTrueValidator.php | File | 1.11 KB | 0664 |
|
| Isbn.php | File | 2.78 KB | 0664 |
|
| IsbnValidator.php | File | 5.55 KB | 0664 |
|
| Isin.php | File | 1.65 KB | 0664 |
|
| IsinValidator.php | File | 2.46 KB | 0664 |
|
| Issn.php | File | 2.24 KB | 0664 |
|
| IssnValidator.php | File | 4.07 KB | 0664 |
|
| Json.php | File | 1.19 KB | 0664 |
|
| JsonValidator.php | File | 1.37 KB | 0664 |
|
| Language.php | File | 1.65 KB | 0664 |
|
| LanguageValidator.php | File | 1.55 KB | 0664 |
|
| Length.php | File | 4.64 KB | 0664 |
|
| LengthValidator.php | File | 3.73 KB | 0664 |
|
| LessThan.php | File | 998 B | 0664 |
|
| LessThanOrEqual.php | File | 1017 B | 0664 |
|
| LessThanOrEqualValidator.php | File | 787 B | 0664 |
|
| LessThanValidator.php | File | 759 B | 0664 |
|
| Locale.php | File | 1.66 KB | 0664 |
|
| LocaleValidator.php | File | 1.62 KB | 0664 |
|
| Luhn.php | File | 1.55 KB | 0664 |
|
| LuhnValidator.php | File | 3.15 KB | 0664 |
|
| Negative.php | File | 653 B | 0664 |
|
| NegativeOrZero.php | File | 681 B | 0664 |
|
| NoSuspiciousCharacters.php | File | 4.61 KB | 0664 |
|
| NoSuspiciousCharactersValidator.php | File | 4.17 KB | 0664 |
|
| NotBlank.php | File | 1.8 KB | 0664 |
|
| NotBlankValidator.php | File | 1.36 KB | 0664 |
|
| NotCompromisedPassword.php | File | 1.63 KB | 0664 |
|
| NotCompromisedPasswordValidator.php | File | 3.58 KB | 0664 |
|
| NotEqualTo.php | File | 1003 B | 0664 |
|
| NotEqualToValidator.php | File | 734 B | 0664 |
|
| NotIdenticalTo.php | File | 1.02 KB | 0664 |
|
| NotIdenticalToValidator.php | File | 749 B | 0664 |
|
| NotNull.php | File | 1.19 KB | 0664 |
|
| NotNullValidator.php | File | 1.06 KB | 0664 |
|
| Optional.php | File | 431 B | 0664 |
|
| PasswordStrength.php | File | 1.79 KB | 0664 |
|
| PasswordStrengthValidator.php | File | 3.06 KB | 0664 |
|
| Positive.php | File | 656 B | 0664 |
|
| PositiveOrZero.php | File | 684 B | 0664 |
|
| Range.php | File | 4.73 KB | 0664 |
|
| RangeValidator.php | File | 7.21 KB | 0664 |
|
| Regex.php | File | 3.92 KB | 0664 |
|
| RegexValidator.php | File | 1.71 KB | 0664 |
|
| Required.php | File | 431 B | 0664 |
|
| Sequentially.php | File | 1.35 KB | 0664 |
|
| SequentiallyValidator.php | File | 1.18 KB | 0664 |
|
| Time.php | File | 1.5 KB | 0664 |
|
| TimeValidator.php | File | 2.21 KB | 0664 |
|
| Timezone.php | File | 3.24 KB | 0664 |
|
| TimezoneValidator.php | File | 3.76 KB | 0664 |
|
| Traverse.php | File | 1.1 KB | 0664 |
|
| Type.php | File | 1.6 KB | 0664 |
|
| TypeValidator.php | File | 2.92 KB | 0664 |
|
| Ulid.php | File | 1.56 KB | 0664 |
|
| UlidValidator.php | File | 2.37 KB | 0664 |
|
| Unique.php | File | 1.96 KB | 0664 |
|
| UniqueValidator.php | File | 2.46 KB | 0664 |
|
| Url.php | File | 1.97 KB | 0664 |
|
| UrlValidator.php | File | 4.81 KB | 0664 |
|
| Uuid.php | File | 3.92 KB | 0664 |
|
| UuidValidator.php | File | 8.5 KB | 0664 |
|
| Valid.php | File | 1.29 KB | 0664 |
|
| ValidValidator.php | File | 1.02 KB | 0664 |
|
| When.php | File | 2.23 KB | 0664 |
|
| WhenValidator.php | File | 1.72 KB | 0664 |
|
| ZeroComparisonConstraintTrait.php | File | 1.23 KB | 0664 |
|