芝麻web文件管理V1.00
编辑当前文件:/home/qrafawbu/rentandbuyrealty.com/rentandbuyrealty.com/vendor/league/glide/src/Server.php
setSource($source); $this->setCache($cache); $this->setApi($api); $this->tempDir = sys_get_temp_dir(); } /** * Set source file system. * * @param FilesystemOperator $source Source file system. * * @return void */ public function setSource(FilesystemOperator $source) { $this->source = $source; } /** * Get source file system. * * @return FilesystemOperator Source file system. */ public function getSource() { return $this->source; } /** * Set source path prefix. * * @param string $sourcePathPrefix Source path prefix. * * @return void */ public function setSourcePathPrefix($sourcePathPrefix) { $this->sourcePathPrefix = trim($sourcePathPrefix, '/'); } /** * Get source path prefix. * * @return string Source path prefix. */ public function getSourcePathPrefix() { return $this->sourcePathPrefix; } /** * Get source path. * * @param string $path Image path. * * @return string The source path. * * @throws FileNotFoundException */ public function getSourcePath($path) { $path = trim($path, '/'); $baseUrl = $this->baseUrl.'/'; if (substr($path, 0, strlen($baseUrl)) === $baseUrl) { $path = trim(substr($path, strlen($baseUrl)), '/'); } if ('' === $path) { throw new FileNotFoundException('Image path missing.'); } if ($this->sourcePathPrefix) { $path = $this->sourcePathPrefix.'/'.$path; } return rawurldecode($path); } /** * Check if a source file exists. * * @param string $path Image path. * * @return bool Whether the source file exists. */ public function sourceFileExists($path) { try { return $this->source->fileExists($this->getSourcePath($path)); } catch (FilesystemV2Exception $exception) { return false; } } /** * Set base URL. * * @param string $baseUrl Base URL. * * @return void */ public function setBaseUrl($baseUrl) { $this->baseUrl = trim($baseUrl, '/'); } /** * Get base URL. * * @return string Base URL. */ public function getBaseUrl() { return $this->baseUrl; } /** * Set cache file system. * * @param FilesystemOperator $cache Cache file system. * * @return void */ public function setCache(FilesystemOperator $cache) { $this->cache = $cache; } /** * Get cache file system. * * @return FilesystemOperator Cache file system. */ public function getCache() { return $this->cache; } /** * Set cache path prefix. * * @param string $cachePathPrefix Cache path prefix. * * @return void */ public function setCachePathPrefix($cachePathPrefix) { $this->cachePathPrefix = trim($cachePathPrefix, '/'); } /** * Get cache path prefix. * * @return string Cache path prefix. */ public function getCachePathPrefix() { return $this->cachePathPrefix; } /** * Get temporary EXIF data directory. * * @return string */ public function getTempDir() { return $this->tempDir; } /** * Set temporary EXIF data directory. This directory must be a local path and exists on the filesystem. * * @param string $tempDir * * @return void * * @throws InvalidArgumentException */ public function setTempDir($tempDir) { if (!$tempDir || !is_dir($tempDir)) { throw new InvalidArgumentException(sprintf('Invalid temp dir provided: "%s" does not exist.', $tempDir)); } $this->tempDir = rtrim($tempDir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR; } /** * Set the group cache in folders setting. * * @param bool $groupCacheInFolders Whether to group cache in folders. * * @return void */ public function setGroupCacheInFolders($groupCacheInFolders) { $this->groupCacheInFolders = $groupCacheInFolders; } /** * Get the group cache in folders setting. * * @return bool Whether to group cache in folders. */ public function getGroupCacheInFolders() { return $this->groupCacheInFolders; } /** * Set the cache with file extensions setting. * * @param bool $cacheWithFileExtensions Whether to cache with file extensions. * * @return void */ public function setCacheWithFileExtensions($cacheWithFileExtensions) { $this->cacheWithFileExtensions = $cacheWithFileExtensions; } /** * Get the cache with file extensions setting. * * @return bool Whether to cache with file extensions. */ public function getCacheWithFileExtensions() { return $this->cacheWithFileExtensions; } /** * Set a custom cachePathCallable. * * @param \Closure|null $cachePathCallable The custom cache path callable. It receives the same arguments as @see getCachePath */ public function setCachePathCallable(?Closure $cachePathCallable) { $this->cachePathCallable = $cachePathCallable; } /** * Gets the custom cachePathCallable. * * @return \Closure|null The custom cache path callable. It receives the same arguments as @see getCachePath */ public function getCachePathCallable() { return $this->cachePathCallable; } /** * Get cache path. * * @param string $path Image path. * @param array $params Image manipulation params. * * @return string Cache path. */ public function getCachePath($path, array $params = []) { $customCallable = $this->getCachePathCallable(); if (null !== $customCallable) { $boundCallable = Closure::bind($customCallable, $this, static::class); return $boundCallable($path, $params); } $sourcePath = $this->getSourcePath($path); if ($this->sourcePathPrefix) { $sourcePath = substr($sourcePath, strlen($this->sourcePathPrefix) + 1); } $params = $this->getAllParams($params); unset($params['s'], $params['p']); ksort($params); $cachedPath = md5($sourcePath.'?'.http_build_query($params)); if ($this->groupCacheInFolders) { $cachedPath = $sourcePath.'/'.$cachedPath; } if ($this->cachePathPrefix) { $cachedPath = $this->cachePathPrefix.'/'.$cachedPath; } if ($this->cacheWithFileExtensions) { $ext = (isset($params['fm']) ? $params['fm'] : pathinfo($path)['extension']); $ext = ('pjpg' === $ext) ? 'jpg' : $ext; $cachedPath .= '.'.$ext; } return $cachedPath; } /** * Check if a cache file exists. * * @param string $path Image path. * @param array $params Image manipulation params. * * @return bool Whether the cache file exists. */ public function cacheFileExists($path, array $params) { try { return $this->cache->fileExists( $this->getCachePath($path, $params) ); } catch (FilesystemV2Exception $exception) { return false; } } /** * Delete cached manipulations for an image. * * @param string $path Image path. * * @return bool Whether the delete succeeded. */ public function deleteCache($path) { if (!$this->groupCacheInFolders) { throw new InvalidArgumentException('Deleting cached image manipulations is not possible when grouping cache into folders is disabled.'); } try { $this->cache->deleteDirectory( dirname($this->getCachePath($path)) ); return true; } catch (FilesystemV2Exception $exception) { return false; } } /** * Set image manipulation API. * * @param ApiInterface $api Image manipulation API. * * @return void */ public function setApi(ApiInterface $api) { $this->api = $api; } /** * Get image manipulation API. * * @return ApiInterface Image manipulation API. */ public function getApi() { return $this->api; } /** * Set default image manipulations. * * @param array $defaults Default image manipulations. * * @return void */ public function setDefaults(array $defaults) { $this->defaults = $defaults; } /** * Get default image manipulations. * * @return array Default image manipulations. */ public function getDefaults() { return $this->defaults; } /** * Set preset image manipulations. * * @param array $presets Preset image manipulations. * * @return void */ public function setPresets(array $presets) { $this->presets = $presets; } /** * Get preset image manipulations. * * @return array Preset image manipulations. */ public function getPresets() { return $this->presets; } /** * Get all image manipulations params, including defaults and presets. * * @param array $params Image manipulation params. * * @return array All image manipulation params. */ public function getAllParams(array $params) { $all = $this->defaults; if (isset($params['p'])) { foreach (explode(',', $params['p']) as $preset) { if (isset($this->presets[$preset])) { $all = array_merge($all, $this->presets[$preset]); } } } return array_merge($all, $params); } /** * Set response factory. * * @param ResponseFactoryInterface|null $responseFactory Response factory. * * @return void */ public function setResponseFactory(ResponseFactoryInterface $responseFactory = null) { $this->responseFactory = $responseFactory; } /** * Get response factory. * * @return ResponseFactoryInterface|null Response factory. */ public function getResponseFactory() { return $this->responseFactory; } /** * Generate and return image response. * * @param string $path Image path. * @param array $params Image manipulation params. * * @return mixed Image response. * * @throws InvalidArgumentException */ public function getImageResponse($path, array $params) { if (is_null($this->responseFactory)) { throw new InvalidArgumentException('Unable to get image response, no response factory defined.'); } $path = $this->makeImage($path, $params); return $this->responseFactory->create($this->cache, $path); } /** * Generate and return Base64 encoded image. * * @param string $path Image path. * @param array $params Image manipulation params. * * @return string Base64 encoded image. * * @throws FilesystemException */ public function getImageAsBase64($path, array $params) { $path = $this->makeImage($path, $params); try { $source = $this->cache->read($path); return 'data:'.$this->cache->mimeType($path).';base64,'.base64_encode($source); } catch (FilesystemV2Exception $exception) { throw new FilesystemException('Could not read the image `'.$path.'`.'); } } /** * Generate and output image. * * @param string $path Image path. * @param array $params Image manipulation params. * * @throws InvalidArgumentException * * @return void */ public function outputImage($path, array $params) { $path = $this->makeImage($path, $params); try { header('Content-Type:'.$this->cache->mimeType($path)); header('Content-Length:'.$this->cache->fileSize($path)); header('Cache-Control:'.'max-age=31536000, public'); header('Expires:'.date_create('+1 years')->format('D, d M Y H:i:s').' GMT'); $stream = $this->cache->readStream($path); if (0 !== ftell($stream)) { rewind($stream); } fpassthru($stream); fclose($stream); } catch (FilesystemV2Exception $exception) { throw new FilesystemException('Could not read the image `'.$path.'`.'); } } /** * Generate manipulated image. * * @param string $path Image path. * @param array $params Image manipulation params. * * @return string Cache path. * * @throws FileNotFoundException * @throws FilesystemException */ public function makeImage($path, array $params) { $sourcePath = $this->getSourcePath($path); $cachedPath = $this->getCachePath($path, $params); if (true === $this->cacheFileExists($path, $params)) { return $cachedPath; } if (false === $this->sourceFileExists($path)) { throw new FileNotFoundException('Could not find the image `'.$sourcePath.'`.'); } try { $source = $this->source->read( $sourcePath ); } catch (FilesystemV2Exception $exception) { throw new FilesystemException('Could not read the image `'.$sourcePath.'`.'); } // We need to write the image to the local disk before // doing any manipulations. This is because EXIF data // can only be read from an actual file. $tmp = tempnam($this->tempDir, 'Glide'); if (false === file_put_contents($tmp, $source)) { throw new FilesystemException('Unable to write temp file for `'.$sourcePath.'`.'); } try { $this->cache->write( $cachedPath, $this->api->run($tmp, $this->getAllParams($params)) ); } catch (FilesystemV2Exception $exception) { throw new FilesystemException('Could not write the image `'.$cachedPath.'`.'); } finally { unlink($tmp); } return $cachedPath; } }