From 4e2ac20b3c473b0c8c53fee3f57786776863138f Mon Sep 17 00:00:00 2001 From: elf <360197197@qq.com> Date: Sat, 4 Feb 2023 22:40:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Admin/Model/PictureModel.class.php | 16 +- .../Base/Service/GameSourceService.class.php | 6 +- .../ObsClient.class.php} | 16 +- .../OssClient.class.php} | 28 +- Application/Base/Tool/Storage.class.php | 40 + Application/Base/Tool/StorageClient.class.php | 12 + Application/Home/Model/PictureModel.class.php | 11 +- .../Qrcode/Model/PictureModel.class.php | 11 +- Public/Home/images/FileController.class.php | 181 ---- Public/Qrcode/images/FileController.class.php | 181 ---- composer.json | 9 +- composer.lock | 778 ++++++++++++++++-- 12 files changed, 815 insertions(+), 474 deletions(-) rename Application/Base/{Service/ObsService.class.php => Tool/ObsClient.class.php} (89%) rename Application/Base/{Service/OssService.class.php => Tool/OssClient.class.php} (78%) create mode 100644 Application/Base/Tool/Storage.class.php create mode 100644 Application/Base/Tool/StorageClient.class.php delete mode 100644 Public/Home/images/FileController.class.php delete mode 100644 Public/Qrcode/images/FileController.class.php diff --git a/Application/Admin/Model/PictureModel.class.php b/Application/Admin/Model/PictureModel.class.php index 69e0dd3d0..fbcc33093 100644 --- a/Application/Admin/Model/PictureModel.class.php +++ b/Application/Admin/Model/PictureModel.class.php @@ -8,13 +8,10 @@ // +---------------------------------------------------------------------- namespace Admin\Model; -use Admin\Controller\CosController; -use Admin\Controller\OssController; -use Admin\Controller\BosController; -use Admin\Event\QiNiuEvent; + use Think\Model; use Think\Upload; -use Base\Service\OssService; +use Base\Tool\Storage; /** * 图片模型 @@ -70,15 +67,14 @@ class PictureModel extends Model{ $this->where(['id'=>$value['id']])->save($data); } } - if (C('OSS_STATUS')) { + if (C('STORAGE_TYPE')) { $path = explode('/', $value['path']); $saveFileName = 'icon/' . $path[4]; $localFilePath = '.' . $value['path']; - $ossService = new OssService(); - $result = $ossService->upload($localFilePath, $saveFileName); + $result = Storage::upload($localFilePath, $saveFileName); if ($result['status']) { - $dataUrl['oss_url'] = $ossService->getUrl($saveFileName); - $coo = $this->where(['id' => $value['id']])->save($dataUrl); + $dataUrl['oss_url'] = $result['data']['url']; + $this->where(['id' => $value['id']])->save($dataUrl); } else { $this->error = $result['message']; return false; diff --git a/Application/Base/Service/GameSourceService.class.php b/Application/Base/Service/GameSourceService.class.php index 17971be6b..a57459633 100644 --- a/Application/Base/Service/GameSourceService.class.php +++ b/Application/Base/Service/GameSourceService.class.php @@ -1,10 +1,9 @@ upload($localFilePath, $distFilePath); + $result = Storage::upload($localFilePath, $distFilePath); if ($isDeleteLocal && file_exists($localFilePath)) { @unlink($localFilePath); } diff --git a/Application/Base/Service/ObsService.class.php b/Application/Base/Tool/ObsClient.class.php similarity index 89% rename from Application/Base/Service/ObsService.class.php rename to Application/Base/Tool/ObsClient.class.php index a570f5a29..e27f16769 100644 --- a/Application/Base/Service/ObsService.class.php +++ b/Application/Base/Tool/ObsClient.class.php @@ -1,12 +1,13 @@ secretKey = C('OBS_SECRET_KEY'); $this->endpoint = C('OBS_ENDPOINT'); $this->domain = C('OBS_DOMAIN'); - $this->isCName = C('OBS_IS_CNAME'); $this->bucket = C('OBS_BUCKET'); - $this->client = new ObsClient($this->accessKey, $this->secretKey, $this->endpoint); + $this->client = new BaseObsClient($this->accessKey, $this->secretKey, $this->endpoint); } public function upload($localFilePath, $saveFileName) @@ -46,7 +46,7 @@ class OssService 'url' => $this->getUrl($saveFileName) ] ]; - } catch (Obs\Common\ObsException $e) { + } catch (\Obs\ObsException $e) { return [ 'status' => false, 'message' => $e->getExceptionMessage() @@ -89,7 +89,7 @@ class OssService ]); } - public function deleteObject($deleteFile) + public function delete($deleteFile) { $resp = $this->client->deleteObject([ 'Bucket' => $this->bucket, diff --git a/Application/Base/Service/OssService.class.php b/Application/Base/Tool/OssClient.class.php similarity index 78% rename from Application/Base/Service/OssService.class.php rename to Application/Base/Tool/OssClient.class.php index 49f52c66e..adc9f4793 100644 --- a/Application/Base/Service/OssService.class.php +++ b/Application/Base/Tool/OssClient.class.php @@ -1,14 +1,14 @@ domain = C('OSS_DOMAIN'); $this->isCName = C('OSS_IS_CNAME'); $this->bucket = C('OSS_BUCKET'); - $this->client = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint, $this->isCName); + $this->client = new BaseOssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint, $this->isCName); } public function upload($localFilePath, $saveFileName) @@ -65,18 +65,18 @@ class OssService { $uploadPosition = 0; $isCheckMd5 = true; foreach ($pieces as $i => $piece) { - $fromPos = $uploadPosition + (integer) $piece[OssClient::OSS_SEEK_TO]; - $toPos = (integer) $piece[OssClient::OSS_LENGTH] + $fromPos - 1; + $fromPos = $uploadPosition + (integer) $piece[BaseOssClient::OSS_SEEK_TO]; + $toPos = (integer) $piece[BaseOssClient::OSS_LENGTH] + $fromPos - 1; $upOptions = [ - OssClient::OSS_FILE_UPLOAD => $uploadFile, - OssClient::OSS_PART_NUM => ($i + 1), - OssClient::OSS_SEEK_TO => $fromPos, - OssClient::OSS_LENGTH => $toPos - $fromPos + 1, - OssClient::OSS_CHECK_MD5 => $isCheckMd5, + BaseOssClient::OSS_FILE_UPLOAD => $uploadFile, + BaseOssClient::OSS_PART_NUM => ($i + 1), + BaseOssClient::OSS_SEEK_TO => $fromPos, + BaseOssClient::OSS_LENGTH => $toPos - $fromPos + 1, + BaseOssClient::OSS_CHECK_MD5 => $isCheckMd5, ]; if ($isCheckMd5) { $contentMd5 = OssUtil::getMd5SumForFile($uploadFile, $fromPos, $toPos); - $upOptions[OssClient::OSS_CONTENT_MD5] = $contentMd5; + $upOptions[BaseOssClient::OSS_CONTENT_MD5] = $contentMd5; } // 2. 将每一分片上传到OSS $responseUploadPart[] = $this->client->uploadPart($this->bucket, $saveFileName, $uploadId, $upOptions); @@ -98,7 +98,7 @@ class OssService { /** *删除文件 */ - public function deleteObject($deleteFile) + public function delete($deleteFile) { $this->client->deleteObject($this->bucket, $deleteFile); } diff --git a/Application/Base/Tool/Storage.class.php b/Application/Base/Tool/Storage.class.php new file mode 100644 index 000000000..98ea4b7c6 --- /dev/null +++ b/Application/Base/Tool/Storage.class.php @@ -0,0 +1,40 @@ +upload($localFilePath, $saveFileName); + } + + public static function delete($deleteFile) + { + return self::getClient()->delete($deleteFile); + } + + public static function getUrl($saveFileName) + { + return self::getClient()->getUrl($saveFileName); + } +} \ No newline at end of file diff --git a/Application/Base/Tool/StorageClient.class.php b/Application/Base/Tool/StorageClient.class.php new file mode 100644 index 000000000..6b312ff83 --- /dev/null +++ b/Application/Base/Tool/StorageClient.class.php @@ -0,0 +1,12 @@ +upload($localFilePath, $saveFileName); + $result = Storage::upload($localFilePath, $saveFileName); if ($result['status']) { - $dataUrl['oss_url'] = $ossService->getUrl($saveFileName); - $coo = $this->where(['id' => $value['id']])->save($dataUrl); + $dataUrl['oss_url'] = $result['data']['url']; + $this->where(['id' => $value['id']])->save($dataUrl); } else { $this->error = $result['message']; return false; diff --git a/Application/Qrcode/Model/PictureModel.class.php b/Application/Qrcode/Model/PictureModel.class.php index f310fe8f7..109f03722 100644 --- a/Application/Qrcode/Model/PictureModel.class.php +++ b/Application/Qrcode/Model/PictureModel.class.php @@ -10,7 +10,7 @@ namespace Qrcode\Model; use Think\Model; use Think\Upload; -use Base\Service\OssService; +use Base\Tool\Storage; /** * 图片模型 @@ -56,15 +56,14 @@ class PictureModel extends Model{ unset($info[$key]); } } - if (C('OSS_STATUS')) { + if (C('STORAGE_TYPE')) { $path = explode('/', $value['path']); $saveFileName = 'icon/' . $path[4]; $localFilePath = '.' . $value['path']; - $ossService = new OssService(); - $ossService->upload($localFilePath, $saveFileName); + $result = Storage::upload($localFilePath, $saveFileName); if ($result['status']) { - $dataUrl['oss_url'] = $ossService->getUrl($saveFileName); - $coo = $this->where(['id' => $value['id']])->save($dataUrl); + $dataUrl['oss_url'] = $result['data']['url']; + $this->where(['id' => $value['id']])->save($dataUrl); } else { $this->error = $result['message']; return false; diff --git a/Public/Home/images/FileController.class.php b/Public/Home/images/FileController.class.php deleted file mode 100644 index 719b32945..000000000 --- a/Public/Home/images/FileController.class.php +++ /dev/null @@ -1,181 +0,0 @@ - -// +---------------------------------------------------------------------- -namespace Admin\Controller; -use OSS\OssClient; -use Think\ShardUpload; -use Base\Service\OssService; -/** - * 文件控制器 - * 主要用于下载模型的文件上传和下载 - */ -class FileController extends AdminController { - - /* 文件上传 */ - public function upload(){ - $return = array('status' => 1, 'info' => '上传成功', 'data' => ''); - /* 调用文件上传组件上传文件 */ - $File = D('File'); - $file_driver = C('DOWNLOAD_UPLOAD_DRIVER'); - $info = $File->upload( - $_FILES, - C('DOWNLOAD_UPLOAD'), - C('DOWNLOAD_UPLOAD_DRIVER'), - C("UPLOAD_{$file_driver}_CONFIG") - ); - - /* 记录附件信息 */ - if($info){ - $return['data'] = think_encrypt(json_encode($info['download'])); - $return['info'] = $info['download']['name']; - } else { - $return['status'] = 0; - $return['info'] = $File->getError(); - } - - /* 返回JSON数据 */ - $this->ajaxReturn($return); - } - - /* 文件分片上传 */ - public function shard_upload(){ - //关闭缓存 - header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); - header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); - header("Cache-Control: no-store, no-cache, must-revalidate"); - header("Cache-Control: post-check=0, pre-check=0", false); - header("Pragma: no-cache"); - $uploader = new ShardUpload(); - if(I('get.typee') == 1){//指定上传目录 - $uploader->set('path','./Uploads/Ios/description'); - }elseif(I('get.type') == "1"){ - - $uploader->set('path','./Uploads/Material'); - } - //var_dump($_POST); - //用于断点续传,验证指定分块是否已经存在,避免重复上传 - if(isset($_POST['status'])){ - if($_POST['status'] == 'chunkCheck'){ - $target = C('DOWNLOAD_UPLOAD.rootPath')."/".$_POST['name'].'/'.$_POST['chunkIndex']; - if(file_exists($target) && filesize($target) == $_POST['size']){ - die('{"ifExist":1}'); - } - die('{"ifExist":0}'); - - }elseif($_POST['status'] == 'md5Check'){ - - }elseif($_POST['status'] == 'chunksMerge'){ - if($result = $uploader->chunksMerge($_POST['name'], $_POST['chunks'], $_POST['ext'])){ - //todo 把md5签名存入持久层,供未来的秒传验证 - echo $result; - exit(); - } - } - } - if(($path = $uploader->upload('file', $_POST)) !== false){ - if(I('get.type') == "1"){ - $file_info = json_decode($path, true); - $url = $this->uploadOss("Material/",$file_info['name'],$file_info['path'].'/'.$file_info['name']); - $file_info['path'] = "http://".C('CND_ADDRESS')."/Material"; - $path = json_encode($file_info); - } - die($path); - } - - } - /* 苹果渠道包文件分片上传 */ - public function ios_shard_upload(){ - //关闭缓存 - header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); - header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); - header("Cache-Control: no-store, no-cache, must-revalidate"); - header("Cache-Control: post-check=0, pre-check=0", false); - header("Pragma: no-cache"); - $uploader = new ShardUpload(); - //用于断点续传,验证指定分块是否已经存在,避免重复上传 - if(isset($_POST['status'])){ - if($_POST['status'] == 'chunkCheck'){ - $target = C('DOWNLOAD_UPLOAD.rootPath')."/".$_POST['name'].'/'.$_POST['chunkIndex']; - if(file_exists($target) && filesize($target) == $_POST['size']){ - die('{"ifExist":1}'); - } - die('{"ifExist":0}'); - - }elseif($_POST['status'] == 'md5Check'){ - - }elseif($_POST['status'] == 'chunksMerge'){ - if($result = $uploader->chunksMerge($_POST['name'], $_POST['chunks'], $_POST['ext'])){ - //todo 把md5签名存入持久层,供未来的秒传验证 - echo $result; - exit(); - } - } - } - if(($path = $uploader->iosUpload('file', $_POST)) !== false){ - die($path); - } - - } - /* 下载文件 */ - public function download($id = null){ - if(empty($id) || !is_numeric($id)){ - $this->error('参数错误!'); - } - - $logic = D('Download', 'Logic'); - if(!$logic->download($id)){ - $this->error($logic->getError()); - } - - } - - /** - * 上传图片 - * @author huajie - */ - public function uploadPicture(){ - //TODO: 用户登录检测 - - /* 返回标准数据 */ - $return = array('status' => 1, 'info' => '上传成功', 'data' => ''); - - /* 调用文件上传组件上传文件 */ - $Picture = D('Picture'); - $pic_driver = C('PICTURE_UPLOAD_DRIVER'); - $info = $Picture->upload( - $_FILES, - C('PICTURE_UPLOAD'), - C('PICTURE_UPLOAD_DRIVER'), - C("UPLOAD_{$pic_driver}_CONFIG") - ); //TODO:上传到远程服务器 - - /* 记录图片信息 */ - if($info){ - $return['status'] = 1; - $return = array_merge($info['download'], $return); - } else { - $return['status'] = 0; - $return['info'] = $Picture->getError(); - } - ob_clean(); - /* 返回JSON数据 */ - $this->ajaxReturn($return); - } - - - /** - *上传到OSS - */ - public function uploadOss($ossPath, $fileName,$filePath) - { - $ossFilePath = $ossPath . $fileName; - $ossService = new OssService(); - $ossService->upload($filePath, $ossFilePath); - return $ossService->getUrl($ossFilePath); - } -} diff --git a/Public/Qrcode/images/FileController.class.php b/Public/Qrcode/images/FileController.class.php deleted file mode 100644 index 719b32945..000000000 --- a/Public/Qrcode/images/FileController.class.php +++ /dev/null @@ -1,181 +0,0 @@ - -// +---------------------------------------------------------------------- -namespace Admin\Controller; -use OSS\OssClient; -use Think\ShardUpload; -use Base\Service\OssService; -/** - * 文件控制器 - * 主要用于下载模型的文件上传和下载 - */ -class FileController extends AdminController { - - /* 文件上传 */ - public function upload(){ - $return = array('status' => 1, 'info' => '上传成功', 'data' => ''); - /* 调用文件上传组件上传文件 */ - $File = D('File'); - $file_driver = C('DOWNLOAD_UPLOAD_DRIVER'); - $info = $File->upload( - $_FILES, - C('DOWNLOAD_UPLOAD'), - C('DOWNLOAD_UPLOAD_DRIVER'), - C("UPLOAD_{$file_driver}_CONFIG") - ); - - /* 记录附件信息 */ - if($info){ - $return['data'] = think_encrypt(json_encode($info['download'])); - $return['info'] = $info['download']['name']; - } else { - $return['status'] = 0; - $return['info'] = $File->getError(); - } - - /* 返回JSON数据 */ - $this->ajaxReturn($return); - } - - /* 文件分片上传 */ - public function shard_upload(){ - //关闭缓存 - header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); - header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); - header("Cache-Control: no-store, no-cache, must-revalidate"); - header("Cache-Control: post-check=0, pre-check=0", false); - header("Pragma: no-cache"); - $uploader = new ShardUpload(); - if(I('get.typee') == 1){//指定上传目录 - $uploader->set('path','./Uploads/Ios/description'); - }elseif(I('get.type') == "1"){ - - $uploader->set('path','./Uploads/Material'); - } - //var_dump($_POST); - //用于断点续传,验证指定分块是否已经存在,避免重复上传 - if(isset($_POST['status'])){ - if($_POST['status'] == 'chunkCheck'){ - $target = C('DOWNLOAD_UPLOAD.rootPath')."/".$_POST['name'].'/'.$_POST['chunkIndex']; - if(file_exists($target) && filesize($target) == $_POST['size']){ - die('{"ifExist":1}'); - } - die('{"ifExist":0}'); - - }elseif($_POST['status'] == 'md5Check'){ - - }elseif($_POST['status'] == 'chunksMerge'){ - if($result = $uploader->chunksMerge($_POST['name'], $_POST['chunks'], $_POST['ext'])){ - //todo 把md5签名存入持久层,供未来的秒传验证 - echo $result; - exit(); - } - } - } - if(($path = $uploader->upload('file', $_POST)) !== false){ - if(I('get.type') == "1"){ - $file_info = json_decode($path, true); - $url = $this->uploadOss("Material/",$file_info['name'],$file_info['path'].'/'.$file_info['name']); - $file_info['path'] = "http://".C('CND_ADDRESS')."/Material"; - $path = json_encode($file_info); - } - die($path); - } - - } - /* 苹果渠道包文件分片上传 */ - public function ios_shard_upload(){ - //关闭缓存 - header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); - header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); - header("Cache-Control: no-store, no-cache, must-revalidate"); - header("Cache-Control: post-check=0, pre-check=0", false); - header("Pragma: no-cache"); - $uploader = new ShardUpload(); - //用于断点续传,验证指定分块是否已经存在,避免重复上传 - if(isset($_POST['status'])){ - if($_POST['status'] == 'chunkCheck'){ - $target = C('DOWNLOAD_UPLOAD.rootPath')."/".$_POST['name'].'/'.$_POST['chunkIndex']; - if(file_exists($target) && filesize($target) == $_POST['size']){ - die('{"ifExist":1}'); - } - die('{"ifExist":0}'); - - }elseif($_POST['status'] == 'md5Check'){ - - }elseif($_POST['status'] == 'chunksMerge'){ - if($result = $uploader->chunksMerge($_POST['name'], $_POST['chunks'], $_POST['ext'])){ - //todo 把md5签名存入持久层,供未来的秒传验证 - echo $result; - exit(); - } - } - } - if(($path = $uploader->iosUpload('file', $_POST)) !== false){ - die($path); - } - - } - /* 下载文件 */ - public function download($id = null){ - if(empty($id) || !is_numeric($id)){ - $this->error('参数错误!'); - } - - $logic = D('Download', 'Logic'); - if(!$logic->download($id)){ - $this->error($logic->getError()); - } - - } - - /** - * 上传图片 - * @author huajie - */ - public function uploadPicture(){ - //TODO: 用户登录检测 - - /* 返回标准数据 */ - $return = array('status' => 1, 'info' => '上传成功', 'data' => ''); - - /* 调用文件上传组件上传文件 */ - $Picture = D('Picture'); - $pic_driver = C('PICTURE_UPLOAD_DRIVER'); - $info = $Picture->upload( - $_FILES, - C('PICTURE_UPLOAD'), - C('PICTURE_UPLOAD_DRIVER'), - C("UPLOAD_{$pic_driver}_CONFIG") - ); //TODO:上传到远程服务器 - - /* 记录图片信息 */ - if($info){ - $return['status'] = 1; - $return = array_merge($info['download'], $return); - } else { - $return['status'] = 0; - $return['info'] = $Picture->getError(); - } - ob_clean(); - /* 返回JSON数据 */ - $this->ajaxReturn($return); - } - - - /** - *上传到OSS - */ - public function uploadOss($ossPath, $fileName,$filePath) - { - $ossFilePath = $ossPath . $fileName; - $ossService = new OssService(); - $ossService->upload($filePath, $ossFilePath); - return $ossService->getUrl($ossFilePath); - } -} diff --git a/composer.json b/composer.json index d2963c381..aef54f2a3 100644 --- a/composer.json +++ b/composer.json @@ -1,12 +1,7 @@ { "require": { "rodneyrehm/plist": "^2.0", - "guzzlehttp/guzzle": "~6.0" - }, - "repositories": { - "packagist": { - "type": "composer", - "url": "https://packagist.phpcomposer.com" - } + "guzzlehttp/guzzle": "~6.0", + "obs/esdk-obs-php": "3.22.6" } } diff --git a/composer.lock b/composer.lock index d2d4b81a2..92ab4e230 100644 --- a/composer.lock +++ b/composer.lock @@ -4,27 +4,34 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d123a4209d62a7caa5b2f90e005695d5", + "content-hash": "fb38b16a9eade4efc8e63b8702e94925", "packages": [ { "name": "guzzlehttp/guzzle", - "version": "6.5.2", + "version": "6.5.8", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "43ece0e75098b7ecd8d13918293029e555a50f82" + "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82", - "reference": "43ece0e75098b7ecd8d13918293029e555a50f82", - "shasum": "" + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a52f0440530b54fa079ce76e8c5d196a42cad981", + "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5" + "guzzlehttp/psr7": "^1.9", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.17" }, "require-dev": { "ext-curl": "*", @@ -32,7 +39,6 @@ "psr/log": "^1.1" }, "suggest": { - "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, "type": "library", @@ -42,22 +48,52 @@ } }, "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle is a PHP HTTP client library", @@ -71,72 +107,135 @@ "rest", "web service" ], - "time": "2019-12-23T11:57:10+00:00" + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/6.5.8" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2022-06-20T22:16:07+00:00" }, { "name": "guzzlehttp/promises", - "version": "v1.3.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + "reference": "b94b2807d85443f9719887892882d0329d1e2598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "shasum": "" + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { - "php": ">=5.5.0" + "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "^4.0" + "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.5-dev" } }, "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle promises library", "keywords": [ "promise" ], - "time": "2016-12-20T10:07:11+00:00" + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2022-08-28T14:55:35+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.6.1", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a", - "shasum": "" + "url": "https://api.github.com/repos/guzzle/psr7/zipball/e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", + "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=5.4.0", @@ -148,37 +247,58 @@ }, "require-dev": { "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" }, "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.9-dev" } }, "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, { "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", "homepage": "https://github.com/Tobion" } ], @@ -193,7 +313,179 @@ "uri", "url" ], - "time": "2019-07-01T23:21:34+00:00" + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.9.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2022-06-20T21:43:03+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50", + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpspec/prophecy": "^1.15", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5.14", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.8.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2022-07-24T11:55:47+00:00" + }, + { + "name": "obs/esdk-obs-php", + "version": "3.22.6", + "source": { + "type": "git", + "url": "https://github.com/huaweicloud/huaweicloud-sdk-php-obs.git", + "reference": "a56a37aa72e35aea1791588889cfe3c57e73cf5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/huaweicloud/huaweicloud-sdk-php-obs/zipball/a56a37aa72e35aea1791588889cfe3c57e73cf5e", + "reference": "a56a37aa72e35aea1791588889cfe3c57e73cf5e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "guzzlehttp/guzzle": "^6.3.0 || ^7.0", + "guzzlehttp/psr7": "^1.4.2 || ^2.0", + "monolog/monolog": "^1.23.0 || ^2.0", + "php": ">=5.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Obs\\": "Obs/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "OBS PHP SDK", + "keywords": [ + "OBS", + "php" + ], + "support": { + "source": "https://github.com/huaweicloud/huaweicloud-sdk-php-obs/tree/v3.22.6" + }, + "time": "2022-06-18T08:58:21+00:00" }, { "name": "psr/http-message", @@ -207,7 +499,13 @@ "type": "zip", "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=5.3.0" @@ -243,8 +541,67 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, "time": "2016-08-06T14:39:51+00:00" }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, { "name": "ralouphie/getallheaders", "version": "3.0.3", @@ -257,7 +614,13 @@ "type": "zip", "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=5.6" @@ -283,29 +646,45 @@ } ], "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, "time": "2019-03-08T08:55:37+00:00" }, { "name": "rodneyrehm/plist", - "version": "v2.0.1", + "version": "v2.0.3", "source": { "type": "git", - "url": "https://github.com/rodneyrehm/CFPropertyList.git", - "reference": "2ea0483806c989eb0518a767fa29a111bb29cb67" + "url": "https://github.com/TECLIB/CFPropertyList.git", + "reference": "eb1f97cc44427359be9f09e617d68eef57707617" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rodneyrehm/CFPropertyList/zipball/2ea0483806c989eb0518a767fa29a111bb29cb67", - "reference": "2ea0483806c989eb0518a767fa29a111bb29cb67", - "shasum": "" + "url": "https://api.github.com/repos/TECLIB/CFPropertyList/zipball/eb1f97cc44427359be9f09e617d68eef57707617", + "reference": "eb1f97cc44427359be9f09e617d68eef57707617", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { - "php": ">=5.3" + "ext-dom": "*", + "ext-libxml": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0", + "squizlabs/php_codesniffer": "^3.2" }, "type": "library", "autoload": { - "psr-0": { - "CFPropertyList": "classes/" + "psr-4": { + "CFPropertyList\\": "src/CFPropertyList/" } }, "notification-url": "https://packagist.org/downloads/", @@ -315,19 +694,303 @@ "authors": [ { "name": "Christian Kruse", - "email": "cjk@wwwtech.de" + "email": "cjk@wwwtech.de", + "role": "developer" }, { "name": "Rodney Rehm", - "email": "mail+github@rodneyrehm.de" + "email": "mail+github@rodneyrehm.de", + "role": "developer" + }, + { + "name": "Thierry Bugier", + "email": "tbugier@teclib.com", + "role": "developer" } ], "description": "Library for reading and writing Apple's CFPropertyList (plist) files in XML as well as binary format.", - "homepage": "https://github.com/rodneyrehm/CFPropertyList", + "homepage": "https://github.com/TECLIB/CFPropertyList", "keywords": [ - "plist" + "CFPropertyList", + "Core Foundation", + "apple", + "binary", + "plist", + "xml" + ], + "support": { + "docs": "http://teclib.github.io/CFPropertyList/howtos/", + "email": "contact@teclib.com", + "issues": "https://github.com/TECLIB/CFPropertyList/issues", + "rss": "https://teclib.github.io/CFPropertyList/feed.xml", + "source": "https://github.com/TECLIB/CFPropertyList" + }, + "time": "2021-12-01T18:24:28+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2015-01-28T23:18:19+00:00" + "time": "2022-11-03T14:55:06+00:00" } ], "packages-dev": [], @@ -337,5 +1000,6 @@ "prefer-stable": false, "prefer-lowest": false, "platform": [], - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "2.3.0" }