Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
peripherad
/
vendor
/
spatie
/
image-optimizer
/
src
:
Image.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace Spatie\ImageOptimizer; use InvalidArgumentException; class Image { protected $pathToImage = ''; protected const ALLOWED_PROTOCOLS = ['file']; protected const WINDOWS_LOCAL_FILENAME_REGEX = '/^[a-z]:(?:[\\\\\/]?(?:[\w\s!#()-]+|[\.]{1,2})+)*[\\\\\/]?/i'; public function __construct(string $pathToImage) { if (! $this->isProtocolAllowed($pathToImage)) { throw new InvalidArgumentException(\sprintf('The output file scheme is not supported. Expected one of [\'%s\'].', \implode('\', \'', self::ALLOWED_PROTOCOLS))); } if (! file_exists($pathToImage)) { throw new InvalidArgumentException("`{$pathToImage}` does not exist"); } $this->pathToImage = $pathToImage; } public function mime(): string { return mime_content_type($this->pathToImage); } public function path(): string { return $this->pathToImage; } public function extension(): string { $extension = pathinfo($this->pathToImage, PATHINFO_EXTENSION); return strtolower($extension); } protected function isProtocolAllowed($filename) { if (false === $parsedFilename = \parse_url($filename)) { throw new InvalidArgumentException('The filename is not valid.'); } $protocol = isset($parsedFilename['scheme']) ? \mb_strtolower($parsedFilename['scheme']) : 'file'; if ( \PHP_OS_FAMILY === 'Windows' && \strlen($protocol) === 1 && \preg_match(self::WINDOWS_LOCAL_FILENAME_REGEX, $filename) ) { $protocol = 'file'; } return \in_array($protocol, self::ALLOWED_PROTOCOLS, true); } }