master
elf 2 years ago
parent 5aab375f7c
commit 4e2ac20b3c

@ -8,13 +8,10 @@
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
namespace Admin\Model; namespace Admin\Model;
use Admin\Controller\CosController;
use Admin\Controller\OssController;
use Admin\Controller\BosController;
use Admin\Event\QiNiuEvent;
use Think\Model; use Think\Model;
use Think\Upload; 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); $this->where(['id'=>$value['id']])->save($data);
} }
} }
if (C('OSS_STATUS')) { if (C('STORAGE_TYPE')) {
$path = explode('/', $value['path']); $path = explode('/', $value['path']);
$saveFileName = 'icon/' . $path[4]; $saveFileName = 'icon/' . $path[4];
$localFilePath = '.' . $value['path']; $localFilePath = '.' . $value['path'];
$ossService = new OssService(); $result = Storage::upload($localFilePath, $saveFileName);
$result = $ossService->upload($localFilePath, $saveFileName);
if ($result['status']) { if ($result['status']) {
$dataUrl['oss_url'] = $ossService->getUrl($saveFileName); $dataUrl['oss_url'] = $result['data']['url'];
$coo = $this->where(['id' => $value['id']])->save($dataUrl); $this->where(['id' => $value['id']])->save($dataUrl);
} else { } else {
$this->error = $result['message']; $this->error = $result['message'];
return false; return false;

@ -1,10 +1,9 @@
<?php <?php
namespace Base\Service; namespace Base\Service;
use Base\Model\PromoteModel;
use Base\Model\ApplyModel;
use Base\Tool\Base62; use Base\Tool\Base62;
use Base\Tool\PlistDemo; use Base\Tool\PlistDemo;
use Base\Tool\Storage;
use GuzzleHttp\Client; use GuzzleHttp\Client;
class GameSourceService { class GameSourceService {
@ -383,8 +382,7 @@ class GameSourceService {
public function uploadPackageOnce($localFilePath, $distFilePath, $isDeleteLocal = false) public function uploadPackageOnce($localFilePath, $distFilePath, $isDeleteLocal = false)
{ {
$ossService = new OssService(); $result = Storage::upload($localFilePath, $distFilePath);
$result = $ossService->upload($localFilePath, $distFilePath);
if ($isDeleteLocal && file_exists($localFilePath)) { if ($isDeleteLocal && file_exists($localFilePath)) {
@unlink($localFilePath); @unlink($localFilePath);
} }

@ -1,12 +1,13 @@
<?php <?php
namespace Base\Service; namespace Base\Tool;
use Obs\ObsClient; use Base\Tool\StorageClient;
use Obs\ObsClient as BaseObsClient;
/** /**
* 目前仅支持阿里云OSS * 华为云OBS
*/ */
class OssService class ObsClient implements StorageClient
{ {
const MAX_PART_SIZE = 5368709120; const MAX_PART_SIZE = 5368709120;
const MID_PART_SIZE = 10485760; const MID_PART_SIZE = 10485760;
@ -25,9 +26,8 @@ class OssService
$this->secretKey = C('OBS_SECRET_KEY'); $this->secretKey = C('OBS_SECRET_KEY');
$this->endpoint = C('OBS_ENDPOINT'); $this->endpoint = C('OBS_ENDPOINT');
$this->domain = C('OBS_DOMAIN'); $this->domain = C('OBS_DOMAIN');
$this->isCName = C('OBS_IS_CNAME');
$this->bucket = C('OBS_BUCKET'); $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) public function upload($localFilePath, $saveFileName)
@ -46,7 +46,7 @@ class OssService
'url' => $this->getUrl($saveFileName) 'url' => $this->getUrl($saveFileName)
] ]
]; ];
} catch (Obs\Common\ObsException $e) { } catch (\Obs\ObsException $e) {
return [ return [
'status' => false, 'status' => false,
'message' => $e->getExceptionMessage() 'message' => $e->getExceptionMessage()
@ -89,7 +89,7 @@ class OssService
]); ]);
} }
public function deleteObject($deleteFile) public function delete($deleteFile)
{ {
$resp = $this->client->deleteObject([ $resp = $this->client->deleteObject([
'Bucket' => $this->bucket, 'Bucket' => $this->bucket,

@ -1,14 +1,14 @@
<?php <?php
namespace Base\Service; namespace Base\Tool;
use OSS\Core\OssUtil; use OSS\Core\OssUtil;
use OSS\OssClient; use OSS\OssClient as BaseOssClient;
use OSS\Core\OSsException; use OSS\Core\OSsException;
/** /**
* 目前仅支持阿里云OSS * 阿里云OSS
*/ */
class OssService { class OssClient implements StorageClient {
private $accessKeyId = ''; private $accessKeyId = '';
private $accessKeySecret = ''; private $accessKeySecret = '';
@ -28,7 +28,7 @@ class OssService {
$this->domain = C('OSS_DOMAIN'); $this->domain = C('OSS_DOMAIN');
$this->isCName = C('OSS_IS_CNAME'); $this->isCName = C('OSS_IS_CNAME');
$this->bucket = C('OSS_BUCKET'); $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) public function upload($localFilePath, $saveFileName)
@ -65,18 +65,18 @@ class OssService {
$uploadPosition = 0; $uploadPosition = 0;
$isCheckMd5 = true; $isCheckMd5 = true;
foreach ($pieces as $i => $piece) { foreach ($pieces as $i => $piece) {
$fromPos = $uploadPosition + (integer) $piece[OssClient::OSS_SEEK_TO]; $fromPos = $uploadPosition + (integer) $piece[BaseOssClient::OSS_SEEK_TO];
$toPos = (integer) $piece[OssClient::OSS_LENGTH] + $fromPos - 1; $toPos = (integer) $piece[BaseOssClient::OSS_LENGTH] + $fromPos - 1;
$upOptions = [ $upOptions = [
OssClient::OSS_FILE_UPLOAD => $uploadFile, BaseOssClient::OSS_FILE_UPLOAD => $uploadFile,
OssClient::OSS_PART_NUM => ($i + 1), BaseOssClient::OSS_PART_NUM => ($i + 1),
OssClient::OSS_SEEK_TO => $fromPos, BaseOssClient::OSS_SEEK_TO => $fromPos,
OssClient::OSS_LENGTH => $toPos - $fromPos + 1, BaseOssClient::OSS_LENGTH => $toPos - $fromPos + 1,
OssClient::OSS_CHECK_MD5 => $isCheckMd5, BaseOssClient::OSS_CHECK_MD5 => $isCheckMd5,
]; ];
if ($isCheckMd5) { if ($isCheckMd5) {
$contentMd5 = OssUtil::getMd5SumForFile($uploadFile, $fromPos, $toPos); $contentMd5 = OssUtil::getMd5SumForFile($uploadFile, $fromPos, $toPos);
$upOptions[OssClient::OSS_CONTENT_MD5] = $contentMd5; $upOptions[BaseOssClient::OSS_CONTENT_MD5] = $contentMd5;
} }
// 2. 将每一分片上传到OSS // 2. 将每一分片上传到OSS
$responseUploadPart[] = $this->client->uploadPart($this->bucket, $saveFileName, $uploadId, $upOptions); $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); $this->client->deleteObject($this->bucket, $deleteFile);
} }

@ -0,0 +1,40 @@
<?php
namespace Base\Tool;
use Exception;
class Storage {
/**
* @var StorageClient
*/
private static $client;
private static function getClient(): StorageClient {
if (empty(self::$client)) {
if (C('STORAGE_TYPE') == 'oss') {
self::$client = new OssClient();
} elseif (C('STORAGE_TYPE') == 'obs') {
self::$client = new ObsClient();
} else {
throw new Exception("Storage type undefined!");
}
}
return self::$client;
}
public static function upload($localFilePath, $saveFileName) {
return self::getClient()->upload($localFilePath, $saveFileName);
}
public static function delete($deleteFile)
{
return self::getClient()->delete($deleteFile);
}
public static function getUrl($saveFileName)
{
return self::getClient()->getUrl($saveFileName);
}
}

@ -0,0 +1,12 @@
<?php
namespace Base\Tool;
interface StorageClient {
public function upload($localFilePath, $saveFileName);
public function delete($deleteFile);
public function getUrl($saveFileName);
}

@ -10,7 +10,7 @@
namespace Home\Model; namespace Home\Model;
use Think\Model; use Think\Model;
use Think\Upload; use Think\Upload;
use Base\Service\OssService; use Base\Tool\Storage;
/** /**
* 图片模型 * 图片模型
@ -56,15 +56,14 @@ class PictureModel extends Model{
unset($info[$key]); unset($info[$key]);
} }
} }
if (C('OSS_STATUS')) { if (C('STORAGE_TYPE')) {
$path = explode('/', $value['path']); $path = explode('/', $value['path']);
$saveFileName = 'icon/' . $path[4]; $saveFileName = 'icon/' . $path[4];
$localFilePath = '.' . $value['path']; $localFilePath = '.' . $value['path'];
$ossService = new OssService(); $result = Storage::upload($localFilePath, $saveFileName);
$ossService->upload($localFilePath, $saveFileName);
if ($result['status']) { if ($result['status']) {
$dataUrl['oss_url'] = $ossService->getUrl($saveFileName); $dataUrl['oss_url'] = $result['data']['url'];
$coo = $this->where(['id' => $value['id']])->save($dataUrl); $this->where(['id' => $value['id']])->save($dataUrl);
} else { } else {
$this->error = $result['message']; $this->error = $result['message'];
return false; return false;

@ -10,7 +10,7 @@
namespace Qrcode\Model; namespace Qrcode\Model;
use Think\Model; use Think\Model;
use Think\Upload; use Think\Upload;
use Base\Service\OssService; use Base\Tool\Storage;
/** /**
* 图片模型 * 图片模型
@ -56,15 +56,14 @@ class PictureModel extends Model{
unset($info[$key]); unset($info[$key]);
} }
} }
if (C('OSS_STATUS')) { if (C('STORAGE_TYPE')) {
$path = explode('/', $value['path']); $path = explode('/', $value['path']);
$saveFileName = 'icon/' . $path[4]; $saveFileName = 'icon/' . $path[4];
$localFilePath = '.' . $value['path']; $localFilePath = '.' . $value['path'];
$ossService = new OssService(); $result = Storage::upload($localFilePath, $saveFileName);
$ossService->upload($localFilePath, $saveFileName);
if ($result['status']) { if ($result['status']) {
$dataUrl['oss_url'] = $ossService->getUrl($saveFileName); $dataUrl['oss_url'] = $result['data']['url'];
$coo = $this->where(['id' => $value['id']])->save($dataUrl); $this->where(['id' => $value['id']])->save($dataUrl);
} else { } else {
$this->error = $result['message']; $this->error = $result['message'];
return false; return false;

@ -1,181 +0,0 @@
<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------
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 <banhuajie@163.com>
*/
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);
}
}

@ -1,181 +0,0 @@
<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------
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 <banhuajie@163.com>
*/
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);
}
}

@ -1,12 +1,7 @@
{ {
"require": { "require": {
"rodneyrehm/plist": "^2.0", "rodneyrehm/plist": "^2.0",
"guzzlehttp/guzzle": "~6.0" "guzzlehttp/guzzle": "~6.0",
}, "obs/esdk-obs-php": "3.22.6"
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
} }
} }

778
composer.lock generated

@ -4,27 +4,34 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "d123a4209d62a7caa5b2f90e005695d5", "content-hash": "fb38b16a9eade4efc8e63b8702e94925",
"packages": [ "packages": [
{ {
"name": "guzzlehttp/guzzle", "name": "guzzlehttp/guzzle",
"version": "6.5.2", "version": "6.5.8",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/guzzle.git", "url": "https://github.com/guzzle/guzzle.git",
"reference": "43ece0e75098b7ecd8d13918293029e555a50f82" "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82", "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a52f0440530b54fa079ce76e8c5d196a42cad981",
"reference": "43ece0e75098b7ecd8d13918293029e555a50f82", "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981",
"shasum": "" "shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
}, },
"require": { "require": {
"ext-json": "*", "ext-json": "*",
"guzzlehttp/promises": "^1.0", "guzzlehttp/promises": "^1.0",
"guzzlehttp/psr7": "^1.6.1", "guzzlehttp/psr7": "^1.9",
"php": ">=5.5" "php": ">=5.5",
"symfony/polyfill-intl-idn": "^1.17"
}, },
"require-dev": { "require-dev": {
"ext-curl": "*", "ext-curl": "*",
@ -32,7 +39,6 @@
"psr/log": "^1.1" "psr/log": "^1.1"
}, },
"suggest": { "suggest": {
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
"psr/log": "Required for using the Log middleware" "psr/log": "Required for using the Log middleware"
}, },
"type": "library", "type": "library",
@ -42,22 +48,52 @@
} }
}, },
"autoload": { "autoload": {
"psr-4": {
"GuzzleHttp\\": "src/"
},
"files": [ "files": [
"src/functions_include.php" "src/functions_include.php"
] ],
"psr-4": {
"GuzzleHttp\\": "src/"
}
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
"MIT" "MIT"
], ],
"authors": [ "authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{ {
"name": "Michael Dowling", "name": "Michael Dowling",
"email": "mtdowling@gmail.com", "email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling" "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", "description": "Guzzle is a PHP HTTP client library",
@ -71,72 +107,135 @@
"rest", "rest",
"web service" "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", "name": "guzzlehttp/promises",
"version": "v1.3.1", "version": "1.5.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/promises.git", "url": "https://github.com/guzzle/promises.git",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" "reference": "b94b2807d85443f9719887892882d0329d1e2598"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", "reference": "b94b2807d85443f9719887892882d0329d1e2598",
"shasum": "" "shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
}, },
"require": { "require": {
"php": ">=5.5.0" "php": ">=5.5"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^4.0" "symfony/phpunit-bridge": "^4.4 || ^5.1"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.4-dev" "dev-master": "1.5-dev"
} }
}, },
"autoload": { "autoload": {
"psr-4": {
"GuzzleHttp\\Promise\\": "src/"
},
"files": [ "files": [
"src/functions_include.php" "src/functions_include.php"
] ],
"psr-4": {
"GuzzleHttp\\Promise\\": "src/"
}
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
"MIT" "MIT"
], ],
"authors": [ "authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{ {
"name": "Michael Dowling", "name": "Michael Dowling",
"email": "mtdowling@gmail.com", "email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling" "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", "description": "Guzzle promises library",
"keywords": [ "keywords": [
"promise" "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", "name": "guzzlehttp/psr7",
"version": "1.6.1", "version": "1.9.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/psr7.git", "url": "https://github.com/guzzle/psr7.git",
"reference": "239400de7a173fe9901b9ac7c06497751f00727a" "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", "url": "https://api.github.com/repos/guzzle/psr7/zipball/e98e3e6d4f86621a9b75f623996e6bbdeb4b9318",
"reference": "239400de7a173fe9901b9ac7c06497751f00727a", "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318",
"shasum": "" "shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
}, },
"require": { "require": {
"php": ">=5.4.0", "php": ">=5.4.0",
@ -148,37 +247,58 @@
}, },
"require-dev": { "require-dev": {
"ext-zlib": "*", "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": { "suggest": {
"zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.6-dev" "dev-master": "1.9-dev"
} }
}, },
"autoload": { "autoload": {
"psr-4": {
"GuzzleHttp\\Psr7\\": "src/"
},
"files": [ "files": [
"src/functions_include.php" "src/functions_include.php"
] ],
"psr-4": {
"GuzzleHttp\\Psr7\\": "src/"
}
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
"MIT" "MIT"
], ],
"authors": [ "authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{ {
"name": "Michael Dowling", "name": "Michael Dowling",
"email": "mtdowling@gmail.com", "email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling" "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", "name": "Tobias Schultze",
"email": "webmaster@tubo-world.de",
"homepage": "https://github.com/Tobion" "homepage": "https://github.com/Tobion"
} }
], ],
@ -193,7 +313,179 @@
"uri", "uri",
"url" "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", "name": "psr/http-message",
@ -207,7 +499,13 @@
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
"shasum": "" "shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
}, },
"require": { "require": {
"php": ">=5.3.0" "php": ">=5.3.0"
@ -243,8 +541,67 @@
"request", "request",
"response" "response"
], ],
"support": {
"source": "https://github.com/php-fig/http-message/tree/master"
},
"time": "2016-08-06T14:39:51+00:00" "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", "name": "ralouphie/getallheaders",
"version": "3.0.3", "version": "3.0.3",
@ -257,7 +614,13 @@
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
"reference": "120b605dfeb996808c31b6477290a714d356e822", "reference": "120b605dfeb996808c31b6477290a714d356e822",
"shasum": "" "shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
}, },
"require": { "require": {
"php": ">=5.6" "php": ">=5.6"
@ -283,29 +646,45 @@
} }
], ],
"description": "A polyfill for getallheaders.", "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" "time": "2019-03-08T08:55:37+00:00"
}, },
{ {
"name": "rodneyrehm/plist", "name": "rodneyrehm/plist",
"version": "v2.0.1", "version": "v2.0.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/rodneyrehm/CFPropertyList.git", "url": "https://github.com/TECLIB/CFPropertyList.git",
"reference": "2ea0483806c989eb0518a767fa29a111bb29cb67" "reference": "eb1f97cc44427359be9f09e617d68eef57707617"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/rodneyrehm/CFPropertyList/zipball/2ea0483806c989eb0518a767fa29a111bb29cb67", "url": "https://api.github.com/repos/TECLIB/CFPropertyList/zipball/eb1f97cc44427359be9f09e617d68eef57707617",
"reference": "2ea0483806c989eb0518a767fa29a111bb29cb67", "reference": "eb1f97cc44427359be9f09e617d68eef57707617",
"shasum": "" "shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
}, },
"require": { "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", "type": "library",
"autoload": { "autoload": {
"psr-0": { "psr-4": {
"CFPropertyList": "classes/" "CFPropertyList\\": "src/CFPropertyList/"
} }
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
@ -315,19 +694,303 @@
"authors": [ "authors": [
{ {
"name": "Christian Kruse", "name": "Christian Kruse",
"email": "cjk@wwwtech.de" "email": "cjk@wwwtech.de",
"role": "developer"
}, },
{ {
"name": "Rodney Rehm", "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.", "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": [
"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": [ "keywords": [
"plist" "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": [], "packages-dev": [],
@ -337,5 +1000,6 @@
"prefer-stable": false, "prefer-stable": false,
"prefer-lowest": false, "prefer-lowest": false,
"platform": [], "platform": [],
"platform-dev": [] "platform-dev": [],
"plugin-api-version": "2.3.0"
} }

Loading…
Cancel
Save