Server : nginx/1.20.1 System : Linux iZ2ze9ojcl78uluczwag69Z 4.18.0-240.22.1.el8_3.x86_64 #1 SMP Thu Apr 8 19:01:30 UTC 2021 x86_64 User : www ( 1000) PHP Version : 7.3.28 Disable Function : passthru,exec,system,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv Directory : /www/wwwroot/0531yanglao.com/vendor/topthink/framework/src/think/filesystem/ |
<?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- // | Copyright (c) 2006~2021 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: yunwuxin <448901948@qq.com> // +---------------------------------------------------------------------- declare (strict_types = 1); namespace think\filesystem; use League\Flysystem\AdapterInterface; use League\Flysystem\Adapter\AbstractAdapter; use League\Flysystem\Cached\CachedAdapter; use League\Flysystem\Cached\Storage\Memory as MemoryStore; use League\Flysystem\Filesystem; use RuntimeException; use think\Cache; use think\File; /** * Class Driver * @package think\filesystem * @mixin Filesystem */ abstract class Driver { /** @var Cache */ protected $cache; /** @var Filesystem */ protected $filesystem; /** * 配置参数 * @var array */ protected $config = []; public function __construct(Cache $cache, array $config) { $this->cache = $cache; $this->config = array_merge($this->config, $config); $adapter = $this->createAdapter(); $this->filesystem = $this->createFilesystem($adapter); } protected function createCacheStore($config) { if (true === $config) { return new MemoryStore; } return new CacheStore( $this->cache->store($config['store']), $config['prefix'] ?? 'flysystem', $config['expire'] ?? null ); } abstract protected function createAdapter(): AdapterInterface; protected function createFilesystem(AdapterInterface $adapter): Filesystem { if (!empty($this->config['cache'])) { $adapter = new CachedAdapter($adapter, $this->createCacheStore($this->config['cache'])); } $config = array_intersect_key($this->config, array_flip(['visibility', 'disable_asserts', 'url'])); return new Filesystem($adapter, count($config) > 0 ? $config : null); } /** * 获取文件完整路径 * @param string $path * @return string */ public function path(string $path): string { $adapter = $this->filesystem->getAdapter(); if ($adapter instanceof AbstractAdapter) { return $adapter->applyPathPrefix($path); } return $path; } protected function concatPathToUrl($url, $path) { return rtrim($url, '/') . '/' . ltrim($path, '/'); } public function url(string $path): string { throw new RuntimeException('This driver does not support retrieving URLs.'); } /** * 保存文件 * @param string $path 路径 * @param File $file 文件 * @param null|string|\Closure $rule 文件名规则 * @param array $options 参数 * @return bool|string */ public function putFile(string $path, File $file, $rule = null, array $options = []) { return $this->putFileAs($path, $file, $file->hashName($rule), $options); } /** * 指定文件名保存文件 * @param string $path 路径 * @param File $file 文件 * @param string $name 文件名 * @param array $options 参数 * @return bool|string */ public function putFileAs(string $path, File $file, string $name, array $options = []) { $stream = fopen($file->getRealPath(), 'r'); $path = trim($path . '/' . $name, '/'); $result = $this->putStream($path, $stream, $options); if (is_resource($stream)) { fclose($stream); } return $result ? $path : false; } public function __call($method, $parameters) { return $this->filesystem->$method(...$parameters); } }