1
0
mirror of https://gitee.com/zoujingli/ThinkAdmin.git synced 2025-04-06 03:58:04 +08:00

Composer Update

This commit is contained in:
邹景立 2021-06-22 17:06:31 +08:00
parent 6e2a989be5
commit 866d6e2173
250 changed files with 7195 additions and 2346 deletions
public/static/theme/css
thinkphp
vendor
aliyuncs/oss-sdk-php
composer
qiniu/php-sdk

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1 +1,218 @@
@charset "UTF-8";body,html{height:100%;display:block}body{background:url(../img/login/bg1.jpg) no-repeat center center;background-size:cover}.login-container{height:100%}.login-container .header{top:0;left:0;width:100%;height:47px;position:absolute;text-shadow:#000 .1em .1em .1em}.login-container .header .title{color:#fff;float:left;font-size:18px;line-height:47px;text-indent:40px;letter-spacing:1px}.login-container .header a,.login-container .header a:focus,.login-container .header a:hover{color:#fff;letter-spacing:1px;text-decoration:none}.login-container .header ul{float:right}.login-container .header ul li{float:left;line-height:47px;margin-left:10px}.login-container form{top:50%;left:50%;width:300px;position:absolute;margin-top:-250px;margin-left:-150px}.login-container form h2{color:#fff;padding:20px 0;font-size:25px;text-align:center;font-weight:700;letter-spacing:3px;text-shadow:#000 .05em .05em .05em}.login-container form ul li{position:relative;margin-top:20px;text-shadow:#000 .1em .1em .1em}.login-container form ul li.verify label{width:200px}.login-container form ul li.verify input.layui-input{text-transform:uppercase}.login-container form ul li.verify img{width:95px;height:44px;cursor:pointer;position:absolute;margin-left:5px;border-radius:5px;box-shadow:0 2px 5px 0 rgba(0,0,0,.1)}.login-container form ul li i.layui-icon{color:#fff;font-size:18px;position:absolute;padding:14px 15px 13px 20px}.login-container form ul li input{color:#fff;height:45px;padding:0 15px;font-size:14px;line-height:1em;text-indent:35px;border-radius:6px;letter-spacing:1px;background:rgba(0,0,0,.12);text-shadow:#000 .1em .1em .1em;-webkit-text-fill-color:#fff!important;box-shadow:0 2px 3px 0 rgba(0,0,0,.3) inset!important}.login-container form ul li input:-webkit-autofill,.login-container form ul li input:-webkit-autofill:active,.login-container form ul li input:-webkit-autofill:focus,.login-container form ul li input:-webkit-autofill:hover,.login-container form ul li input:active,.login-container form ul li input:focus,.login-container form ul li input:hover{text-shadow:#000 .1em .1em .1em;box-shadow:0 2px 3px 0 rgba(0,0,0,.3) inset!important;-webkit-text-fill-color:#fff!important;-webkit-transition-delay:9999s!important;-webkit-transition:color 9999s ease-out,background-color 9999s ease-out!important}.login-container form ul li span{letter-spacing:1px;color:#ff0!important}.login-container form ul li button{color:#333!important;height:45px!important;background:#fff!important;border-radius:4px!important;letter-spacing:1px!important;box-shadow:0 15px 30px 0 hsla(0,0%,100%,.25) inset,0 2px 7px 0 rgba(0,0,0,.2)}.login-container .footer{left:0;bottom:0;color:#fff;width:100%;position:absolute;text-align:center;line-height:30px;padding-bottom:10px;text-shadow:#000 .1em .1em .1em}.login-container .footer a,.login-container .footer span{color:#fff}.login-container .footer a:hover{color:#ccc}#supersized{top:0;left:0;width:100%;height:100%;z-index:-999;display:block;position:fixed;overflow:hidden}#supersized img{border:0;width:auto;height:auto;display:none;outline:0;position:relative;max-width:none!important}#supersized.speed img{image-rendering:-moz-crisp-edges;-ms-interpolation-mode:nearest-neighbor}#supersized.quality img{image-rendering:optimizeQuality;-ms-interpolation-mode:bicubic}#supersized a,#supersized li{width:100%;height:100%;display:block;cursor:default}#supersized li{top:0;left:0;z-index:-30;position:fixed;overflow:hidden;list-style:none}#supersized li.prevslide{z-index:-20}#supersized li.prevslide img{display:inline}#supersized li.activeslide{z-index:-10}#supersized li.activeslide img{display:inline}#supersized li.image-loading{width:100%;height:100%;background:url(../../plugs/supersized/progress.gif) no-repeat center center}#supersized li.image-loading img{visibility:hidden}#supersized-loader{top:50%;left:50%;z-index:0;width:60px;height:60px;position:absolute;text-indent:-999em;margin:-30px 0 0 -30px;background:url(../../plugs/supersized/progress.gif) no-repeat center center}/*# sourceMappingURL=login.css.map */ @charset "UTF-8";
body,
html {
height: 100%;
display: block;
}
body {
background: url("../img/login/bg1.jpg") no-repeat center center;
background-size: cover;
}
.login-container {
height: 100%;
}
.login-container .header {
top: 0;
left: 0;
width: 100%;
height: 47px;
position: absolute;
text-shadow: #000 0.1em 0.1em 0.1em;
}
.login-container .header .title {
color: #fff;
float: left;
font-size: 18px;
line-height: 47px;
text-indent: 40px;
letter-spacing: 1px;
}
.login-container .header a,
.login-container .header a:focus,
.login-container .header a:hover {
color: #fff;
letter-spacing: 1px;
text-decoration: none;
}
.login-container .header ul {
float: right;
}
.login-container .header ul li {
float: left;
line-height: 47px;
margin-left: 10px;
}
.login-container form {
top: 50%;
left: 50%;
width: 300px;
position: absolute;
margin-top: -250px;
margin-left: -150px;
}
.login-container form h2 {
color: #fff;
padding: 20px 0;
font-size: 25px;
text-align: center;
font-weight: 700;
letter-spacing: 3px;
text-shadow: #000 0.05em 0.05em 0.05em;
}
.login-container form ul li {
position: relative;
margin-top: 20px;
text-shadow: #000 0.1em 0.1em 0.1em;
}
.login-container form ul li.verify label {
width: 200px;
}
.login-container form ul li.verify input.layui-input {
text-transform: uppercase;
}
.login-container form ul li.verify img {
width: 95px;
height: 44px;
cursor: pointer;
position: absolute;
margin-left: 5px;
border-radius: 5px;
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.1);
}
.login-container form ul li i.layui-icon {
color: #fff;
font-size: 18px;
position: absolute;
padding: 14px 15px 13px 20px;
}
.login-container form ul li input {
color: #fff;
height: 45px;
padding: 0 15px;
font-size: 14px;
line-height: 1em;
text-indent: 35px;
border-radius: 6px;
letter-spacing: 1px;
background: rgba(0, 0, 0, 0.12);
text-shadow: #000 0.1em 0.1em 0.1em;
-webkit-text-fill-color: #fff !important;
box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.3) inset !important;
}
.login-container form ul li input:hover,
.login-container form ul li input:focus,
.login-container form ul li input:active,
.login-container form ul li input:-webkit-autofill,
.login-container form ul li input:-webkit-autofill:hover,
.login-container form ul li input:-webkit-autofill:focus,
.login-container form ul li input:-webkit-autofill:active {
text-shadow: #000 0.1em 0.1em 0.1em;
box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.3) inset !important;
-webkit-text-fill-color: #fff !important;
-webkit-transition-delay: 9999s !important;
-webkit-transition: color 9999s ease-out, background-color 9999s ease-out !important;
}
.login-container form ul li span {
letter-spacing: 1px;
color: #ff0 !important;
}
.login-container form ul li button {
color: #333 !important;
height: 45px !important;
background: #fff !important;
border-radius: 4px !important;
letter-spacing: 1px !important;
box-shadow: 0 15px 30px 0 hsla(0, 0%, 100%, 0.25) inset, 0 2px 7px 0 rgba(0, 0, 0, 0.2);
}
.login-container .footer {
left: 0;
bottom: 0;
color: #fff;
width: 100%;
position: absolute;
text-align: center;
line-height: 30px;
padding-bottom: 10px;
text-shadow: #000 0.1em 0.1em 0.1em;
}
.login-container .footer a,
.login-container .footer span {
color: #fff;
}
.login-container .footer a:hover {
color: #ccc;
}
#supersized {
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -999;
display: block;
position: fixed;
overflow: hidden;
}
#supersized img {
border: 0;
width: auto;
height: auto;
display: none;
outline: 0;
position: relative;
max-width: none !important;
}
#supersized.speed img {
image-rendering: -moz-crisp-edges;
-ms-interpolation-mode: nearest-neighbor;
}
#supersized.quality img {
image-rendering: optimizeQuality;
-ms-interpolation-mode: bicubic;
}
#supersized a,
#supersized li {
width: 100%;
height: 100%;
display: block;
cursor: default;
}
#supersized li {
top: 0;
left: 0;
z-index: -30;
position: fixed;
overflow: hidden;
list-style: none;
}
#supersized li.prevslide {
z-index: -20;
}
#supersized li.prevslide img {
display: inline;
}
#supersized li.activeslide {
z-index: -10;
}
#supersized li.activeslide img {
display: inline;
}
#supersized li.image-loading {
width: 100%;
height: 100%;
background: url(../../plugs/supersized/progress.gif) no-repeat center center;
}
#supersized li.image-loading img {
visibility: hidden;
}
#supersized-loader {
top: 50%;
left: 50%;
z-index: 0;
width: 60px;
height: 60px;
position: absolute;
text-indent: -999em;
margin: -30px 0 0 -30px;
background: url(../../plugs/supersized/progress.gif) no-repeat center center;
}
/*# sourceMappingURL=login.css.map */

@ -1 +1 @@
{"version":3,"sources":["login.less"],"names":[],"mappings":"iBAeA,KAAM,KACJ,OAAA,KACA,QAAA,MAGF,KACE,WAAgB,0BAAA,UAAA,OAAA,OAChB,gBAAA,MAGF,iBACE,OAAA,KAEA,yBACE,IAAA,EACA,KAAA,EACA,MAAA,KACA,OAAA,KACA,SAAA,SACA,YAAA,KAAA,KAAA,KAAA,KAEA,gCACE,MAAA,KACA,MAAA,KACA,UAAA,KACA,YAAA,KACA,YAAA,KACA,eAAA,IAGF,2BACM,iCAAS,iCACX,MAAA,KACA,eAAA,IACA,gBAAA,KAIJ,4BACE,MAAA,MAEA,+BACE,MAAA,KACA,YAAA,KACA,YAAA,KAKN,sBACE,IAAA,IACA,KAAA,IACA,MAAA,MACA,SAAA,SACA,WAAA,OACA,YAAA,OAEA,yBACE,MAAA,KACA,QAAA,KAAA,EACA,UAAA,KACA,WAAA,OACA,YAAA,IACA,eAAA,IACA,YAAA,KAAA,MAAA,MAAA,MAGC,4BACD,SAAA,SACA,WAAA,KACA,YAAA,KAAA,KAAA,KAAA,KAGE,yCACE,MAAA,MAGG,qDACH,eAAA,UAGF,uCACE,MAAA,KACA,OAAA,KACA,OAAA,QACA,SAAA,SACA,YAAA,IACA,cAAA,IACA,WAAA,EAAA,IAAA,IAAA,EAAA,eAIH,yCACC,MAAA,KACA,UAAA,KACA,SAAA,SACA,QAAA,KAAA,KAAA,KAAA,KAGF,kCACE,MAAA,KACA,OAAA,KACA,QAAA,EAAA,KACA,UAAA,KACA,YAAA,IACA,YAAA,KACA,cAAA,IACA,eAAA,IACA,WAAA,gBACA,YAAA,KAAA,KAAA,KAAA,KACA,wBAAA,eACA,WAAA,EAAA,IAAA,IAAA,EAAA,eAAA,gBAGC,mDAC2C,0DAA1B,yDADoB,yDADnB,yCAAT,wCAAT,wCAGC,YAAA,KAAA,KAAA,KAAA,KACA,WAAA,EAAA,IAAA,IAAA,EAAA,eAAA,gBACA,wBAAA,eACA,yBAAA,gBACA,mBAAA,MAAA,MAAA,SAAA,iBAAA,MAAA,mBAIJ,iCACE,eAAA,IACA,MAAA,eAGF,mCACE,MAAA,eACA,OAAA,eACA,WAAA,eACA,cAAA,cACA,eAAA,cACA,WAAA,EAAA,KAAA,KAAA,EAAA,oBAAA,MAAA,EAAA,IAAA,IAAA,EAAA,eAKN,yBACE,KAAA,EACA,OAAA,EACA,MAAA,KACA,MAAA,KACA,SAAA,SACA,WAAA,OACA,YAAA,KACA,eAAA,KACA,YAAA,KAAA,KAAA,KAAA,KAEA,2BAAG,8BACD,MAAA,KAGD,iCACC,MAAA,KAKN,YACE,IAAA,EACA,KAAA,EACA,MAAA,KACA,OAAA,KACA,QAAA,KACA,QAAA,MACA,SAAA,MACA,SAAA,OAEA,gBACE,OAAA,EACA,MAAA,KACA,OAAA,KACA,QAAA,KACA,QAAA,EACA,SAAA,SACA,UAAA,eAGM,sBACN,gBAAA,iBACA,uBAAA,iBAGQ,wBACR,gBAAA,gBACA,uBAAA,QAGF,cAAG,eACD,MAAA,KACA,OAAA,KACA,QAAA,MACA,OAAA,QAGF,eACE,IAAA,EACA,KAAA,EACA,QAAA,IACA,SAAA,MACA,SAAA,OACA,WAAA,KAEC,yBACC,QAAA,IAEA,6BACE,QAAA,OAIH,2BACC,QAAA,IAEA,+BACE,QAAA,OAIH,6BACC,MAAA,KACA,OAAA,KACA,WAAA,yCAAA,UAAA,OAAA,OAEA,iCACE,WAAA,OAMR,mBACE,IAAA,IACA,KAAA,IACA,QAAA,EACA,MAAA,KACA,OAAA,KACA,SAAA,SACA,YAAA,OACA,OAAA,MAAA,EAAA,EAAA,MACA,WAAA,yCAAA,UAAA,OAAA"} {"version":3,"sources":["login.less"],"names":[],"mappings":"AAAA,SAAS;AAeT;AAAM;EACJ,YAAA;EACA,cAAA;;AAGF;EACE,gBAAgB,+CAAhB;EACA,sBAAA;;AAGF;EACE,YAAA;;AADF,gBAGE;EACE,MAAA;EACA,OAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;EACA,mCAAA;;AATJ,gBAGE,QAQE;EACE,WAAA;EACA,WAAA;EACA,eAAA;EACA,iBAAA;EACA,iBAAA;EACA,mBAAA;;AAIA,gBAlBJ,QAiBE;AACK,gBAlBP,QAiBE,EACM;AAAQ,gBAlBhB,QAiBE,EACe;EACX,WAAA;EACA,mBAAA;EACA,qBAAA;;AAxBR,gBAGE,QAyBE;EACE,YAAA;;AA7BN,gBAGE,QAyBE,GAGE;EACE,WAAA;EACA,iBAAA;EACA,iBAAA;;AAlCR,gBAuCE;EACE,QAAA;EACA,SAAA;EACA,YAAA;EACA,kBAAA;EACA,kBAAA;EACA,mBAAA;;AA7CJ,gBAuCE,KAQE;EACE,WAAA;EACA,eAAA;EACA,eAAA;EACA,kBAAA;EACA,gBAAA;EACA,mBAAA;EACA,sCAAA;;AAtDN,gBAuCE,KAkBE,GAAG;EACD,kBAAA;EACA,gBAAA;EACA,mCAAA;;AAEA,gBAvBJ,KAkBE,GAAG,GAKA,OACC;EACE,YAAA;;AAFJ,gBAvBJ,KAkBE,GAAG,GAKA,OAKC,MAAK;EACH,yBAAA;;AANJ,gBAvBJ,KAkBE,GAAG,GAKA,OASC;EACE,WAAA;EACA,YAAA;EACA,eAAA;EACA,kBAAA;EACA,gBAAA;EACA,kBAAA;EACA,0CAAA;;AA9EV,gBAuCE,KAkBE,GAAG,GAyBD,EAAC;EACC,WAAA;EACA,eAAA;EACA,kBAAA;EACA,4BAAA;;AAtFR,gBAuCE,KAkBE,GAAG,GAgCD;EACE,WAAA;EACA,YAAA;EACA,eAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;EACA,kBAAA;EACA,mBAAA;EACA,+BAAA;EACA,mCAAA;EACA,6BAAA;EACA,gDAAA;;AAEA,gBAhEN,KAkBE,GAAG,GAgCD,MAcG;AAAQ,gBAhEf,KAkBE,GAAG,GAgCD,MAcY;AAAQ,gBAhExB,KAkBE,GAAG,GAgCD,MAcqB;AACnB,gBAjEN,KAkBE,GAAG,GAgCD,MAeG;AAAmB,gBAjE1B,KAkBE,GAAG,GAgCD,MAeuB,iBAAiB;AACtC,gBAlEN,KAkBE,GAAG,GAgCD,MAgBG,iBAAiB;AAAQ,gBAlEhC,KAkBE,GAAG,GAgCD,MAgB6B,iBAAiB;EAC1C,mCAAA;EACA,gDAAA;EACA,6BAAA;EACA,0CAAA;EACA,yEAAA;;AA9GV,gBAuCE,KAkBE,GAAG,GAyDD;EACE,mBAAA;EACA,WAAA;;AApHR,gBAuCE,KAkBE,GAAG,GA8DD;EACE,WAAA;EACA,uBAAA;EACA,gBAAA;EACA,6BAAA;EACA,8BAAA;EACA,uFAAA;;AA7HR,gBAkIE;EACE,OAAA;EACA,SAAA;EACA,WAAA;EACA,WAAA;EACA,kBAAA;EACA,kBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mCAAA;;AA3IJ,gBAkIE,QAWE;AA7IJ,gBAkIE,QAWK;EACD,WAAA;;AA9IN,gBAkIE,QAeE,EAAC;EACC,WAAA;;AAKN;EACE,MAAA;EACA,OAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,cAAA;EACA,eAAA;EACA,gBAAA;;AARF,WAUE;EACE,SAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,UAAA;EACA,kBAAA;EACA,eAAA;;AAGF,WAAC,MAAO;EACN,iCAAA;EACA,wCAAA;;AAGF,WAAC,QAAS;EACR,gCAAA;EACA,+BAAA;;AA3BJ,WA8BE;AA9BF,WA8BK;EACD,WAAA;EACA,YAAA;EACA,cAAA;EACA,eAAA;;AAlCJ,WAqCE;EACE,MAAA;EACA,OAAA;EACA,YAAA;EACA,eAAA;EACA,gBAAA;EACA,gBAAA;;AAEA,WARF,GAQG;EACC,YAAA;;AADF,WARF,GAQG,UAGC;EACE,eAAA;;AAIJ,WAhBF,GAgBG;EACC,YAAA;;AADF,WAhBF,GAgBG,YAGC;EACE,eAAA;;AAIJ,WAxBF,GAwBG;EACC,WAAA;EACA,YAAA;EACA,4EAAA;;AAHF,WAxBF,GAwBG,cAKC;EACE,kBAAA;;AAMR;EACE,QAAA;EACA,SAAA;EACA,UAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;EACA,mBAAA;EACA,uBAAA;EACA,4EAAA","file":"login.css"}

@ -35,7 +35,7 @@ ThinkPHP5.1对底层架构做了进一步的改进,减少依赖,其主要特
+ 内置控制器扩展类 + 内置控制器扩展类
+ 模型自动验证 + 模型自动验证
> ThinkPHP5.1的运行环境要求PHP5.6+。 > ThinkPHP5.1的运行环境要求PHP5.6+ 兼容PHP8.0
## 安装 ## 安装
@ -70,6 +70,12 @@ composer update topthink/framework
+ [完全开发手册](https://www.kancloud.cn/manual/thinkphp5_1/content) + [完全开发手册](https://www.kancloud.cn/manual/thinkphp5_1/content)
+ [升级指导](https://www.kancloud.cn/manual/thinkphp5_1/354155) + [升级指导](https://www.kancloud.cn/manual/thinkphp5_1/354155)
## 官方服务
+ [应用服务市场](https://market.topthink.com/)
+ [ThinkAPI——统一API服务](https://docs.topthink.com/think-api)
## 命名规范 ## 命名规范
`ThinkPHP5.1`遵循PSR-2命名规范和PSR-4自动加载规范。 `ThinkPHP5.1`遵循PSR-2命名规范和PSR-4自动加载规范。

@ -20,7 +20,7 @@ use think\route\Dispatch;
*/ */
class App extends Container class App extends Container
{ {
const VERSION = '5.1.39 LTS'; const VERSION = '5.1.41 LTS';
/** /**
* 当前模块路径 * 当前模块路径
@ -548,12 +548,10 @@ class App extends Container
public function routeInit() public function routeInit()
{ {
// 路由检测 // 路由检测
$files = scandir($this->routePath); if (is_dir($this->routePath)) {
$files = glob($this->routePath . '*.php');
foreach ($files as $file) { foreach ($files as $file) {
if (strpos($file, '.php')) { $rules = include $file;
$filename = $this->routePath . $file;
// 导入路由配置
$rules = include $filename;
if (is_array($rules)) { if (is_array($rules)) {
$this->route->import($rules); $this->route->import($rules);
} }

@ -400,7 +400,7 @@ class Collection implements ArrayAccess, Countable, IteratorAggregate, JsonSeria
*/ */
public function column($columnKey, $indexKey = null) public function column($columnKey, $indexKey = null)
{ {
return array_column($this->items, $columnKey, $indexKey); return array_column($this->toArray(), $columnKey, $indexKey);
} }
/** /**

@ -461,6 +461,25 @@ class Container implements ArrayAccess, IteratorAggregate, Countable
$type = key($vars) === 0 ? 1 : 0; $type = key($vars) === 0 ? 1 : 0;
$params = $reflect->getParameters(); $params = $reflect->getParameters();
if (PHP_VERSION > 8.0) {
$args = $this->parseParamsForPHP8($params, $vars, $type);
} else {
$args = $this->parseParams($params, $vars, $type);
}
return $args;
}
/**
* 解析参数
* @access protected
* @param array $params 参数列表
* @param array $vars 参数数据
* @param int $type 参数类别
* @return array
*/
protected function parseParams($params, $vars, $type)
{
foreach ($params as $param) { foreach ($params as $param) {
$name = $param->getName(); $name = $param->getName();
$lowerName = Loader::parseName($name); $lowerName = Loader::parseName($name);
@ -480,7 +499,38 @@ class Container implements ArrayAccess, IteratorAggregate, Countable
throw new InvalidArgumentException('method param miss:' . $name); throw new InvalidArgumentException('method param miss:' . $name);
} }
} }
return $args;
}
/**
* 解析参数
* @access protected
* @param array $params 参数列表
* @param array $vars 参数数据
* @param int $type 参数类别
* @return array
*/
protected function parseParamsForPHP8($params, $vars, $type)
{
foreach ($params as $param) {
$name = $param->getName();
$lowerName = Loader::parseName($name);
$reflectionType = $param->getType();
if ($reflectionType && $reflectionType->isBuiltin() === false) {
$args[] = $this->getObjectParam($reflectionType->getName(), $vars);
} elseif (1 == $type && !empty($vars)) {
$args[] = array_shift($vars);
} elseif (0 == $type && array_key_exists($name, $vars)) {
$args[] = $vars[$name];
} elseif (0 == $type && array_key_exists($lowerName, $vars)) {
$args[] = $vars[$lowerName];
} elseif ($param->isDefaultValueAvailable()) {
$args[] = $param->getDefaultValue();
} else {
throw new InvalidArgumentException('method param miss:' . $name);
}
}
return $args; return $args;
} }

@ -18,34 +18,43 @@ use think\db\Query;
* Class Model * Class Model
* @package think * @package think
* @mixin Query * @mixin Query
* @method Query where(mixed $field, string $op = null, mixed $condition = null) static 查询条件 * @method $this scope(string|array $scope) static 查询范围
* @method Query whereRaw(string $where, array $bind = []) static 表达式查询 * @method $this where(mixed $field, string $op = null, mixed $condition = null) static 查询条件
* @method Query whereExp(string $field, string $condition, array $bind = []) static 字段表达式查询 * @method $this whereRaw(string $where, array $bind = [], string $logic = 'AND') static 表达式查询
* @method Query when(mixed $condition, mixed $query, mixed $otherwise = null) static 条件查询 * @method $this whereExp(string $field, string $condition, array $bind = [], string $logic = 'AND') static 字段表达式查询
* @method Query join(mixed $join, mixed $condition = null, string $type = 'INNER') static JOIN查询 * @method $this when(mixed $condition, mixed $query, mixed $otherwise = null) static 条件查询
* @method Query view(mixed $join, mixed $field = null, mixed $on = null, string $type = 'INNER') static 视图查询 * @method $this join(mixed $join, mixed $condition = null, string $type = 'INNER', array $bind = []) static JOIN查询
* @method Query with(mixed $with) static 关联预载入 * @method $this view(mixed $join, mixed $field = null, mixed $on = null, string $type = 'INNER') static 视图查询
* @method Query count(string $field) static Count统计查询 * @method $this with(mixed $with, callable $callback = null) static 关联预载入
* @method Query min(string $field) static Min统计查询 * @method $this count(string $field = '*') static Count统计查询
* @method Query max(string $field) static Max统计查询 * @method $this min(string $field, bool $force = true) static Min统计查询
* @method Query sum(string $field) static SUM统计查询 * @method $this max(string $field, bool $force = true) static Max统计查询
* @method Query avg(string $field) static Avg统计查询 * @method $this sum(string $field) static SUM统计查询
* @method Query field(mixed $field, boolean $except = false) static 指定查询字段 * @method $this avg(string $field) static Avg统计查询
* @method Query fieldRaw(string $field, array $bind = []) static 指定查询字段 * @method $this field(mixed $field, boolean $except = false, string $tableName = '', string $prefix = '', string $alias = '') static 指定查询字段
* @method Query union(mixed $union, boolean $all = false) static UNION查询 * @method $this fieldRaw(string $field) static 指定查询字段
* @method Query limit(mixed $offset, integer $length = null) static 查询LIMIT * @method $this union(mixed $union, boolean $all = false) static UNION查询
* @method Query order(mixed $field, string $order = null) static 查询ORDER * @method $this limit(mixed $offset, integer $length = null) static 查询LIMIT
* @method Query orderRaw(string $field, array $bind = []) static 查询ORDER * @method $this order(mixed $field, string $order = null) static 查询ORDER
* @method Query cache(mixed $key = null , integer $expire = null) static 设置查询缓存 * @method $this orderRaw(string $field, array $bind = []) static 查询ORDER
* @method mixed value(string $field) static 获取某个字段的值 * @method $this cache(mixed $key = null , integer|\DateTime $expire = null, string $tag = null) static 设置查询缓存
* @method mixed value(string $field, mixed $default = null) static 获取某个字段的值
* @method array column(string $field, string $key = '') static 获取某个列的值 * @method array column(string $field, string $key = '') static 获取某个列的值
* @method mixed find(mixed $data = null) static 查询单个记录 * @method $this find(mixed $data = null) static 查询单个记录
* @method mixed select(mixed $data = null) static 查询多个记录 * @method $this findOrFail(mixed $data = null) 查询单个记录
* @method mixed get(mixed $data = null,mixed $with =[],bool $cache= false) static 查询单个记录 支持关联预载入 * @method Collection|$this[] select(mixed $data = null) static 查询多个记录
* @method mixed getOrFail(mixed $data = null,mixed $with =[],bool $cache= false) static 查询单个记录 不存在则抛出异常 * @method $this get(mixed $data = null,mixed $with = [],bool $cache = false, bool $failException = false) static 查询单个记录 支持关联预载入
* @method mixed findOrEmpty(mixed $data = null,mixed $with =[],bool $cache= false) static 查询单个记录 不存在则返回空模型 * @method $this getOrFail(mixed $data = null,mixed $with = [],bool $cache = false) static 查询单个记录 不存在则抛出异常
* @method mixed all(mixed $data = null,mixed $with =[],bool $cache= false) static 查询多个记录 支持关联预载入 * @method $this findOrEmpty(mixed $data = null) static 查询单个记录 不存在则返回空模型
* @method \think\Model withAttr(array $name,\Closure $closure) 动态定义获取器 * @method Collection|$this[] all(mixed $data = null,mixed $with = [],bool $cache = false) static 查询多个记录 支持关联预载入
* @method $this withAttr(array $name,\Closure $closure = null) static 动态定义获取器
* @method $this withJoin(string|array $with, string $joinType = '') static
* @method $this withCount(string|array $relation, bool $subQuery = true) static 关联统计
* @method $this withSum(string|array $relation, string $field, bool $subQuery = true) static 关联SUM统计
* @method $this withMax(string|array $relation, string $field, bool $subQuery = true) static 关联MAX统计
* @method $this withMin(string|array $relation, string $field, bool $subQuery = true) static 关联Min统计
* @method $this withAvg(string|array $relation, string $field, bool $subQuery = true) static 关联Avg统计
* @method Paginator|$this paginate() static 分页
*/ */
abstract class Model implements \JsonSerializable, \ArrayAccess abstract class Model implements \JsonSerializable, \ArrayAccess
{ {

@ -1800,7 +1800,7 @@ class Request
public function host($strict = false) public function host($strict = false)
{ {
if (!$this->host) { if (!$this->host) {
$this->host = $this->server('HTTP_X_REAL_HOST') ?: $this->server('HTTP_HOST'); $this->host = $this->server('HTTP_X_REAL_HOST') ?: $this->server('HTTP_X_FORWARDED_HOST') ?: $this->server('HTTP_HOST');
} }
return true === $strict && strpos($this->host, ':') ? strstr($this->host, ':', true) : $this->host; return true === $strict && strpos($this->host, ':') ? strstr($this->host, ':', true) : $this->host;

@ -13,9 +13,11 @@ namespace think;
use think\exception\RouteNotFoundException; use think\exception\RouteNotFoundException;
use think\route\AliasRule; use think\route\AliasRule;
use think\route\Dispatch;
use think\route\dispatch\Url as UrlDispatch; use think\route\dispatch\Url as UrlDispatch;
use think\route\Domain; use think\route\Domain;
use think\route\Resource; use think\route\Resource;
use think\route\Rule;
use think\route\RuleGroup; use think\route\RuleGroup;
use think\route\RuleItem; use think\route\RuleItem;

@ -408,6 +408,7 @@ class Validate
foreach ($this->append as $key => $rule) { foreach ($this->append as $key => $rule) {
if (!isset($rules[$key])) { if (!isset($rules[$key])) {
$rules[$key] = $rule; $rules[$key] = $rule;
unset($this->append[$key]);
} }
} }
@ -520,6 +521,7 @@ class Validate
if (isset($this->append[$field])) { if (isset($this->append[$field])) {
// 追加额外的验证规则 // 追加额外的验证规则
$rules = array_unique(array_merge($rules, $this->append[$field]), SORT_REGULAR); $rules = array_unique(array_merge($rules, $this->append[$field]), SORT_REGULAR);
unset($this->append[$field]);
} }
$i = 0; $i = 0;

@ -90,7 +90,7 @@ class Redis extends Driver
*/ */
public function has($name) public function has($name)
{ {
return $this->handler->exists($this->getCacheKey($name)); return $this->handler->exists($this->getCacheKey($name)) ? true : false;
} }
/** /**

@ -684,7 +684,7 @@ abstract class Builder
*/ */
protected function parseClosure(Query $query, $call, $show = true) protected function parseClosure(Query $query, $call, $show = true)
{ {
$newQuery = $query->newQuery()->setConnection($this->connection); $newQuery = $query->newQuery()->removeOption();
$call($newQuery); $call($newQuery);
return $newQuery->buildSql($show); return $newQuery->buildSql($show);

@ -1764,7 +1764,7 @@ class Query
* var_page:分页变量, * var_page:分页变量,
* list_rows:每页数量 * list_rows:每页数量
* type:分页类名 * type:分页类名
* @return \think\Paginator * @return $this[]|\think\Paginator
* @throws DbException * @throws DbException
*/ */
public function paginate($listRows = null, $simple = false, $config = []) public function paginate($listRows = null, $simple = false, $config = [])
@ -3464,7 +3464,7 @@ class Query
} }
/** /**
* 查找单条记录 如果不存在则抛出异常 * 查找单条记录 不存在则返回空模型
* @access public * @access public
* @param array|string|Query|\Closure $data * @param array|string|Query|\Closure $data
* @return array|\PDOStatement|string|Model * @return array|\PDOStatement|string|Model

@ -125,7 +125,13 @@ class Mysql extends Builder
$key = trim($key); $key = trim($key);
if (strpos($key, '->') && false === strpos($key, '(')) { if(strpos($key, '->>') && false === strpos($key, '(')){
// JSON字段支持
list($field, $name) = explode('->>', $key, 2);
return $this->parseKey($query, $field, true) . '->>\'$' . (strpos($name, '[') === 0 ? '' : '.') . str_replace('->>', '.', $name) . '\'';
}
elseif (strpos($key, '->') && false === strpos($key, '(')) {
// JSON字段支持 // JSON字段支持
list($field, $name) = explode('->', $key, 2); list($field, $name) = explode('->', $key, 2);

@ -97,10 +97,10 @@ class Mysql extends Connection
$info[$val['field']] = [ $info[$val['field']] = [
'name' => $val['field'], 'name' => $val['field'],
'type' => $val['type'], 'type' => $val['type'],
'notnull' => (bool) ('' === $val['null']), // not null is empty, null is yes 'notnull' => 'NO' == $val['null'],
'default' => $val['default'], 'default' => $val['default'],
'primary' => (strtolower($val['key']) == 'pri'), 'primary' => strtolower($val['key']) == 'pri',
'autoinc' => (strtolower($val['extra']) == 'auto_increment'), 'autoinc' => strtolower($val['extra']) == 'auto_increment',
]; ];
} }
} }
@ -187,7 +187,7 @@ class Mysql extends Connection
return false; return false;
} }
$this->execute("XA START '$xid'"); $this->linkID->exec("XA START '$xid'");
} }
/** /**
@ -199,8 +199,8 @@ class Mysql extends Connection
public function prepareXa($xid) public function prepareXa($xid)
{ {
$this->initConnect(true); $this->initConnect(true);
$this->execute("XA END '$xid'"); $this->linkID->exec("XA END '$xid'");
$this->execute("XA PREPARE '$xid'"); $this->linkID->exec("XA PREPARE '$xid'");
} }
/** /**
@ -212,7 +212,7 @@ class Mysql extends Connection
public function commitXa($xid) public function commitXa($xid)
{ {
$this->initConnect(true); $this->initConnect(true);
$this->execute("XA COMMIT '$xid'"); $this->linkID->exec("XA COMMIT '$xid'");
} }
/** /**
@ -224,6 +224,6 @@ class Mysql extends Connection
public function rollbackXa($xid) public function rollbackXa($xid)
{ {
$this->initConnect(true); $this->initConnect(true);
$this->execute("XA ROLLBACK '$xid'"); $this->linkID->exec("XA ROLLBACK '$xid'");
} }
} }

@ -27,7 +27,7 @@ use think\Facade;
* @method void import(array $rules, string $type = '*') static 导入配置文件的路由规则 * @method void import(array $rules, string $type = '*') static 导入配置文件的路由规则
* @method \think\route\RuleItem rule(string $rule, mixed $route, string $method = '*', array $option = [], array $pattern = []) static 注册路由规则 * @method \think\route\RuleItem rule(string $rule, mixed $route, string $method = '*', array $option = [], array $pattern = []) static 注册路由规则
* @method void rules(array $rules, string $method = '*', array $option = [], array $pattern = []) static 批量注册路由规则 * @method void rules(array $rules, string $method = '*', array $option = [], array $pattern = []) static 批量注册路由规则
* @method \think\route\RuleGroup group(string|array $name, mixed $route, string $method = '*', array $option = [], array $pattern = []) static 注册路由分组 * @method \think\route\RuleGroup group(string|array $name, array|\Closure $route, array $method = '*', array $option = [], array $pattern = []) static 注册路由分组
* @method \think\route\RuleItem any(string $rule, mixed $route, array $option = [], array $pattern = []) static 注册路由 * @method \think\route\RuleItem any(string $rule, mixed $route, array $option = [], array $pattern = []) static 注册路由
* @method \think\route\RuleItem get(string $rule, mixed $route, array $option = [], array $pattern = []) static 注册路由 * @method \think\route\RuleItem get(string $rule, mixed $route, array $option = [], array $pattern = []) static 注册路由
* @method \think\route\RuleItem post(string $rule, mixed $route, array $option = [], array $pattern = []) static 注册路由 * @method \think\route\RuleItem post(string $rule, mixed $route, array $option = [], array $pattern = []) static 注册路由

@ -32,6 +32,22 @@ class Collection extends BaseCollection
return $this; return $this;
} }
/**
* 绑定(一对一)关联属性到当前模型
* @access protected
* @param string $relation 关联名称
* @param array $attrs 绑定属性
* @return $this
*/
public function bindAttr($relation, array $attrs = [])
{
$this->each(function (Model $model) use ($relation, $attrs) {
$model->bindAttr($relation, $attrs);
});
return $this;
}
/** /**
* 设置需要隐藏的输出属性 * 设置需要隐藏的输出属性
* @access public * @access public

@ -87,7 +87,7 @@ trait Conversion
if (isset($this->data[$key])) { if (isset($this->data[$key])) {
throw new Exception('bind attr has exists:' . $key); throw new Exception('bind attr has exists:' . $key);
} else { } else {
$this->data[$key] = $model->$attr; $this->data[$key] = $model->getAttr($attr);
} }
} }
} }

@ -13,6 +13,7 @@ namespace think\model\concern;
use think\Collection; use think\Collection;
use think\db\Query; use think\db\Query;
use think\Exception;
use think\Loader; use think\Loader;
use think\Model; use think\Model;
use think\model\Relation; use think\model\Relation;
@ -115,6 +116,32 @@ trait RelationShip
return $this; return $this;
} }
/**
* 绑定(一对一)关联属性到当前模型
* @access protected
* @param string $relation 关联名称
* @param array $attrs 绑定属性
* @return $this
* @throws Exception
*/
public function bindAttr($relation, array $attrs = [])
{
$relation = $this->getRelation($relation);
foreach ($attrs as $key => $attr) {
$key = is_numeric($key) ? $attr : $key;
$value = $this->getOrigin($key);
if (!is_null($value)) {
throw new Exception('bind attr has exists:' . $key);
}
$this->setAttr($key, $relation ? $relation->getAttr($attr) : null);
}
return $this;
}
/** /**
* 关联数据写入 * 关联数据写入
* @access public * @access public

@ -139,6 +139,10 @@ trait SoftDelete
*/ */
public static function destroy($data, $force = false) public static function destroy($data, $force = false)
{ {
// 传入空不执行删除但是0可以删除
if (empty($data) && 0 !== $data) {
return false;
}
// 包含软删除数据 // 包含软删除数据
$query = (new static())->db(false); $query = (new static())->db(false);

@ -19,6 +19,7 @@ use think\Loader;
use think\Model; use think\Model;
use think\model\Pivot; use think\model\Pivot;
use think\model\Relation; use think\model\Relation;
use think\Paginator;
class BelongsToMany extends Relation class BelongsToMany extends Relation
{ {
@ -582,7 +583,7 @@ class BelongsToMany extends Relation
* 判断是否存在关联数据 * 判断是否存在关联数据
* @access public * @access public
* @param mixed $data 数据 可以使用关联模型对象 或者 关联对象的主键 * @param mixed $data 数据 可以使用关联模型对象 或者 关联对象的主键
* @return Pivot * @return Pivot|false
* @throws Exception * @throws Exception
*/ */
public function attached($data) public function attached($data)

@ -81,7 +81,7 @@ class HasManyThrough extends Relation
*/ */
public function has($operator = '>=', $count = 1, $id = '*', $joinType = 'INNER') public function has($operator = '>=', $count = 1, $id = '*', $joinType = 'INNER')
{ {
$model = App::parseName(App::classBaseName($this->parent)); $model = Loader::parseName(basename(str_replace('\\', '/', get_class($this->parent))));
$throughTable = $this->through->getTable(); $throughTable = $this->through->getTable();
$pk = $this->throughPk; $pk = $this->throughPk;
$throughKey = $this->throughKey; $throughKey = $this->throughKey;
@ -114,7 +114,7 @@ class HasManyThrough extends Relation
*/ */
public function hasWhere($where = [], $fields = null) public function hasWhere($where = [], $fields = null)
{ {
$model = App::parseName(App::classBaseName($this->parent)); $model = Loader::parseName(basename(str_replace('\\', '/', get_class($this->parent))));
$throughTable = $this->through->getTable(); $throughTable = $this->through->getTable();
$pk = $this->throughPk; $pk = $this->throughPk;
$throughKey = $this->throughKey; $throughKey = $this->throughKey;
@ -169,7 +169,7 @@ class HasManyThrough extends Relation
], $foreignKey, $relation, $subRelation, $closure); ], $foreignKey, $relation, $subRelation, $closure);
// 关联属性名 // 关联属性名
$attr = App::parseName($relation); $attr = Loader::parseName($relation);
// 关联数据封装 // 关联数据封装
foreach ($resultSet as $result) { foreach ($resultSet as $result) {
@ -218,7 +218,7 @@ class HasManyThrough extends Relation
$relationModel->setParent(clone $result); $relationModel->setParent(clone $result);
} }
$result->setRelation(App::parseName($relation), $this->resultSetBuild($data[$pk])); $result->setRelation(Loader::parseName($relation), $this->resultSetBuild($data[$pk]));
} }
/** /**
@ -279,7 +279,7 @@ class HasManyThrough extends Relation
} }
} }
$alias = App::parseName(App::classBaseName($this->model)); $alias = Loader::parseName(basename(str_replace('\\', '/', $this->model)));
$throughTable = $this->through->getTable(); $throughTable = $this->through->getTable();
$pk = $this->throughPk; $pk = $this->throughPk;
$throughKey = $this->throughKey; $throughKey = $this->throughKey;
@ -315,7 +315,7 @@ class HasManyThrough extends Relation
} }
} }
$alias = App::parseName(App::classBaseName($this->model)); $alias = Loader::parseName(basename(str_replace('\\', '/', $this->model)));
$throughTable = $this->through->getTable(); $throughTable = $this->through->getTable();
$pk = $this->throughPk; $pk = $this->throughPk;
$throughKey = $this->throughKey; $throughKey = $this->throughKey;

@ -144,7 +144,7 @@ class HasOne extends OneToOne
return $this->parent->db() return $this->parent->db()
->alias($model) ->alias($model)
->whereExists(function ($query) use ($table, $model, $relation, $localKey, $foreignKey) { ->whereExists(function ($query) use ($table, $model, $relation, $localKey, $foreignKey, $softDelete) {
$query->table([$table => $relation]) $query->table([$table => $relation])
->field($relation . '.' . $foreignKey) ->field($relation . '.' . $foreignKey)
->whereExp($model . '.' . $localKey, '=' . $relation . '.' . $foreignKey) ->whereExp($model . '.' . $localKey, '=' . $relation . '.' . $foreignKey)

@ -186,8 +186,16 @@ class MorphTo extends Relation
foreach ($range as $key => $val) { foreach ($range as $key => $val) {
// 多态类型映射 // 多态类型映射
$model = $this->parseModel($key); $model = $this->parseModel($key);
$obj = new $model; $obj = (new $model)->db();
$pk = $obj->getPk(); $pk = $obj->getPk();
// 预载入关联查询 支持嵌套预载入
if ($closure instanceof \Closure) {
$closure($obj);
if ($field = $obj->getOptions('with_field')) {
$obj->field($field)->removeOption('with_field');
}
}
$list = $obj->all($val, $subRelation); $list = $obj->all($val, $subRelation);
$data = []; $data = [];

@ -282,8 +282,8 @@ abstract class OneToOne extends Relation
/** /**
* 绑定关联属性到父模型 * 绑定关联属性到父模型
* @access protected * @access protected
* @param Model $model 关联模型对象 * @param Model $result 关联模型对象
* @param Model $result 父模型对象 * @param Model $model 父模型对象
* @return void * @return void
* @throws Exception * @throws Exception
*/ */
@ -291,11 +291,13 @@ abstract class OneToOne extends Relation
{ {
foreach ($this->bindAttr as $key => $attr) { foreach ($this->bindAttr as $key => $attr) {
$key = is_numeric($key) ? $attr : $key; $key = is_numeric($key) ? $attr : $key;
if (isset($result->$key)) { $value = $result->getOrigin($key);
if (!is_null($value)) {
throw new Exception('bind attr has exists:' . $key); throw new Exception('bind attr has exists:' . $key);
} else {
$result->setAttr($key, $model ? $model->$attr : null);
} }
$result->setAttr($key, $model ? $model->getAttr($attr) : null);
} }
} }

@ -13,6 +13,7 @@ namespace think\route;
use think\Container; use think\Container;
use think\Loader; use think\Loader;
use think\Request;
use think\Route; use think\Route;
use think\route\dispatch\Callback as CallbackDispatch; use think\route\dispatch\Callback as CallbackDispatch;
use think\route\dispatch\Controller as ControllerDispatch; use think\route\dispatch\Controller as ControllerDispatch;

@ -1,5 +1,15 @@
# ChangeLog - Aliyun OSS SDK for PHP # ChangeLog - Aliyun OSS SDK for PHP
## v2.4.2 / 2021-06-04
* Compatible with PHP8.
* Fixed: compatible with PHP5.4.
* Fixed: the signature is incorrect in some scenarios
* Update: change $requestUrl from a member variable to a local variable.
## v2.4.1 / 2020-09-29
* Fixed: the getBucketPolicy bug.
## v2.4.0 / 2020-08-31 ## v2.4.0 / 2020-08-31
* Added: disable Expect: 100-continue * Added: disable Expect: 100-continue

@ -14,8 +14,8 @@
"php":">=5.3" "php":">=5.3"
}, },
"require-dev" : { "require-dev" : {
"phpunit/phpunit": "~4.0", "phpunit/phpunit": "*",
"satooshi/php-coveralls": "~1.0" "satooshi/php-coveralls": "*"
}, },
"minimum-stability": "stable", "minimum-stability": "stable",
"autoload": { "autoload": {

@ -439,7 +439,8 @@ BBB;
$sub_object = $xml->addChild('Object'); $sub_object = $xml->addChild('Object');
$key = OssUtil::sReplace($object->getKey()); $key = OssUtil::sReplace($object->getKey());
$sub_object->addChild('Key', $key); $sub_object->addChild('Key', $key);
if (!empty($object->getVersionId())) { $versionId = $object->getVersionId();
if (!empty($versionId)) {
$sub_object->addChild('VersionId', $object->getVersionId()); $sub_object->addChild('VersionId', $object->getVersionId());
} }
} }

@ -777,7 +777,7 @@ class RequestCore
* data stored in the `curl_handle` and `response` properties unless replacement data is passed in via * data stored in the `curl_handle` and `response` properties unless replacement data is passed in via
* parameters. * parameters.
* *
* @param resource $curl_handle (Optional) The reference to the already executed cURL request. * @param resource|\CurlHandle|null|false $curl_handle (Optional) The reference to the already executed cURL request. Receive CurlHandle instance from PHP8.0
* @param string $response (Optional) The actual response content itself that needs to be parsed. * @param string $response (Optional) The actual response content itself that needs to be parsed.
* @return ResponseCore A <ResponseCore> object containing a parsed HTTP response. * @return ResponseCore A <ResponseCore> object containing a parsed HTTP response.
*/ */
@ -788,8 +788,8 @@ class RequestCore
$this->response = $response; $this->response = $response;
} }
// As long as this came back as a valid resource... // As long as this came back as a valid resource or CurlHandle instance...
if (is_resource($curl_handle)) { if (is_resource($curl_handle) || (is_object($curl_handle) && get_class($curl_handle) === 'CurlHandle')) {
// Determine what's what. // Determine what's what.
$header_size = curl_getinfo($curl_handle, CURLINFO_HEADER_SIZE); $header_size = curl_getinfo($curl_handle, CURLINFO_HEADER_SIZE);
$this->response_headers = substr($this->response, 0, $header_size); $this->response_headers = substr($this->response, 0, $header_size);
@ -844,12 +844,13 @@ class RequestCore
$this->response = curl_exec($curl_handle); $this->response = curl_exec($curl_handle);
if ($this->response === false) { if ($this->response === false) {
throw new RequestCore_Exception('cURL resource: ' . (string)$curl_handle . '; cURL error: ' . curl_error($curl_handle) . ' (' . curl_errno($curl_handle) . ')'); throw new RequestCore_Exception('cURL error: ' . curl_error($curl_handle) . ' (' . curl_errno($curl_handle) . ')');
} }
$parsed_response = $this->process_response($curl_handle, $this->response); $parsed_response = $this->process_response($curl_handle, $this->response);
curl_close($curl_handle); curl_close($curl_handle);
unset($curl_handle);
if ($parse) { if ($parse) {
return $parsed_response; return $parsed_response;

@ -1132,7 +1132,8 @@ class OssClient
$options[self::OSS_OBJECT] = '/'; $options[self::OSS_OBJECT] = '/';
$options[self::OSS_SUB_RESOURCE] = 'policy'; $options[self::OSS_SUB_RESOURCE] = 'policy';
$response = $this->auth($options); $response = $this->auth($options);
return $response->body; $result = new BodyResult($response);
return $result->getData();
} }
/** /**
@ -2842,10 +2843,10 @@ class OssClient
$non_signable_resource .= $conjunction . $query_string; $non_signable_resource .= $conjunction . $query_string;
$conjunction = '&'; $conjunction = '&';
} }
$this->requestUrl = $scheme . $hostname . $resource_uri . $signable_query_string . $non_signable_resource; $requestUrl = $scheme . $hostname . $resource_uri . $signable_query_string . $non_signable_resource;
//Creates the request //Creates the request
$request = new RequestCore($this->requestUrl, $this->requestProxy); $request = new RequestCore($requestUrl, $this->requestProxy);
$request->set_useragent($this->generateUserAgent()); $request->set_useragent($this->generateUserAgent());
// Streaming uploads // Streaming uploads
if (isset($options[self::OSS_FILE_UPLOAD])) { if (isset($options[self::OSS_FILE_UPLOAD])) {
@ -2942,10 +2943,10 @@ class OssClient
$request->add_header('Authorization', 'OSS ' . $this->accessKeyId . ':' . $signature); $request->add_header('Authorization', 'OSS ' . $this->accessKeyId . ':' . $signature);
if (isset($options[self::OSS_PREAUTH]) && (integer)$options[self::OSS_PREAUTH] > 0) { if (isset($options[self::OSS_PREAUTH]) && (integer)$options[self::OSS_PREAUTH] > 0) {
$signed_url = $this->requestUrl . $conjunction . self::OSS_URL_ACCESS_KEY_ID . '=' . rawurlencode($this->accessKeyId) . '&' . self::OSS_URL_EXPIRES . '=' . $options[self::OSS_PREAUTH] . '&' . self::OSS_URL_SIGNATURE . '=' . rawurlencode($signature); $signed_url = $requestUrl . $conjunction . self::OSS_URL_ACCESS_KEY_ID . '=' . rawurlencode($this->accessKeyId) . '&' . self::OSS_URL_EXPIRES . '=' . $options[self::OSS_PREAUTH] . '&' . self::OSS_URL_SIGNATURE . '=' . rawurlencode($signature);
return $signed_url; return $signed_url;
} elseif (isset($options[self::OSS_PREAUTH])) { } elseif (isset($options[self::OSS_PREAUTH])) {
return $this->requestUrl; return $requestUrl;
} }
if ($this->timeout !== 0) { if ($this->timeout !== 0) {
@ -2961,7 +2962,7 @@ class OssClient
throw(new OssException('RequestCoreException: ' . $e->getMessage())); throw(new OssException('RequestCoreException: ' . $e->getMessage()));
} }
$response_header = $request->get_response_header(); $response_header = $request->get_response_header();
$response_header['oss-request-url'] = $this->requestUrl; $response_header['oss-request-url'] = $requestUrl;
$response_header['oss-redirects'] = $this->redirects; $response_header['oss-redirects'] = $this->redirects;
$response_header['oss-stringtosign'] = $string_to_sign; $response_header['oss-stringtosign'] = $string_to_sign;
$response_header['oss-requestheaders'] = $request->request_headers; $response_header['oss-requestheaders'] = $request->request_headers;
@ -3256,7 +3257,12 @@ class OssClient
$queryStringSorted = substr($queryStringSorted, 0, -1); $queryStringSorted = substr($queryStringSorted, 0, -1);
return $explodeResult[0] . '?' . $queryStringSorted; $result = '';
for ($i = 0; $i < $index -1; $i++)
{
$result .= $explodeResult[$i] . '?';
}
return $result . $queryStringSorted;
} }
/** /**
@ -3502,8 +3508,8 @@ class OssClient
); );
// OssClient version information // OssClient version information
const OSS_NAME = "aliyun-sdk-php"; const OSS_NAME = "aliyun-sdk-php";
const OSS_VERSION = "2.4.0"; const OSS_VERSION = "2.4.2";
const OSS_BUILD = "20200831"; const OSS_BUILD = "20210604";
const OSS_AUTHOR = ""; const OSS_AUTHOR = "";
const OSS_OPTIONS_ORIGIN = 'Origin'; const OSS_OPTIONS_ORIGIN = 'Origin';
const OSS_OPTIONS_REQUEST_METHOD = 'Access-Control-Request-Method'; const OSS_OPTIONS_REQUEST_METHOD = 'Access-Control-Request-Method';
@ -3516,7 +3522,6 @@ class OssClient
// user's domain type. It could be one of the four: OSS_HOST_TYPE_NORMAL, OSS_HOST_TYPE_IP, OSS_HOST_TYPE_SPECIAL, OSS_HOST_TYPE_CNAME // user's domain type. It could be one of the four: OSS_HOST_TYPE_NORMAL, OSS_HOST_TYPE_IP, OSS_HOST_TYPE_SPECIAL, OSS_HOST_TYPE_CNAME
private $hostType = self::OSS_HOST_TYPE_NORMAL; private $hostType = self::OSS_HOST_TYPE_NORMAL;
private $requestUrl;
private $requestProxy = null; private $requestProxy = null;
private $accessKeyId; private $accessKeyId;
private $accessKeySecret; private $accessKeySecret;

@ -6,7 +6,7 @@ use OSS\Result\AclResult;
use OSS\Core\OssException; use OSS\Core\OssException;
use OSS\Http\ResponseCore; use OSS\Http\ResponseCore;
class AclResultTest extends \PHPUnit_Framework_TestCase class AclResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB

@ -6,7 +6,7 @@ use OSS\Http\ResponseCore;
use OSS\Result\BodyResult; use OSS\Result\BodyResult;
class BodyResultTest extends \PHPUnit_Framework_TestCase class BodyResultTest extends \PHPUnit\Framework\TestCase
{ {
public function testParseValid200() public function testParseValid200()
{ {

@ -6,19 +6,19 @@ require_once __DIR__ . '/Common.php';
use OSS\Model\CnameConfig; use OSS\Model\CnameConfig;
class BucketCnameTest extends \PHPUnit_Framework_TestCase class BucketCnameTest extends \PHPUnit\Framework\TestCase
{ {
private $bucketName; private $bucketName;
private $client; private $client;
public function setUp() protected function setUp(): void
{ {
$this->client = Common::getOssClient(); $this->client = Common::getOssClient();
$this->bucketName = 'php-sdk-test-bucket-' . strval(rand(0, 10000)); $this->bucketName = 'php-sdk-test-bucket-' . strval(rand(0, 10000));
$this->client->createBucket($this->bucketName); $this->client->createBucket($this->bucketName);
} }
public function tearDown() protected function tearDown(): void
{ {
$this->client->deleteBucket($this->bucketName); $this->client->deleteBucket($this->bucketName);
} }

@ -8,7 +8,7 @@ use OSS\Model\BucketInfo;
* Class BucketInfoTest * Class BucketInfoTest
* @package OSS\Tests * @package OSS\Tests
*/ */
class BucketInfoTest extends \PHPUnit_Framework_TestCase class BucketInfoTest extends \PHPUnit\Framework\TestCase
{ {
public function testConstruct() public function testConstruct()
{ {

@ -7,12 +7,12 @@ require_once __DIR__ . '/Common.php';
use OSS\Model\LiveChannelConfig; use OSS\Model\LiveChannelConfig;
use OSS\Core\OssException; use OSS\Core\OssException;
class BucketLiveChannelTest extends \PHPUnit_Framework_TestCase class BucketLiveChannelTest extends \PHPUnit\Framework\TestCase
{ {
private $bucketName; private $bucketName;
private $client; private $client;
public function setUp() protected function setUp(): void
{ {
$this->client = Common::getOssClient(); $this->client = Common::getOssClient();
$this->bucketName = 'php-sdk-test-rtmp-bucket-name-' . strval(rand(0, 10000)); $this->bucketName = 'php-sdk-test-rtmp-bucket-name-' . strval(rand(0, 10000));
@ -20,7 +20,7 @@ class BucketLiveChannelTest extends \PHPUnit_Framework_TestCase
Common::waitMetaSync(); Common::waitMetaSync();
} }
public function tearDown() protected function tearDown(): void
{ {
////to delete created bucket ////to delete created bucket
//1. delele live channel //1. delele live channel

@ -289,7 +289,7 @@ class CallbackTest extends TestOssClientBase
} }
} }
public function setUp() protected function setUp(): void
{ {
parent::setUp(); parent::setUp();
} }

@ -6,7 +6,7 @@ namespace OSS\Tests;
use OSS\Model\CnameConfig; use OSS\Model\CnameConfig;
use OSS\Core\OssException; use OSS\Core\OssException;
class CnameConfigTest extends \PHPUnit_Framework_TestCase class CnameConfigTest extends \PHPUnit\Framework\TestCase
{ {
private $xml1 = <<<BBBB private $xml1 = <<<BBBB
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>

@ -6,7 +6,7 @@ use OSS\Core\OssException;
use OSS\Http\ResponseCore; use OSS\Http\ResponseCore;
use OSS\Result\CopyObjectResult; use OSS\Result\CopyObjectResult;
class CopyObjectResultTest extends \PHPUnit_Framework_TestCase class CopyObjectResultTest extends \PHPUnit\Framework\TestCase
{ {
private $body = <<<BBBB private $body = <<<BBBB
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
@ -45,7 +45,7 @@ BBBB;
new CopyObjectResult($response); new CopyObjectResult($response);
$this->assertFalse(true); $this->assertFalse(true);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertFalse(false);
} }
} }

@ -7,7 +7,7 @@ use OSS\Model\CorsConfig;
use OSS\Model\CorsRule; use OSS\Model\CorsRule;
use OSS\Core\OssException; use OSS\Core\OssException;
class CorsConfigTest extends \PHPUnit_Framework_TestCase class CorsConfigTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>

@ -6,7 +6,7 @@ use OSS\Result\DeleteObjectVersionsResult;
use OSS\Core\OssException; use OSS\Core\OssException;
use OSS\Http\ResponseCore; use OSS\Http\ResponseCore;
class DeleteObjectVersionsResultTest extends \PHPUnit_Framework_TestCase class DeleteObjectVersionsResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB

@ -7,7 +7,7 @@ use OSS\Result\ExistResult;
use OSS\Http\ResponseCore; use OSS\Http\ResponseCore;
use OSS\Core\OssException; use OSS\Core\OssException;
class ExistResultTest extends \PHPUnit_Framework_TestCase class ExistResultTest extends \PHPUnit\Framework\TestCase
{ {
public function testParseValid200() public function testParseValid200()
{ {
@ -32,7 +32,7 @@ class ExistResultTest extends \PHPUnit_Framework_TestCase
new ExistResult($response); new ExistResult($response);
$this->assertTrue(false); $this->assertTrue(false);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertTrue(true);
} }
} }
} }

@ -6,7 +6,7 @@ use OSS\Result\GetBucketEncryptionResult;
use OSS\Core\OssException; use OSS\Core\OssException;
use OSS\Http\ResponseCore; use OSS\Http\ResponseCore;
class GetBucketEncryptionResultTest extends \PHPUnit_Framework_TestCase class GetBucketEncryptionResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB

@ -6,7 +6,7 @@ use OSS\Result\GetBucketRequestPaymentResult;
use OSS\Core\OssException; use OSS\Core\OssException;
use OSS\Http\ResponseCore; use OSS\Http\ResponseCore;
class GetBucketRequestPaymentResultTest extends \PHPUnit_Framework_TestCase class GetBucketRequestPaymentResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB

@ -6,7 +6,7 @@ use OSS\Result\GetBucketStatResult;
use OSS\Core\OssException; use OSS\Core\OssException;
use OSS\Http\ResponseCore; use OSS\Http\ResponseCore;
class GetBucketStatResultTest extends \PHPUnit_Framework_TestCase class GetBucketStatResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB

@ -6,7 +6,7 @@ use OSS\Result\GetBucketTagsResult;
use OSS\Core\OssException; use OSS\Core\OssException;
use OSS\Http\ResponseCore; use OSS\Http\ResponseCore;
class GetBucketTagsResultTest extends \PHPUnit_Framework_TestCase class GetBucketTagsResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB
<?xml version="1.0" ?> <?xml version="1.0" ?>

@ -6,7 +6,7 @@ use OSS\Result\GetBucketWormResult;
use OSS\Core\OssException; use OSS\Core\OssException;
use OSS\Http\ResponseCore; use OSS\Http\ResponseCore;
class GetBucketWormResultTest extends \PHPUnit_Framework_TestCase class GetBucketWormResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB

@ -7,7 +7,7 @@ use OSS\Core\OssException;
use OSS\Result\GetCorsResult; use OSS\Result\GetCorsResult;
use OSS\Http\ResponseCore; use OSS\Http\ResponseCore;
class GetCorsResultTest extends \PHPUnit_Framework_TestCase class GetCorsResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
@ -58,10 +58,10 @@ BBBB;
{ {
$response = new ResponseCore(array(), $this->validXml, 300); $response = new ResponseCore(array(), $this->validXml, 300);
try { try {
new GetCorsResult($response); $result = new GetCorsResult($response);
$this->assertTrue(false); $this->assertTrue(false);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertTrue(true);
} }
} }
} }

@ -8,7 +8,7 @@ use OSS\Core\OssException;
use OSS\Model\LifecycleConfig; use OSS\Model\LifecycleConfig;
use OSS\Result\GetLifecycleResult; use OSS\Result\GetLifecycleResult;
class GetLifecycleResultTest extends \PHPUnit_Framework_TestCase class GetLifecycleResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
@ -49,10 +49,10 @@ BBBB;
{ {
$response = new ResponseCore(array(), $this->validXml, 300); $response = new ResponseCore(array(), $this->validXml, 300);
try { try {
new GetLifecycleResult($response); $result = new GetLifecycleResult($response);
$this->assertTrue(false); $this->assertTrue(false);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertTrue(true);
} }
} }

@ -8,7 +8,7 @@ use OSS\Http\ResponseCore;
use OSS\Core\OssException; use OSS\Core\OssException;
class GetLoggingResultTest extends \PHPUnit_Framework_TestCase class GetLoggingResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
@ -42,10 +42,10 @@ BBBB;
{ {
$response = new ResponseCore(array(), $this->validXml, 300); $response = new ResponseCore(array(), $this->validXml, 300);
try { try {
new GetLoggingResult($response); $result = new GetLoggingResult($response);
$this->assertTrue(false); $this->assertTrue(false);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertTrue(true);
} }
} }
} }

@ -7,7 +7,7 @@ use OSS\Http\ResponseCore;
use OSS\Core\OssException; use OSS\Core\OssException;
class GetRefererResultTest extends \PHPUnit_Framework_TestCase class GetRefererResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
@ -42,10 +42,10 @@ BBBB;
{ {
$response = new ResponseCore(array(), $this->validXml, 300); $response = new ResponseCore(array(), $this->validXml, 300);
try { try {
new GetRefererResult($response); $result = new GetRefererResult($response);
$this->assertTrue(false); $this->assertTrue(false);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertTrue(true);
} }
} }
} }

@ -7,7 +7,7 @@ use OSS\Result\GetWebsiteResult;
use OSS\Http\ResponseCore; use OSS\Http\ResponseCore;
use OSS\Core\OssException; use OSS\Core\OssException;
class GetWebsiteResultTest extends \PHPUnit_Framework_TestCase class GetWebsiteResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
@ -41,10 +41,10 @@ BBBB;
{ {
$response = new ResponseCore(array(), $this->validXml, 300); $response = new ResponseCore(array(), $this->validXml, 300);
try { try {
new GetWebsiteResult($response); $result = new GetWebsiteResult($response);
$this->assertTrue(false); $this->assertTrue(false);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertTrue(true);
} }
} }
} }

@ -9,7 +9,7 @@ use OSS\Http\ResponseCore;
* Class HeaderResultTest * Class HeaderResultTest
* @package OSS\Tests * @package OSS\Tests
*/ */
class HeaderResultTest extends \PHPUnit_Framework_TestCase class HeaderResultTest extends \PHPUnit\Framework\TestCase
{ {
public function testGetHeader() public function testGetHeader()
{ {

@ -7,7 +7,7 @@ use OSS\Http\ResponseCore;
use OSS\Http\RequestCore_Exception; use OSS\Http\RequestCore_Exception;
use Symfony\Component\Config\Definition\Exception\Exception; use Symfony\Component\Config\Definition\Exception\Exception;
class HttpTest extends \PHPUnit_Framework_TestCase class HttpTest extends \PHPUnit\Framework\TestCase
{ {
public function testResponseCore() public function testResponseCore()
@ -33,7 +33,7 @@ class HttpTest extends \PHPUnit_Framework_TestCase
$httpResponse = $httpCore->send_request(); $httpResponse = $httpCore->send_request();
$this->assertTrue(false); $this->assertTrue(false);
} catch (RequestCore_Exception $e) { } catch (RequestCore_Exception $e) {
$this->assertTrue(true);
} }
} }

@ -7,7 +7,7 @@ use OSS\Core\OssException;
use OSS\Result\InitiateMultipartUploadResult; use OSS\Result\InitiateMultipartUploadResult;
use OSS\Http\ResponseCore; use OSS\Http\ResponseCore;
class InitiateMultipartUploadResultTest extends \PHPUnit_Framework_TestCase class InitiateMultipartUploadResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
@ -41,7 +41,7 @@ BBBB;
$result = new InitiateMultipartUploadResult($response); $result = new InitiateMultipartUploadResult($response);
$this->assertTrue(false); $this->assertTrue(false);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertTrue(true);
} }
} }
} }

@ -7,7 +7,7 @@ use OSS\Model\LifecycleAction;
use OSS\Model\LifecycleConfig; use OSS\Model\LifecycleConfig;
use OSS\Model\LifecycleRule; use OSS\Model\LifecycleRule;
class LifecycleConfigTest extends \PHPUnit_Framework_TestCase class LifecycleConfigTest extends \PHPUnit\Framework\TestCase
{ {
private $validLifecycle = <<<BBBB private $validLifecycle = <<<BBBB

@ -6,7 +6,7 @@ use OSS\Core\OssException;
use OSS\Http\ResponseCore; use OSS\Http\ResponseCore;
use OSS\Result\ListBucketsResult; use OSS\Result\ListBucketsResult;
class ListBucketsResultTest extends \PHPUnit_Framework_TestCase class ListBucketsResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>

@ -9,7 +9,7 @@ use OSS\Http\ResponseCore;
* Class ListMultipartUploadResultTest * Class ListMultipartUploadResultTest
* @package OSS\Tests * @package OSS\Tests
*/ */
class ListMultipartUploadResultTest extends \PHPUnit_Framework_TestCase class ListMultipartUploadResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>

@ -6,7 +6,7 @@ use OSS\Result\ListObjectVersionsResult;
use OSS\Core\OssException; use OSS\Core\OssException;
use OSS\Http\ResponseCore; use OSS\Http\ResponseCore;
class ListObjectVersionsResultTest extends \PHPUnit_Framework_TestCase class ListObjectVersionsResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB
@ -202,6 +202,7 @@ class ListObjectVersionsResultTest extends \PHPUnit_Framework_TestCase
$response = new ResponseCore(array(), "", 200); $response = new ResponseCore(array(), "", 200);
$result = new ListObjectVersionsResult($response); $result = new ListObjectVersionsResult($response);
$list = $result->getData(); $list = $result->getData();
$this->assertTrue(true);
} }
public function testParseInvalidXml() public function testParseInvalidXml()
@ -209,5 +210,6 @@ class ListObjectVersionsResultTest extends \PHPUnit_Framework_TestCase
$response = new ResponseCore(array(), $this->invalidXml, 200); $response = new ResponseCore(array(), $this->invalidXml, 200);
$result = new ListObjectVersionsResult($response); $result = new ListObjectVersionsResult($response);
$stat = $result->getData(); $stat = $result->getData();
$this->assertTrue(true);
} }
} }

@ -6,7 +6,7 @@ namespace OSS\Tests;
use OSS\Result\ListObjectsResult; use OSS\Result\ListObjectsResult;
use OSS\Http\ResponseCore; use OSS\Http\ResponseCore;
class ListObjectsResultTest extends \PHPUnit_Framework_TestCase class ListObjectsResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml1 = <<<BBBB private $validXml1 = <<<BBBB

@ -9,7 +9,7 @@ use OSS\Http\ResponseCore;
* Class ListPartsResultTest * Class ListPartsResultTest
* @package OSS\Tests * @package OSS\Tests
*/ */
class ListPartsResultTest extends \PHPUnit_Framework_TestCase class ListPartsResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>

@ -12,7 +12,7 @@ use OSS\Model\GetLiveChannelStatus;
use OSS\Model\GetLiveChannelHistory; use OSS\Model\GetLiveChannelHistory;
use OSS\Model\LiveChannelHistory; use OSS\Model\LiveChannelHistory;
class LiveChannelXmlTest extends \PHPUnit_Framework_TestCase class LiveChannelXmlTest extends \PHPUnit\Framework\TestCase
{ {
private $config = <<<BBBB private $config = <<<BBBB
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>

@ -4,7 +4,7 @@ namespace OSS\Tests;
use OSS\Model\LoggingConfig; use OSS\Model\LoggingConfig;
class LoggingConfigTest extends \PHPUnit_Framework_TestCase class LoggingConfigTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>

@ -4,7 +4,7 @@ namespace OSS\Tests;
use OSS\Core\MimeTypes; use OSS\Core\MimeTypes;
class MimeTypesTest extends \PHPUnit_Framework_TestCase class MimeTypesTest extends \PHPUnit\Framework\TestCase
{ {
public function testGetMimeType() public function testGetMimeType()
{ {

@ -29,9 +29,10 @@ class OssClientBucketPolicyTest extends TestOssClientBase
try { try {
$this->ossClient->deleteBucketPolicy($this->bucket); $this->ossClient->deleteBucketPolicy($this->bucket);
$policy = $this->ossClient->getBucketPolicy($this->bucket); $policy = $this->ossClient->getBucketPolicy($this->bucket);
$this->assertTrue(false);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertTrue(true); $this->assertTrue(true);
$this->assertEquals("NoSuchBucketPolicy", $e->getCode()); $this->assertEquals("NoSuchBucketPolicy", $e->getErrorCode());
} }
try { try {

@ -98,7 +98,7 @@ class OssClientBucketTest extends TestOssClientBase
} }
} }
public function setUp() protected function setUp(): void
{ {
parent::setUp(); parent::setUp();
@ -125,7 +125,7 @@ class OssClientBucketTest extends TestOssClientBase
$this->ossClient->createBucket($this->standardBucket, OssClient::OSS_ACL_TYPE_PRIVATE, $options); $this->ossClient->createBucket($this->standardBucket, OssClient::OSS_ACL_TYPE_PRIVATE, $options);
} }
public function tearDown() protected function tearDown(): void
{ {
parent::tearDown(); parent::tearDown();

@ -14,7 +14,7 @@ class OssClinetImageTest extends TestOssClientBase
private $object; private $object;
private $download_file; private $download_file;
public function setUp() protected function setUp(): void
{ {
parent::setUp(); parent::setUp();
@ -28,7 +28,7 @@ class OssClinetImageTest extends TestOssClientBase
$this->client->uploadFile($this->bucketName, $this->object, $this->local_file); $this->client->uploadFile($this->bucketName, $this->object, $this->local_file);
} }
public function tearDown() protected function tearDown(): void
{ {
parent::tearDown(); parent::tearDown();
unlink($this->download_file); unlink($this->download_file);

@ -145,7 +145,7 @@ class OssClientListObjectsTest extends TestOssClientBase
$this->assertEquals("true", $listObjectInfo->getIsTruncated()); $this->assertEquals("true", $listObjectInfo->getIsTruncated());
} }
public function setUp() protected function setUp(): void
{ {
parent::setUp(); parent::setUp();
//folder //folder
@ -177,7 +177,7 @@ class OssClientListObjectsTest extends TestOssClientBase
} }
public function tearDown() protected function tearDown(): void
{ {
parent::tearDown(); parent::tearDown();
} }

@ -330,6 +330,7 @@ class OssClientMultipartUploadTest extends TestOssClientBase
try { try {
$this->ossClient->multiuploadFile($this->bucket, $object, $file, $options); $this->ossClient->multiuploadFile($this->bucket, $object, $file, $options);
$this->assertFalse(false);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertFalse(true); $this->assertFalse(true);
} }
@ -343,6 +344,7 @@ class OssClientMultipartUploadTest extends TestOssClientBase
try { try {
$this->ossClient->multiuploadFile($this->bucket, $object, $file, $options); $this->ossClient->multiuploadFile($this->bucket, $object, $file, $options);
$this->assertFalse(false);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertFalse(true); $this->assertFalse(true);
} }
@ -385,6 +387,7 @@ class OssClientMultipartUploadTest extends TestOssClientBase
try { try {
$this->ossClient->multiuploadFile($this->bucket, $object, $file); $this->ossClient->multiuploadFile($this->bucket, $object, $file);
$this->assertTrue(false);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertTrue(true); $this->assertTrue(true);
if (strpos($e, "parameter invalid, file is empty") == false) if (strpos($e, "parameter invalid, file is empty") == false)

@ -426,6 +426,7 @@ class OssClientObjectRequestPaymentTest extends TestOssClientBase
$object = 'mpu/multipart-bigfile-test.tmp'; $object = 'mpu/multipart-bigfile-test.tmp';
try { try {
$this->ossClient->multiuploadFile($this->bucket, $object, $bigFileName, $options); $this->ossClient->multiuploadFile($this->bucket, $object, $bigFileName, $options);
$this->assertTrue(true);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertFalse(true); $this->assertFalse(true);
} }
@ -446,7 +447,7 @@ class OssClientObjectRequestPaymentTest extends TestOssClientBase
unlink($bigFileName); unlink($bigFileName);
} }
public function setUp() protected function setUp(): void
{ {
parent::setUp(); parent::setUp();
$this->payerClient = new OssClient( $this->payerClient = new OssClient(
@ -464,7 +465,7 @@ class OssClientObjectRequestPaymentTest extends TestOssClientBase
$this->ossClient->putSymlink($this->bucket, "default-symlink", "default-object"); $this->ossClient->putSymlink($this->bucket, "default-symlink", "default-object");
} }
public function tearDown() protected function tearDown(): void
{ {
parent::tearDown(); parent::tearDown();
} }

@ -664,7 +664,116 @@ class OssClientObjectTest extends TestOssClientBase
} }
public function setUp() public function testObjectKeyWithQuestionMark()
{
/**
* Upload the local variable to bucket
*/
$object = "oss-php-sdk-test/??/upload-test-object-name???123??123??.txt";
$content = file_get_contents(__FILE__);
$options = array(
OssClient::OSS_LENGTH => strlen($content),
OssClient::OSS_HEADERS => array(
'Expires' => 'Fri, 28 Feb 2020 05:38:42 GMT',
'Cache-Control' => 'no-cache',
'Content-Disposition' => 'attachment;filename=oss_download.log',
'Content-Language' => 'zh-CN',
'x-oss-server-side-encryption' => 'AES256',
'x-oss-meta-self-define-title' => 'user define meta info',
),
);
try {
$this->ossClient->putObject($this->bucket, $object, $content, $options);
} catch (OssException $e) {
$this->assertFalse(true);
}
try {
$this->ossClient->putObject($this->bucket, $object, $content, $options);
} catch (OssException $e) {
$this->assertFalse(true);
}
/**
* GetObject to the local variable and check for match
*/
try {
$content = $this->ossClient->getObject($this->bucket, $object);
$this->assertEquals($content, file_get_contents(__FILE__));
} catch (OssException $e) {
$this->assertFalse(true);
}
/**
* GetObject first five bytes
*/
try {
$options = array(OssClient::OSS_RANGE => '0-4');
$content = $this->ossClient->getObject($this->bucket, $object, $options);
$this->assertEquals($content, '<?php');
} catch (OssException $e) {
$this->assertFalse(true);
}
/**
* Upload the local file to object
*/
try {
$this->ossClient->uploadFile($this->bucket, $object, __FILE__);
} catch (OssException $e) {
$this->assertFalse(true);
}
/**
* Download the file to the local variable and check for match.
*/
try {
$content = $this->ossClient->getObject($this->bucket, $object);
$this->assertEquals($content, file_get_contents(__FILE__));
} catch (OssException $e) {
$this->assertFalse(true);
}
/**
* Copy object
*/
$to_bucket = $this->bucket;
$to_object = $object . '.copy';
$options = array();
try {
$result = $this->ossClient->copyObject($this->bucket, $object, $to_bucket, $to_object, $options);
$this->assertFalse(empty($result));
$this->assertEquals(strlen("2016-11-21T03:46:58.000Z"), strlen($result[0]));
$this->assertEquals(strlen("\"5B3C1A2E053D763E1B002CC607C5A0FE\""), strlen($result[1]));
} catch (OssException $e) {
$this->assertFalse(true);
var_dump($e->getMessage());
}
/**
* Check if the replication is the same
*/
try {
$content = $this->ossClient->getObject($this->bucket, $to_object);
$this->assertEquals($content, file_get_contents(__FILE__));
} catch (OssException $e) {
$this->assertFalse(true);
}
try {
$this->assertTrue($this->ossClient->doesObjectExist($this->bucket, $object));
$this->ossClient->deleteObject($this->bucket, $object);
$this->assertFalse($this->ossClient->doesObjectExist($this->bucket, $object));
} catch (OssException $e) {
$this->assertFalse(true);
}
}
protected function setUp(): void
{ {
parent::setUp(); parent::setUp();
$this->ossClient->putObject($this->bucket, 'oss-php-sdk-test/upload-test-object-name.txt', file_get_contents(__FILE__)); $this->ossClient->putObject($this->bucket, 'oss-php-sdk-test/upload-test-object-name.txt', file_get_contents(__FILE__));

@ -569,7 +569,7 @@ class OssClientObjectVersioningTest extends TestOssClientBase
$this->assertEquals(0, count($deleteMarkerList)); $this->assertEquals(0, count($deleteMarkerList));
} }
public function setUp() protected function setUp(): void
{ {
parent::setUp(); parent::setUp();
@ -577,7 +577,7 @@ class OssClientObjectVersioningTest extends TestOssClientBase
} }
public function tearDown() protected function tearDown(): void
{ {
if (!$this->ossClient->doesBucketExist($this->bucket)) { if (!$this->ossClient->doesBucketExist($this->bucket)) {
return; return;

@ -141,7 +141,7 @@ class OssClientRestoreObjectTest extends TestOssClientBase
} }
public function setUp() protected function setUp(): void
{ {
parent::setUp(); parent::setUp();
@ -160,7 +160,7 @@ class OssClientRestoreObjectTest extends TestOssClientBase
$this->ossClient->createBucket($this->archiveBucket, OssClient::OSS_ACL_TYPE_PRIVATE, $options); $this->ossClient->createBucket($this->archiveBucket, OssClient::OSS_ACL_TYPE_PRIVATE, $options);
} }
public function tearDown() protected function tearDown(): void
{ {
parent::tearDown(); parent::tearDown();

@ -131,13 +131,13 @@ class OssClientSignatureTest extends TestOssClientBase
$this->assertTrue(strpos($signedUrl1, 'Expires='.$expiration) !== false); $this->assertTrue(strpos($signedUrl1, 'Expires='.$expiration) !== false);
} }
public function tearDown() protected function tearDown(): void
{ {
$this->ossClient->deleteObject($this->bucket, "a.file"); $this->ossClient->deleteObject($this->bucket, "a.file");
parent::tearDown(); parent::tearDown();
} }
public function setUp() protected function setUp(): void
{ {
parent::setUp(); parent::setUp();
/** /**

@ -111,7 +111,7 @@ class OssClientTest extends TestOssClientBase
$ossClient->listBuckets(); $ossClient->listBuckets();
$this->assertFalse(true); $this->assertFalse(true);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertFalse(false);
} }
} }
@ -123,6 +123,7 @@ class OssClientTest extends TestOssClientBase
$endpoint = ' ' . getenv('OSS_ENDPOINT') . '/ '; $endpoint = ' ' . getenv('OSS_ENDPOINT') . '/ ';
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false); $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
$ossClient->listBuckets(); $ossClient->listBuckets();
$this->assertTrue(true);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertFalse(true); $this->assertFalse(true);
} }
@ -196,6 +197,7 @@ class OssClientTest extends TestOssClientBase
try { try {
$object='test-dir'; $object='test-dir';
$ossClient->createObjectDir($bucket,$object); $ossClient->createObjectDir($bucket,$object);
$this->assertTrue(true);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertFalse(true); $this->assertFalse(true);
} }
@ -204,6 +206,7 @@ class OssClientTest extends TestOssClientBase
$object='0'; $object='0';
$ossClient->createObjectDir($bucket,$object); $ossClient->createObjectDir($bucket,$object);
$ossClient->putObject($bucket,$object, ''); $ossClient->putObject($bucket,$object, '');
$this->assertTrue(true);
} catch (OssException $e) { } catch (OssException $e) {
var_dump($e); var_dump($e);
$this->assertFalse(true); $this->assertFalse(true);
@ -219,6 +222,7 @@ class OssClientTest extends TestOssClientBase
$bucket = getenv('OSS_BUCKET'); $bucket = getenv('OSS_BUCKET');
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false); $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
$ossClient->getBucketCors($bucket); $ossClient->getBucketCors($bucket);
$this->assertTrue(true);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertFalse(true); $this->assertFalse(true);
} }
@ -233,6 +237,7 @@ class OssClientTest extends TestOssClientBase
$bucket = $this->bucket; $bucket = $this->bucket;
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false); $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
$ossClient->getBucketCname($bucket); $ossClient->getBucketCname($bucket);
$this->assertTrue(true);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertFalse(true); $this->assertFalse(true);
} }

@ -4,7 +4,7 @@ namespace OSS\Tests;
use OSS\Core\OssException; use OSS\Core\OssException;
class OssExceptionTest extends \PHPUnit_Framework_TestCase class OssExceptionTest extends \PHPUnit\Framework\TestCase
{ {
public function testOSS_exception() public function testOSS_exception()
{ {

@ -7,7 +7,7 @@ use OSS\Core\OssException;
use OSS\Core\OssUtil; use OSS\Core\OssUtil;
use OSS\OssClient; use OSS\OssClient;
class OssUtilTest extends \PHPUnit_Framework_TestCase class OssUtilTest extends \PHPUnit\Framework\TestCase
{ {
public function testIsChinese() public function testIsChinese()
{ {
@ -147,10 +147,10 @@ BBBB;
$this->assertNotNull($list); $this->assertNotNull($list);
} }
public function testIsWin() //public function testIsWin()
{ //{
//$this->assertTrue(OssUtil::isWin()); // //$this->assertTrue(OssUtil::isWin());
} //}
public function testGetMd5SumForFile() public function testGetMd5SumForFile()
{ {

@ -6,7 +6,7 @@ use OSS\Core\OssException;
use OSS\Http\ResponseCore; use OSS\Http\ResponseCore;
use OSS\Result\PutSetDeleteResult; use OSS\Result\PutSetDeleteResult;
class ResultTest extends \PHPUnit_Framework_TestCase class ResultTest extends \PHPUnit\Framework\TestCase
{ {
public function testNullResponse() public function testNullResponse()
@ -50,16 +50,16 @@ class ResultTest extends \PHPUnit_Framework_TestCase
new PutSetDeleteResult($response); new PutSetDeleteResult($response);
$this->assertFalse(true); $this->assertFalse(true);
} catch (OssException $e) { } catch (OssException $e) {
$this->assertFalse(false);
} }
} }
public function setUp() protected function setUp(): void
{ {
} }
public function tearDown() protected function tearDown(): void
{ {
} }

@ -5,7 +5,7 @@ namespace OSS\Tests;
use OSS\Model\RefererConfig; use OSS\Model\RefererConfig;
class RefererConfigTest extends \PHPUnit_Framework_TestCase class RefererConfigTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB

@ -5,7 +5,7 @@ namespace OSS\Tests;
use OSS\Core\OssException; use OSS\Core\OssException;
use OSS\Model\StorageCapacityConfig; use OSS\Model\StorageCapacityConfig;
class StorageCapacityConfigTest extends \PHPUnit_Framework_TestCase class StorageCapacityConfigTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml_10 = <<<BBBB private $validXml_10 = <<<BBBB
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>

@ -6,7 +6,7 @@ use OSS\Model\StorageCapacityConfig;
use OSS\Result\GetStorageCapacityResult; use OSS\Result\GetStorageCapacityResult;
use OSS\Core\OssException; use OSS\Core\OssException;
class StorageCapacityTest extends \PHPUnit_Framework_TestCase class StorageCapacityTest extends \PHPUnit\Framework\TestCase
{ {
private $inValidXml = <<<BBBB private $inValidXml = <<<BBBB
@ -29,7 +29,9 @@ BBBB;
try { try {
new GetStorageCapacityResult($response); new GetStorageCapacityResult($response);
$this->assertTrue(false); $this->assertTrue(false);
} catch (OssException $e) {} } catch (OssException $e) {
$this->assertTrue(true);
}
} }
public function testParseEmptyXml() public function testParseEmptyXml()
@ -38,7 +40,9 @@ BBBB;
try { try {
new GetStorageCapacityResult($response); new GetStorageCapacityResult($response);
$this->assertTrue(false); $this->assertTrue(false);
} catch (OssException $e) {} } catch (OssException $e) {
$this->assertTrue(true);
}
} }
public function testParseValidXml() public function testParseValidXml()

@ -6,7 +6,7 @@ use OSS\OssClient;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'Common.php'; require_once __DIR__ . DIRECTORY_SEPARATOR . 'Common.php';
class TestOssClientBase extends \PHPUnit_Framework_TestCase class TestOssClientBase extends \PHPUnit\Framework\TestCase
{ {
/** /**
* @var OssClient * @var OssClient
@ -18,7 +18,7 @@ class TestOssClientBase extends \PHPUnit_Framework_TestCase
*/ */
protected $bucket; protected $bucket;
public function setUp() protected function setUp(): void
{ {
$this->bucket = Common::getBucketName() .'-'. time(); $this->bucket = Common::getBucketName() .'-'. time();
$this->ossClient = Common::getOssClient(); $this->ossClient = Common::getOssClient();
@ -26,7 +26,7 @@ class TestOssClientBase extends \PHPUnit_Framework_TestCase
Common::waitMetaSync(); Common::waitMetaSync();
} }
public function tearDown() protected function tearDown(): void
{ {
if (!$this->ossClient->doesBucketExist($this->bucket)) { if (!$this->ossClient->doesBucketExist($this->bucket)) {
return; return;

@ -7,7 +7,7 @@ use OSS\Core\OssException;
use OSS\Result\UploadPartResult; use OSS\Result\UploadPartResult;
use OSS\Http\ResponseCore; use OSS\Http\ResponseCore;
class UploadPartResultTest extends \PHPUnit_Framework_TestCase class UploadPartResultTest extends \PHPUnit\Framework\TestCase
{ {
private $validHeader = array('etag' => '7265F4D211B56873A381D321F586E4A9'); private $validHeader = array('etag' => '7265F4D211B56873A381D321F586E4A9');
private $invalidHeader = array(); private $invalidHeader = array();

@ -5,7 +5,7 @@ namespace OSS\Tests;
use OSS\Model\WebsiteConfig; use OSS\Model\WebsiteConfig;
class WebsiteConfigTest extends \PHPUnit_Framework_TestCase class WebsiteConfigTest extends \PHPUnit\Framework\TestCase
{ {
private $validXml = <<<BBBB private $validXml = <<<BBBB
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>

@ -37,11 +37,13 @@ namespace Composer\Autoload;
* *
* @author Fabien Potencier <fabien@symfony.com> * @author Fabien Potencier <fabien@symfony.com>
* @author Jordi Boggiano <j.boggiano@seld.be> * @author Jordi Boggiano <j.boggiano@seld.be>
* @see http://www.php-fig.org/psr/psr-0/ * @see https://www.php-fig.org/psr/psr-0/
* @see http://www.php-fig.org/psr/psr-4/ * @see https://www.php-fig.org/psr/psr-4/
*/ */
class ClassLoader class ClassLoader
{ {
private $vendorDir;
// PSR-4 // PSR-4
private $prefixLengthsPsr4 = array(); private $prefixLengthsPsr4 = array();
private $prefixDirsPsr4 = array(); private $prefixDirsPsr4 = array();
@ -57,10 +59,17 @@ class ClassLoader
private $missingClasses = array(); private $missingClasses = array();
private $apcuPrefix; private $apcuPrefix;
private static $registeredLoaders = array();
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
}
public function getPrefixes() public function getPrefixes()
{ {
if (!empty($this->prefixesPsr0)) { if (!empty($this->prefixesPsr0)) {
return call_user_func_array('array_merge', $this->prefixesPsr0); return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
} }
return array(); return array();
@ -300,6 +309,17 @@ class ClassLoader
public function register($prepend = false) public function register($prepend = false)
{ {
spl_autoload_register(array($this, 'loadClass'), true, $prepend); spl_autoload_register(array($this, 'loadClass'), true, $prepend);
if (null === $this->vendorDir) {
return;
}
if ($prepend) {
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
} else {
unset(self::$registeredLoaders[$this->vendorDir]);
self::$registeredLoaders[$this->vendorDir] = $this;
}
} }
/** /**
@ -308,13 +328,17 @@ class ClassLoader
public function unregister() public function unregister()
{ {
spl_autoload_unregister(array($this, 'loadClass')); spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
} }
/** /**
* Loads the given class or interface. * Loads the given class or interface.
* *
* @param string $class The name of the class * @param string $class The name of the class
* @return bool|null True if loaded, null otherwise * @return true|null True if loaded, null otherwise
*/ */
public function loadClass($class) public function loadClass($class)
{ {
@ -323,6 +347,8 @@ class ClassLoader
return true; return true;
} }
return null;
} }
/** /**
@ -367,6 +393,16 @@ class ClassLoader
return $file; return $file;
} }
/**
* Returns the currently registered loaders indexed by their corresponding vendor directories.
*
* @return self[]
*/
public static function getRegisteredLoaders()
{
return self::$registeredLoaders;
}
private function findFileWithExtension($class, $ext) private function findFileWithExtension($class, $ext)
{ {
// PSR-4 lookup // PSR-4 lookup

337
vendor/composer/InstalledVersions.php vendored Normal file

@ -0,0 +1,337 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer;
use Composer\Autoload\ClassLoader;
use Composer\Semver\VersionParser;
/**
* This class is copied in every Composer installed project and available to all
*
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
*
* To require it's presence, you can require `composer-runtime-api ^2.0`
*/
class InstalledVersions
{
private static $installed;
private static $canGetVendors;
private static $installedByVendor = array();
/**
* Returns a list of all package names which are present, either by being installed, replaced or provided
*
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackages()
{
$packages = array();
foreach (self::getInstalled() as $installed) {
$packages[] = array_keys($installed['versions']);
}
if (1 === \count($packages)) {
return $packages[0];
}
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
}
/**
* Returns a list of all package names with a specific type e.g. 'library'
*
* @param string $type
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackagesByType($type)
{
$packagesByType = array();
foreach (self::getInstalled() as $installed) {
foreach ($installed['versions'] as $name => $package) {
if (isset($package['type']) && $package['type'] === $type) {
$packagesByType[] = $name;
}
}
}
return $packagesByType;
}
/**
* Checks whether the given package is installed
*
* This also returns true if the package name is provided or replaced by another package
*
* @param string $packageName
* @param bool $includeDevRequirements
* @return bool
*/
public static function isInstalled($packageName, $includeDevRequirements = true)
{
foreach (self::getInstalled() as $installed) {
if (isset($installed['versions'][$packageName])) {
return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
}
}
return false;
}
/**
* Checks whether the given package satisfies a version constraint
*
* e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
*
* Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
*
* @param VersionParser $parser Install composer/semver to have access to this class and functionality
* @param string $packageName
* @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
* @return bool
*/
public static function satisfies(VersionParser $parser, $packageName, $constraint)
{
$constraint = $parser->parseConstraints($constraint);
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
return $provided->matches($constraint);
}
/**
* Returns a version constraint representing all the range(s) which are installed for a given package
*
* It is easier to use this via isInstalled() with the $constraint argument if you need to check
* whether a given version of a package is installed, and not just whether it exists
*
* @param string $packageName
* @return string Version constraint usable with composer/semver
*/
public static function getVersionRanges($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
$ranges = array();
if (isset($installed['versions'][$packageName]['pretty_version'])) {
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
}
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
}
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
}
if (array_key_exists('provided', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
}
return implode(' || ', $ranges);
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['version'])) {
return null;
}
return $installed['versions'][$packageName]['version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getPrettyVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
return null;
}
return $installed['versions'][$packageName]['pretty_version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
*/
public static function getReference($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['reference'])) {
return null;
}
return $installed['versions'][$packageName]['reference'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
*/
public static function getInstallPath($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @return array
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}
*/
public static function getRootPackage()
{
$installed = self::getInstalled();
return $installed[0]['root'];
}
/**
* Returns the raw installed.php data for custom implementations
*
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
* @return array[]
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}
*/
public static function getRawData()
{
@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
if (substr(__DIR__, -8, 1) !== 'C') {
self::$installed = include __DIR__ . '/installed.php';
} else {
self::$installed = array();
}
}
return self::$installed;
}
/**
* Returns the raw data of all installed.php which are currently loaded for custom implementations
*
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
*/
public static function getAllRawData()
{
return self::getInstalled();
}
/**
* Lets you reload the static array from another file
*
* This is only useful for complex integrations in which a project needs to use
* this class but then also needs to execute another project's autoloader in process,
* and wants to ensure both projects have access to their version of installed.php.
*
* A typical case would be PHPUnit, where it would need to make sure it reads all
* the data it needs from this class, then call reload() with
* `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
* the project in which it runs can then also use this class safely, without
* interference between PHPUnit's dependencies and the project's dependencies.
*
* @param array[] $data A vendor/composer/installed.php data set
* @return void
*
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data
*/
public static function reload($data)
{
self::$installed = $data;
self::$installedByVendor = array();
}
/**
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
*/
private static function getInstalled()
{
if (null === self::$canGetVendors) {
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
}
$installed = array();
if (self::$canGetVendors) {
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
if (isset(self::$installedByVendor[$vendorDir])) {
$installed[] = self::$installedByVendor[$vendorDir];
} elseif (is_file($vendorDir.'/composer/installed.php')) {
$installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
self::$installed = $installed[count($installed) - 1];
}
}
}
}
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
if (substr(__DIR__, -8, 1) !== 'C') {
self::$installed = require __DIR__ . '/installed.php';
} else {
self::$installed = array();
}
}
$installed[] = self::$installed;
return $installed;
}
}

@ -14,6 +14,7 @@ return array(
'AliPay\\Transfer' => $vendorDir . '/zoujingli/wechat-developer/AliPay/Transfer.php', 'AliPay\\Transfer' => $vendorDir . '/zoujingli/wechat-developer/AliPay/Transfer.php',
'AliPay\\Wap' => $vendorDir . '/zoujingli/wechat-developer/AliPay/Wap.php', 'AliPay\\Wap' => $vendorDir . '/zoujingli/wechat-developer/AliPay/Wap.php',
'AliPay\\Web' => $vendorDir . '/zoujingli/wechat-developer/AliPay/Web.php', 'AliPay\\Web' => $vendorDir . '/zoujingli/wechat-developer/AliPay/Web.php',
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
'Endroid\\QrCode\\Bundle\\Controller\\QrCodeController' => $vendorDir . '/endroid/qr-code/src/Bundle/Controller/QrCodeController.php', 'Endroid\\QrCode\\Bundle\\Controller\\QrCodeController' => $vendorDir . '/endroid/qr-code/src/Bundle/Controller/QrCodeController.php',
'Endroid\\QrCode\\Bundle\\DependencyInjection\\Configuration' => $vendorDir . '/endroid/qr-code/src/Bundle/DependencyInjection/Configuration.php', 'Endroid\\QrCode\\Bundle\\DependencyInjection\\Configuration' => $vendorDir . '/endroid/qr-code/src/Bundle/DependencyInjection/Configuration.php',
'Endroid\\QrCode\\Bundle\\DependencyInjection\\EndroidQrCodeExtension' => $vendorDir . '/endroid/qr-code/src/Bundle/DependencyInjection/EndroidQrCodeExtension.php', 'Endroid\\QrCode\\Bundle\\DependencyInjection\\EndroidQrCodeExtension' => $vendorDir . '/endroid/qr-code/src/Bundle/DependencyInjection/EndroidQrCodeExtension.php',
@ -211,8 +212,14 @@ return array(
'WeOpen\\Login' => $vendorDir . '/zoujingli/weopen-developer/WeOpen/Login.php', 'WeOpen\\Login' => $vendorDir . '/zoujingli/weopen-developer/WeOpen/Login.php',
'WeOpen\\MiniApp' => $vendorDir . '/zoujingli/weopen-developer/WeOpen/MiniApp.php', 'WeOpen\\MiniApp' => $vendorDir . '/zoujingli/weopen-developer/WeOpen/MiniApp.php',
'WeOpen\\Service' => $vendorDir . '/zoujingli/weopen-developer/WeOpen/Service.php', 'WeOpen\\Service' => $vendorDir . '/zoujingli/weopen-developer/WeOpen/Service.php',
'WePayV3\\Cert' => $vendorDir . '/zoujingli/wechat-developer/WePayV3/Cert.php',
'WePayV3\\Contracts\\BasicWePay' => $vendorDir . '/zoujingli/wechat-developer/WePayV3/Contracts/BasicWePay.php',
'WePayV3\\Contracts\\DecryptAes' => $vendorDir . '/zoujingli/wechat-developer/WePayV3/Contracts/DecryptAes.php',
'WePayV3\\Order' => $vendorDir . '/zoujingli/wechat-developer/WePayV3/Order.php',
'WePayV3\\Refund' => $vendorDir . '/zoujingli/wechat-developer/WePayV3/Refund.php',
'WePay\\Bill' => $vendorDir . '/zoujingli/wechat-developer/WePay/Bill.php', 'WePay\\Bill' => $vendorDir . '/zoujingli/wechat-developer/WePay/Bill.php',
'WePay\\Coupon' => $vendorDir . '/zoujingli/wechat-developer/WePay/Coupon.php', 'WePay\\Coupon' => $vendorDir . '/zoujingli/wechat-developer/WePay/Coupon.php',
'WePay\\Custom' => $vendorDir . '/zoujingli/wechat-developer/WePay/Custom.php',
'WePay\\Order' => $vendorDir . '/zoujingli/wechat-developer/WePay/Order.php', 'WePay\\Order' => $vendorDir . '/zoujingli/wechat-developer/WePay/Order.php',
'WePay\\Redpack' => $vendorDir . '/zoujingli/wechat-developer/WePay/Redpack.php', 'WePay\\Redpack' => $vendorDir . '/zoujingli/wechat-developer/WePay/Redpack.php',
'WePay\\Refund' => $vendorDir . '/zoujingli/wechat-developer/WePay/Refund.php', 'WePay\\Refund' => $vendorDir . '/zoujingli/wechat-developer/WePay/Refund.php',
@ -265,7 +272,9 @@ return array(
'library\\tools\\JsonRpcServer' => $vendorDir . '/zoujingli/think-library/src/tools/JsonRpcServer.php', 'library\\tools\\JsonRpcServer' => $vendorDir . '/zoujingli/think-library/src/tools/JsonRpcServer.php',
'library\\tools\\Node' => $vendorDir . '/zoujingli/think-library/src/tools/Node.php', 'library\\tools\\Node' => $vendorDir . '/zoujingli/think-library/src/tools/Node.php',
'library\\tools\\Options' => $vendorDir . '/zoujingli/think-library/src/tools/Options.php', 'library\\tools\\Options' => $vendorDir . '/zoujingli/think-library/src/tools/Options.php',
'think\\composer\\LibraryInstaller' => $vendorDir . '/topthink/think-installer/src/LibraryInstaller.php',
'think\\composer\\Plugin' => $vendorDir . '/topthink/think-installer/src/Plugin.php', 'think\\composer\\Plugin' => $vendorDir . '/topthink/think-installer/src/Plugin.php',
'think\\composer\\Promise' => $vendorDir . '/topthink/think-installer/src/Promise.php',
'think\\composer\\ThinkExtend' => $vendorDir . '/topthink/think-installer/src/ThinkExtend.php', 'think\\composer\\ThinkExtend' => $vendorDir . '/topthink/think-installer/src/ThinkExtend.php',
'think\\composer\\ThinkFramework' => $vendorDir . '/topthink/think-installer/src/ThinkFramework.php', 'think\\composer\\ThinkFramework' => $vendorDir . '/topthink/think-installer/src/ThinkFramework.php',
'think\\composer\\ThinkTesting' => $vendorDir . '/topthink/think-installer/src/ThinkTesting.php', 'think\\composer\\ThinkTesting' => $vendorDir . '/topthink/think-installer/src/ThinkTesting.php',

@ -9,6 +9,7 @@ return array(
'think\\composer\\' => array($vendorDir . '/topthink/think-installer/src'), 'think\\composer\\' => array($vendorDir . '/topthink/think-installer/src'),
'library\\' => array($vendorDir . '/zoujingli/think-library/src'), 'library\\' => array($vendorDir . '/zoujingli/think-library/src'),
'WePay\\' => array($vendorDir . '/zoujingli/wechat-developer/WePay'), 'WePay\\' => array($vendorDir . '/zoujingli/wechat-developer/WePay'),
'WePayV3\\' => array($vendorDir . '/zoujingli/wechat-developer/WePayV3'),
'WeOpen\\' => array($vendorDir . '/zoujingli/weopen-developer/WeOpen'), 'WeOpen\\' => array($vendorDir . '/zoujingli/weopen-developer/WeOpen'),
'WeMini\\' => array($vendorDir . '/zoujingli/wechat-developer/WeMini', $vendorDir . '/zoujingli/weopen-developer/WeMini'), 'WeMini\\' => array($vendorDir . '/zoujingli/wechat-developer/WeMini', $vendorDir . '/zoujingli/weopen-developer/WeMini'),
'WeChat\\' => array($vendorDir . '/zoujingli/wechat-developer/WeChat', $vendorDir . '/zoujingli/weopen-developer/WeChat'), 'WeChat\\' => array($vendorDir . '/zoujingli/wechat-developer/WeChat', $vendorDir . '/zoujingli/weopen-developer/WeChat'),

@ -22,13 +22,15 @@ class ComposerAutoloaderInit4d241e9f8bb10d006cd7432f945fdb5b
return self::$loader; return self::$loader;
} }
require __DIR__ . '/platform_check.php';
spl_autoload_register(array('ComposerAutoloaderInit4d241e9f8bb10d006cd7432f945fdb5b', 'loadClassLoader'), true, true); spl_autoload_register(array('ComposerAutoloaderInit4d241e9f8bb10d006cd7432f945fdb5b', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(); self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
spl_autoload_unregister(array('ComposerAutoloaderInit4d241e9f8bb10d006cd7432f945fdb5b', 'loadClassLoader')); spl_autoload_unregister(array('ComposerAutoloaderInit4d241e9f8bb10d006cd7432f945fdb5b', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) { if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php'; require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b::getInitializer($loader)); call_user_func(\Composer\Autoload\ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b::getInitializer($loader));
} else { } else {

@ -23,6 +23,7 @@ class ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b
'W' => 'W' =>
array ( array (
'WePay\\' => 6, 'WePay\\' => 6,
'WePayV3\\' => 8,
'WeOpen\\' => 7, 'WeOpen\\' => 7,
'WeMini\\' => 7, 'WeMini\\' => 7,
'WeChat\\' => 7, 'WeChat\\' => 7,
@ -62,6 +63,10 @@ class ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b
array ( array (
0 => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay', 0 => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay',
), ),
'WePayV3\\' =>
array (
0 => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePayV3',
),
'WeOpen\\' => 'WeOpen\\' =>
array ( array (
0 => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeOpen', 0 => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeOpen',
@ -107,6 +112,7 @@ class ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b
'AliPay\\Transfer' => __DIR__ . '/..' . '/zoujingli/wechat-developer/AliPay/Transfer.php', 'AliPay\\Transfer' => __DIR__ . '/..' . '/zoujingli/wechat-developer/AliPay/Transfer.php',
'AliPay\\Wap' => __DIR__ . '/..' . '/zoujingli/wechat-developer/AliPay/Wap.php', 'AliPay\\Wap' => __DIR__ . '/..' . '/zoujingli/wechat-developer/AliPay/Wap.php',
'AliPay\\Web' => __DIR__ . '/..' . '/zoujingli/wechat-developer/AliPay/Web.php', 'AliPay\\Web' => __DIR__ . '/..' . '/zoujingli/wechat-developer/AliPay/Web.php',
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
'Endroid\\QrCode\\Bundle\\Controller\\QrCodeController' => __DIR__ . '/..' . '/endroid/qr-code/src/Bundle/Controller/QrCodeController.php', 'Endroid\\QrCode\\Bundle\\Controller\\QrCodeController' => __DIR__ . '/..' . '/endroid/qr-code/src/Bundle/Controller/QrCodeController.php',
'Endroid\\QrCode\\Bundle\\DependencyInjection\\Configuration' => __DIR__ . '/..' . '/endroid/qr-code/src/Bundle/DependencyInjection/Configuration.php', 'Endroid\\QrCode\\Bundle\\DependencyInjection\\Configuration' => __DIR__ . '/..' . '/endroid/qr-code/src/Bundle/DependencyInjection/Configuration.php',
'Endroid\\QrCode\\Bundle\\DependencyInjection\\EndroidQrCodeExtension' => __DIR__ . '/..' . '/endroid/qr-code/src/Bundle/DependencyInjection/EndroidQrCodeExtension.php', 'Endroid\\QrCode\\Bundle\\DependencyInjection\\EndroidQrCodeExtension' => __DIR__ . '/..' . '/endroid/qr-code/src/Bundle/DependencyInjection/EndroidQrCodeExtension.php',
@ -304,8 +310,14 @@ class ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b
'WeOpen\\Login' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeOpen/Login.php', 'WeOpen\\Login' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeOpen/Login.php',
'WeOpen\\MiniApp' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeOpen/MiniApp.php', 'WeOpen\\MiniApp' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeOpen/MiniApp.php',
'WeOpen\\Service' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeOpen/Service.php', 'WeOpen\\Service' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeOpen/Service.php',
'WePayV3\\Cert' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePayV3/Cert.php',
'WePayV3\\Contracts\\BasicWePay' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePayV3/Contracts/BasicWePay.php',
'WePayV3\\Contracts\\DecryptAes' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePayV3/Contracts/DecryptAes.php',
'WePayV3\\Order' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePayV3/Order.php',
'WePayV3\\Refund' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePayV3/Refund.php',
'WePay\\Bill' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Bill.php', 'WePay\\Bill' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Bill.php',
'WePay\\Coupon' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Coupon.php', 'WePay\\Coupon' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Coupon.php',
'WePay\\Custom' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Custom.php',
'WePay\\Order' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Order.php', 'WePay\\Order' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Order.php',
'WePay\\Redpack' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Redpack.php', 'WePay\\Redpack' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Redpack.php',
'WePay\\Refund' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Refund.php', 'WePay\\Refund' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Refund.php',
@ -358,7 +370,9 @@ class ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b
'library\\tools\\JsonRpcServer' => __DIR__ . '/..' . '/zoujingli/think-library/src/tools/JsonRpcServer.php', 'library\\tools\\JsonRpcServer' => __DIR__ . '/..' . '/zoujingli/think-library/src/tools/JsonRpcServer.php',
'library\\tools\\Node' => __DIR__ . '/..' . '/zoujingli/think-library/src/tools/Node.php', 'library\\tools\\Node' => __DIR__ . '/..' . '/zoujingli/think-library/src/tools/Node.php',
'library\\tools\\Options' => __DIR__ . '/..' . '/zoujingli/think-library/src/tools/Options.php', 'library\\tools\\Options' => __DIR__ . '/..' . '/zoujingli/think-library/src/tools/Options.php',
'think\\composer\\LibraryInstaller' => __DIR__ . '/..' . '/topthink/think-installer/src/LibraryInstaller.php',
'think\\composer\\Plugin' => __DIR__ . '/..' . '/topthink/think-installer/src/Plugin.php', 'think\\composer\\Plugin' => __DIR__ . '/..' . '/topthink/think-installer/src/Plugin.php',
'think\\composer\\Promise' => __DIR__ . '/..' . '/topthink/think-installer/src/Promise.php',
'think\\composer\\ThinkExtend' => __DIR__ . '/..' . '/topthink/think-installer/src/ThinkExtend.php', 'think\\composer\\ThinkExtend' => __DIR__ . '/..' . '/topthink/think-installer/src/ThinkExtend.php',
'think\\composer\\ThinkFramework' => __DIR__ . '/..' . '/topthink/think-installer/src/ThinkFramework.php', 'think\\composer\\ThinkFramework' => __DIR__ . '/..' . '/topthink/think-installer/src/ThinkFramework.php',
'think\\composer\\ThinkTesting' => __DIR__ . '/..' . '/topthink/think-installer/src/ThinkTesting.php', 'think\\composer\\ThinkTesting' => __DIR__ . '/..' . '/topthink/think-installer/src/ThinkTesting.php',

@ -1,17 +1,18 @@
[ {
"packages": [
{ {
"name": "aliyuncs/oss-sdk-php", "name": "aliyuncs/oss-sdk-php",
"version": "v2.4.0", "version": "v2.4.2",
"version_normalized": "2.4.0.0", "version_normalized": "2.4.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/aliyun/aliyun-oss-php-sdk.git", "url": "https://github.com/aliyun/aliyun-oss-php-sdk.git",
"reference": "bd9c2bba3d167de821cbb33b5c03fe6e41e8e363" "reference": "0c9d902c33847c07efc66c4cdf823deaea8fc2b6"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/aliyun/aliyun-oss-php-sdk/zipball/bd9c2bba3d167de821cbb33b5c03fe6e41e8e363", "url": "https://api.github.com/repos/aliyun/aliyun-oss-php-sdk/zipball/0c9d902c33847c07efc66c4cdf823deaea8fc2b6",
"reference": "bd9c2bba3d167de821cbb33b5c03fe6e41e8e363", "reference": "0c9d902c33847c07efc66c4cdf823deaea8fc2b6",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@ -24,10 +25,10 @@
"php": ">=5.3" "php": ">=5.3"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "~4.0", "phpunit/phpunit": "*",
"satooshi/php-coveralls": "~1.0" "satooshi/php-coveralls": "*"
}, },
"time": "2020-08-31T08:39:59+00:00", "time": "2021-06-04T06:55:06+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -46,7 +47,12 @@
} }
], ],
"description": "Aliyun OSS SDK for PHP", "description": "Aliyun OSS SDK for PHP",
"homepage": "http://www.aliyun.com/product/oss/" "homepage": "http://www.aliyun.com/product/oss/",
"support": {
"issues": "https://github.com/aliyun/aliyun-oss-php-sdk/issues",
"source": "https://github.com/aliyun/aliyun-oss-php-sdk/tree/v2.4.2"
},
"install-path": "../aliyuncs/oss-sdk-php"
}, },
{ {
"name": "endroid/qr-code", "name": "endroid/qr-code",
@ -114,21 +120,22 @@
"qr", "qr",
"qrcode", "qrcode",
"symfony" "symfony"
] ],
"install-path": "../endroid/qr-code"
}, },
{ {
"name": "qiniu/php-sdk", "name": "qiniu/php-sdk",
"version": "v7.2.10", "version": "v7.3.0",
"version_normalized": "7.2.10.0", "version_normalized": "7.3.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/qiniu/php-sdk.git", "url": "https://github.com/qiniu/php-sdk.git",
"reference": "d89987163f560ebf9dfa5bb25de9bd9b1a3b2bd8" "reference": "0a461e13b09545b23df361843c6a65fdd3a26426"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/qiniu/php-sdk/zipball/d89987163f560ebf9dfa5bb25de9bd9b1a3b2bd8", "url": "https://api.github.com/repos/qiniu/php-sdk/zipball/0a461e13b09545b23df361843c6a65fdd3a26426",
"reference": "d89987163f560ebf9dfa5bb25de9bd9b1a3b2bd8", "reference": "0a461e13b09545b23df361843c6a65fdd3a26426",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@ -144,7 +151,7 @@
"phpunit/phpunit": "~4.0", "phpunit/phpunit": "~4.0",
"squizlabs/php_codesniffer": "~2.3" "squizlabs/php_codesniffer": "~2.3"
}, },
"time": "2019-10-28T10:23:23+00:00", "time": "2020-09-24T07:31:29+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -173,21 +180,26 @@
"qiniu", "qiniu",
"sdk", "sdk",
"storage" "storage"
] ],
"support": {
"issues": "https://github.com/qiniu/php-sdk/issues",
"source": "https://github.com/qiniu/php-sdk/tree/v7.3.0"
},
"install-path": "../qiniu/php-sdk"
}, },
{ {
"name": "symfony/options-resolver", "name": "symfony/options-resolver",
"version": "v3.4.44", "version": "v3.4.47",
"version_normalized": "3.4.44.0", "version_normalized": "3.4.47.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/options-resolver.git", "url": "https://github.com/symfony/options-resolver.git",
"reference": "0edf31d2e34f4adb72dd4d2e4a8aa21f84b943e5" "reference": "c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/0edf31d2e34f4adb72dd4d2e4a8aa21f84b943e5", "url": "https://api.github.com/repos/symfony/options-resolver/zipball/c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744",
"reference": "0edf31d2e34f4adb72dd4d2e4a8aa21f84b943e5", "reference": "c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@ -199,13 +211,8 @@
"require": { "require": {
"php": "^5.5.9|>=7.0.8" "php": "^5.5.9|>=7.0.8"
}, },
"time": "2020-07-08T17:07:26+00:00", "time": "2020-10-24T10:57:07+00:00",
"type": "library", "type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.4-dev"
}
},
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
@ -236,6 +243,9 @@
"configuration", "configuration",
"options" "options"
], ],
"support": {
"source": "https://github.com/symfony/options-resolver/tree/v3.4.47"
},
"funding": [ "funding": [
{ {
"url": "https://symfony.com/sponsor", "url": "https://symfony.com/sponsor",
@ -249,21 +259,22 @@
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift" "type": "tidelift"
} }
] ],
"install-path": "../symfony/options-resolver"
}, },
{ {
"name": "topthink/framework", "name": "topthink/framework",
"version": "v5.1.39", "version": "v5.1.41",
"version_normalized": "5.1.39.0", "version_normalized": "5.1.41.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/top-think/framework.git", "url": "https://github.com/top-think/framework.git",
"reference": "5762858f3d58faafb3a39427f8788884b2927007" "reference": "7137741a323a4a60cfca334507cd1812fac91bb2"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/top-think/framework/zipball/5762858f3d58faafb3a39427f8788884b2927007", "url": "https://api.github.com/repos/top-think/framework/zipball/7137741a323a4a60cfca334507cd1812fac91bb2",
"reference": "5762858f3d58faafb3a39427f8788884b2927007", "reference": "7137741a323a4a60cfca334507cd1812fac91bb2",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@ -285,7 +296,7 @@
"sebastian/phpcpd": "2.*", "sebastian/phpcpd": "2.*",
"squizlabs/php_codesniffer": "2.*" "squizlabs/php_codesniffer": "2.*"
}, },
"time": "2019-11-17T23:22:02+00:00", "time": "2021-01-11T02:51:29+00:00",
"type": "think-framework", "type": "think-framework",
"installation-source": "dist", "installation-source": "dist",
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
@ -308,21 +319,26 @@
"framework", "framework",
"orm", "orm",
"thinkphp" "thinkphp"
] ],
"support": {
"issues": "https://github.com/top-think/framework/issues",
"source": "https://github.com/top-think/framework/tree/v5.1.41"
},
"install-path": "../../thinkphp"
}, },
{ {
"name": "topthink/think-installer", "name": "topthink/think-installer",
"version": "v2.0.0", "version": "v2.0.5",
"version_normalized": "2.0.0.0", "version_normalized": "2.0.5.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/top-think/think-installer.git", "url": "https://github.com/top-think/think-installer.git",
"reference": "f5400a12c60e513911aef41fe443fa6920952675" "reference": "38ba647706e35d6704b5d370c06f8a160b635f88"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/top-think/think-installer/zipball/f5400a12c60e513911aef41fe443fa6920952675", "url": "https://api.github.com/repos/top-think/think-installer/zipball/38ba647706e35d6704b5d370c06f8a160b635f88",
"reference": "f5400a12c60e513911aef41fe443fa6920952675", "reference": "38ba647706e35d6704b5d370c06f8a160b635f88",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@ -332,12 +348,12 @@
] ]
}, },
"require": { "require": {
"composer-plugin-api": "^1.0" "composer-plugin-api": "^1.0||^2.0"
}, },
"require-dev": { "require-dev": {
"composer/composer": "1.0.*@dev" "composer/composer": "^1.0||^2.0"
}, },
"time": "2018-05-11T06:45:42+00:00", "time": "2021-01-14T12:12:14+00:00",
"type": "composer-plugin", "type": "composer-plugin",
"extra": { "extra": {
"class": "think\\composer\\Plugin" "class": "think\\composer\\Plugin"
@ -357,21 +373,26 @@
"name": "yunwuxin", "name": "yunwuxin",
"email": "448901948@qq.com" "email": "448901948@qq.com"
} }
] ],
"support": {
"issues": "https://github.com/top-think/think-installer/issues",
"source": "https://github.com/top-think/think-installer/tree/v2.0.5"
},
"install-path": "../topthink/think-installer"
}, },
{ {
"name": "zoujingli/ip2region", "name": "zoujingli/ip2region",
"version": "v1.0.8", "version": "v1.0.10",
"version_normalized": "1.0.8.0", "version_normalized": "1.0.10.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/zoujingli/ip2region.git", "url": "https://github.com/zoujingli/ip2region.git",
"reference": "d6be3ab9da1a1ab7e3cd51c4aa634a34de358ce6" "reference": "453480d0ab5b6fdbdf4aa400b7598a10ff2dc5c0"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/zoujingli/ip2region/zipball/d6be3ab9da1a1ab7e3cd51c4aa634a34de358ce6", "url": "https://api.github.com/repos/zoujingli/ip2region/zipball/453480d0ab5b6fdbdf4aa400b7598a10ff2dc5c0",
"reference": "d6be3ab9da1a1ab7e3cd51c4aa634a34de358ce6", "reference": "453480d0ab5b6fdbdf4aa400b7598a10ff2dc5c0",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@ -383,7 +404,7 @@
"require": { "require": {
"php": ">=5.3" "php": ">=5.3"
}, },
"time": "2020-07-06T05:33:26+00:00", "time": "2021-03-23T10:29:05+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -406,7 +427,12 @@
"homepage": "https://github.com/zoujingli/Ip2Region", "homepage": "https://github.com/zoujingli/Ip2Region",
"keywords": [ "keywords": [
"Ip2Region" "Ip2Region"
] ],
"support": {
"issues": "https://github.com/zoujingli/ip2region/issues",
"source": "https://github.com/zoujingli/ip2region/tree/v1.0.10"
},
"install-path": "../zoujingli/ip2region"
}, },
{ {
"name": "zoujingli/think-library", "name": "zoujingli/think-library",
@ -415,12 +441,12 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/zoujingli/ThinkLibrary.git", "url": "https://github.com/zoujingli/ThinkLibrary.git",
"reference": "5e91c776c2111fa0cc7635a6f018ba0e553e3f49" "reference": "38c150e2a61280f1f16d16a08aeabdc18b551151"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/5e91c776c2111fa0cc7635a6f018ba0e553e3f49", "url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/38c150e2a61280f1f16d16a08aeabdc18b551151",
"reference": "5e91c776c2111fa0cc7635a6f018ba0e553e3f49", "reference": "38c150e2a61280f1f16d16a08aeabdc18b551151",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@ -440,7 +466,7 @@
"qiniu/php-sdk": "^7.2", "qiniu/php-sdk": "^7.2",
"topthink/framework": "5.1.*" "topthink/framework": "5.1.*"
}, },
"time": "2020-09-04T04:16:04+00:00", "time": "2020-09-08T01:49:52+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -456,21 +482,26 @@
"MIT" "MIT"
], ],
"description": "ThinkPHP Basic Development Library", "description": "ThinkPHP Basic Development Library",
"homepage": "http://framework.thinkadmin.top" "homepage": "http://framework.thinkadmin.top",
"support": {
"issues": "https://github.com/zoujingli/ThinkLibrary/issues",
"source": "https://github.com/zoujingli/ThinkLibrary/tree/v5.1"
},
"install-path": "../zoujingli/think-library"
}, },
{ {
"name": "zoujingli/wechat-developer", "name": "zoujingli/wechat-developer",
"version": "v1.2.25", "version": "v1.2.31",
"version_normalized": "1.2.25.0", "version_normalized": "1.2.31.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/zoujingli/WeChatDeveloper.git", "url": "https://github.com/zoujingli/WeChatDeveloper.git",
"reference": "6fcb6504904ee4276b358b3f9b80ffc992eb385c" "reference": "0cf699c725f69d66657a50e60d22f71c9e5a5e16"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/zoujingli/WeChatDeveloper/zipball/6fcb6504904ee4276b358b3f9b80ffc992eb385c", "url": "https://api.github.com/repos/zoujingli/WeChatDeveloper/zipball/0cf699c725f69d66657a50e60d22f71c9e5a5e16",
"reference": "6fcb6504904ee4276b358b3f9b80ffc992eb385c", "reference": "0cf699c725f69d66657a50e60d22f71c9e5a5e16",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@ -490,7 +521,7 @@
"ext-xml": "*", "ext-xml": "*",
"php": ">=5.4" "php": ">=5.4"
}, },
"time": "2020-08-19T08:52:11+00:00", "time": "2021-05-19T06:25:20+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -501,7 +532,8 @@
"WePay\\": "WePay", "WePay\\": "WePay",
"WeChat\\": "WeChat", "WeChat\\": "WeChat",
"WeMini\\": "WeMini", "WeMini\\": "WeMini",
"AliPay\\": "AliPay" "AliPay\\": "AliPay",
"WePayV3\\": "WePayV3"
} }
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
@ -516,7 +548,7 @@
} }
], ],
"description": "WeChat platform and WeChat payment development tools", "description": "WeChat platform and WeChat payment development tools",
"homepage": "https://github.com/zoujingli/WeChatDeveloper", "homepage": "https://github.com/kentwangit/WeChatDeveloper",
"keywords": [ "keywords": [
"WeChatDeveloper", "WeChatDeveloper",
"WeMini", "WeMini",
@ -524,12 +556,17 @@
"wechat", "wechat",
"wechatpay", "wechatpay",
"wepay" "wepay"
] ],
"support": {
"issues": "https://github.com/zoujingli/WeChatDeveloper/issues",
"source": "https://github.com/zoujingli/WeChatDeveloper/tree/v1.2.31"
},
"install-path": "../zoujingli/wechat-developer"
}, },
{ {
"name": "zoujingli/weopen-developer", "name": "zoujingli/weopen-developer",
"version": "dev-master", "version": "dev-master",
"version_normalized": "9999999-dev", "version_normalized": "dev-master",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/zoujingli/WeOpenDeveloper.git", "url": "https://github.com/zoujingli/WeOpenDeveloper.git",
@ -581,6 +618,10 @@
"WeChatOpen", "WeChatOpen",
"WeChatOpenDeveloper", "WeChatOpenDeveloper",
"wechat" "wechat"
] ],
"install-path": "../zoujingli/weopen-developer"
} }
] ],
"dev": false,
"dev-package-names": []
}

115
vendor/composer/installed.php vendored Normal file

@ -0,0 +1,115 @@
<?php return array(
'root' => array(
'pretty_version' => '5.x-dev',
'version' => '5.9999999.9999999.9999999-dev',
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'reference' => '6e2a989be5a020078f58c5f6fa4db0c577ffbb8f',
'name' => 'zoujingli/thinkadmin',
'dev' => false,
),
'versions' => array(
'aliyuncs/oss-sdk-php' => array(
'pretty_version' => 'v2.4.2',
'version' => '2.4.2.0',
'type' => 'library',
'install_path' => __DIR__ . '/../aliyuncs/oss-sdk-php',
'aliases' => array(),
'reference' => '0c9d902c33847c07efc66c4cdf823deaea8fc2b6',
'dev_requirement' => false,
),
'endroid/qr-code' => array(
'pretty_version' => '1.9.3',
'version' => '1.9.3.0',
'type' => 'library',
'install_path' => __DIR__ . '/../endroid/qr-code',
'aliases' => array(),
'reference' => 'c9644bec2a9cc9318e98d1437de3c628dcd1ef93',
'dev_requirement' => false,
),
'qiniu/php-sdk' => array(
'pretty_version' => 'v7.3.0',
'version' => '7.3.0.0',
'type' => 'library',
'install_path' => __DIR__ . '/../qiniu/php-sdk',
'aliases' => array(),
'reference' => '0a461e13b09545b23df361843c6a65fdd3a26426',
'dev_requirement' => false,
),
'symfony/options-resolver' => array(
'pretty_version' => 'v3.4.47',
'version' => '3.4.47.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/options-resolver',
'aliases' => array(),
'reference' => 'c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744',
'dev_requirement' => false,
),
'topthink/framework' => array(
'pretty_version' => 'v5.1.41',
'version' => '5.1.41.0',
'type' => 'think-framework',
'install_path' => __DIR__ . '/../../thinkphp',
'aliases' => array(),
'reference' => '7137741a323a4a60cfca334507cd1812fac91bb2',
'dev_requirement' => false,
),
'topthink/think-installer' => array(
'pretty_version' => 'v2.0.5',
'version' => '2.0.5.0',
'type' => 'composer-plugin',
'install_path' => __DIR__ . '/../topthink/think-installer',
'aliases' => array(),
'reference' => '38ba647706e35d6704b5d370c06f8a160b635f88',
'dev_requirement' => false,
),
'zoujingli/ip2region' => array(
'pretty_version' => 'v1.0.10',
'version' => '1.0.10.0',
'type' => 'library',
'install_path' => __DIR__ . '/../zoujingli/ip2region',
'aliases' => array(),
'reference' => '453480d0ab5b6fdbdf4aa400b7598a10ff2dc5c0',
'dev_requirement' => false,
),
'zoujingli/think-library' => array(
'pretty_version' => 'v5.1.x-dev',
'version' => '5.1.9999999.9999999-dev',
'type' => 'library',
'install_path' => __DIR__ . '/../zoujingli/think-library',
'aliases' => array(),
'reference' => '38c150e2a61280f1f16d16a08aeabdc18b551151',
'dev_requirement' => false,
),
'zoujingli/thinkadmin' => array(
'pretty_version' => '5.x-dev',
'version' => '5.9999999.9999999.9999999-dev',
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'reference' => '6e2a989be5a020078f58c5f6fa4db0c577ffbb8f',
'dev_requirement' => false,
),
'zoujingli/wechat-developer' => array(
'pretty_version' => 'v1.2.31',
'version' => '1.2.31.0',
'type' => 'library',
'install_path' => __DIR__ . '/../zoujingli/wechat-developer',
'aliases' => array(),
'reference' => '0cf699c725f69d66657a50e60d22f71c9e5a5e16',
'dev_requirement' => false,
),
'zoujingli/weopen-developer' => array(
'pretty_version' => 'dev-master',
'version' => 'dev-master',
'type' => 'library',
'install_path' => __DIR__ . '/../zoujingli/weopen-developer',
'aliases' => array(
0 => '9999999-dev',
),
'reference' => '4d0d3c064e54556621453845fc65ba52de58a880',
'dev_requirement' => false,
),
),
);

26
vendor/composer/platform_check.php vendored Normal file

@ -0,0 +1,26 @@
<?php
// platform_check.php @generated by Composer
$issues = array();
if (!(PHP_VERSION_ID >= 50600)) {
$issues[] = 'Your Composer dependencies require a PHP version ">= 5.6.0". You are running ' . PHP_VERSION . '.';
}
if ($issues) {
if (!headers_sent()) {
header('HTTP/1.1 500 Internal Server Error');
}
if (!ini_get('display_errors')) {
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
} elseif (!headers_sent()) {
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
}
}
trigger_error(
'Composer detected issues in your platform: ' . implode(' ', $issues),
E_USER_ERROR
);
}

@ -33,3 +33,10 @@ tools:
php_cpd: php_cpd:
enabled: true enabled: true
excluded_dirs: [vendor, tests] excluded_dirs: [vendor, tests]
build:
nodes:
analysis:
tests:
override:
- php-scrutinizer-run

@ -1,4 +1,3 @@
sudo: false
language: php language: php
php: php:
@ -8,6 +7,7 @@ php:
- 7.0 - 7.0
dist: trusty dist: trusty
os: linux
before_script: before_script:
- export QINIU_TEST_ENV="travis" - export QINIU_TEST_ENV="travis"
@ -18,13 +18,12 @@ script:
- ./vendor/bin/phpcs --standard=PSR2 src - ./vendor/bin/phpcs --standard=PSR2 src
- ./vendor/bin/phpcs --standard=PSR2 examples - ./vendor/bin/phpcs --standard=PSR2 examples
- ./vendor/bin/phpcs --standard=PSR2 tests - ./vendor/bin/phpcs --standard=PSR2 tests
- ./vendor/bin/phpunit --coverage-text --coverage-clover=coverage.clover tests/Qiniu/Tests/ - ./vendor/bin/phpunit --coverage-clover=coverage.xml
after_script:
- wget https://scrutinizer-ci.com/ocular.phar
- php ocular.phar code-coverage:upload --format=php-clover coverage.clover
env: env:
global: global:
- secure: "V9BsntXQZwvO9EOD6itzaae2uq+GemzyTUTxMTJx1/jFoUNpCU2O2UAgjA2XSEr5sgci0KWDV4Krbzv3EBB4uplOFLMI3w32256UHbT9E0x3YjhfPJZk68MH1iS1be7X81LDHON7yveavK8987s3qzjeUcbfLSPgccT+cvf7+dc="
- QINIU_ACCESS_KEY=vHg2e7nOh7Jsucv2Azr5FH6omPgX22zoJRWa0FN5 - QINIU_ACCESS_KEY=vHg2e7nOh7Jsucv2Azr5FH6omPgX22zoJRWa0FN5
- secure: "V9BsntXQZwvO9EOD6itzaae2uq+GemzyTUTxMTJx1/jFoUNpCU2O2UAgjA2XSEr5sgci0KWDV4Krbzv3EBB4uplOFLMI3w32256UHbT9E0x3YjhfPJZk68MH1iS1be7X81LDHON7yveavK8987s3qzjeUcbfLSPgccT+cvf7+dc="
after_success:
- bash <(curl -s https://codecov.io/bash)

@ -1,5 +1,32 @@
# Changelog # Changelog
## 7.3.0 (2020-09-24)
### 新增
* 【对象存储】增加异步抓取方法与demo
* 【融合cdn】增加查询CDN刷新记录、查询CDN预取记录方法与demo
* 【云短信】增加查询短信发送记录的方法
* 【实时音视频】增加rtc停止房间的合流转推方法
* 【内容审核】增加图片审核、视频审核方法与demo
### 修复
* 【对象存储】修复签算 token 时上传策略中的 forceSaveKey 字段不生效的问题
* 【对象存储】修复更新空间事件通知规则方法
### 优化
* 【对象存储】创建空间迁移到mkbucketv3 api
* 优化对 http2 返回头的判断
* 优化 demo 中的文档注释说明
* docs 目录下的 rtc demo 移动至 examples/rtc 目录下
* docs 目录下的 sms demo 移动至 examples/sms 目录下
## 7.2.10 (2019-10-28)
* 去除云短信类类型指定
* 修改不传文件名时存在表单上传错误的情况
## 7.2.9 (2019-07-09)
* 添加空间管理、云短信接口
* 去除无效参数
## 7.2.7 (2018-11-06) ## 7.2.7 (2018-11-06)
* 添加 QVM 内网上传到 KODO 的 zone 设置 * 添加 QVM 内网上传到 KODO 的 zone 设置

@ -1,21 +1,22 @@
# Qiniu Cloud SDK for PHP # Qiniu Cloud SDK for PHP
[![doxygen.io](http://doxygen.io/github.com/qiniu/php-sdk/?status.svg)](http://doxygen.io/github.com/qiniu/php-sdk/)
[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](LICENSE) [![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](LICENSE)
[![Build Status](https://travis-ci.org/qiniu/php-sdk.svg)](https://travis-ci.org/qiniu/php-sdk) [![Build Status](https://travis-ci.org/qiniu/php-sdk.svg)](https://travis-ci.org/qiniu/php-sdk)
[![GitHub release](https://img.shields.io/github/v/tag/qiniu/php-sdk.svg?label=release)](https://github.com/qiniu/php-sdk/releases)
[![Latest Stable Version](https://img.shields.io/packagist/v/qiniu/php-sdk.svg)](https://packagist.org/packages/qiniu/php-sdk) [![Latest Stable Version](https://img.shields.io/packagist/v/qiniu/php-sdk.svg)](https://packagist.org/packages/qiniu/php-sdk)
[![Total Downloads](https://img.shields.io/packagist/dt/qiniu/php-sdk.svg)](https://packagist.org/packages/qiniu/php-sdk) [![Total Downloads](https://img.shields.io/packagist/dt/qiniu/php-sdk.svg)](https://packagist.org/packages/qiniu/php-sdk)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/qiniu/php-sdk/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/qiniu/php-sdk/?branch=master) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/qiniu/php-sdk/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/qiniu/php-sdk/?branch=master)
[![Code Coverage](https://scrutinizer-ci.com/g/qiniu/php-sdk/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/qiniu/php-sdk/?branch=master) [![Coverage Status](https://codecov.io/gh/qiniu/php-sdk/branch/master/graph/badge.svg)](https://codecov.io/gh/qiniu/php-sdk)
[![Join Chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/qiniu/php-sdk?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Join Chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/qiniu/php-sdk?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![@qiniu on weibo](http://img.shields.io/badge/weibo-%40qiniutek-blue.svg)](http://weibo.com/qiniutek) [![@qiniu on weibo](http://img.shields.io/badge/weibo-%40qiniutek-blue.svg)](http://weibo.com/qiniutek)
## 安装 ## 安装
* 通过composer这是推荐的方式可以使用composer.json 声明依赖或者运行下面的命令。SDK 包已经放到这里 [`qiniu/php-sdk`][install-packagist] 。 * 推荐使用 `composer` 进行安装。可以使用 composer.json 声明依赖或者运行下面的命令。SDK 包已经放到这里 [`qiniu/php-sdk`][install-packagist] 。
```bash ```bash
$ composer require qiniu/php-sdk $ composer require qiniu/php-sdk
``` ```
* 直接下载安装SDK 没有依赖其他第三方库,但需要参照 composer的autoloader增加一个自己的autoloader程序。 * 直接下载安装SDK 没有依赖其他第三方库,但需要参照 composer autoloader增加一个自己的 autoloader 程序。
## 运行环境 ## 运行环境
@ -31,10 +32,10 @@ $ composer require qiniu/php-sdk
use Qiniu\Storage\UploadManager; use Qiniu\Storage\UploadManager;
use Qiniu\Auth; use Qiniu\Auth;
... ...
$upManager = new UploadManager(); $uploadMgr = new UploadManager();
$auth = new Auth($accessKey, $secretKey); $auth = new Auth($accessKey, $secretKey);
$token = $auth->uploadToken($bucketName); $token = $auth->uploadToken($bucket);
list($ret, $error) = $upManager->put($token, 'formput', 'hello world'); list($ret, $error) = $uploadMgr->putFile($token, 'key', 'filePath');
... ...
``` ```
@ -46,8 +47,8 @@ $ ./vendor/bin/phpunit tests/Qiniu/Tests/
## 常见问题 ## 常见问题
- $error保留了请求响应的信息失败情况下ret 为none, 将$error可以打印出来提交给我们。 - `$error` 保留了请求响应的信息,失败情况下 `ret` `none`, 将 `$error` 可以打印出来,提交给我们。
- API 的使用 demo 可以参考 [单元测试](https://github.com/qiniu/php-sdk/blob/master/tests)。 - API 的使用 demo 可以参考 [examples](https://github.com/qiniu/php-sdk/tree/master/examples)。
## 代码贡献 ## 代码贡献
@ -60,12 +61,12 @@ $ ./vendor/bin/phpunit tests/Qiniu/Tests/
## 联系我们 ## 联系我们
- 如果需要帮助请提交工单在portal右侧点击咨询和建议提交工单或者直接向 support@qiniu.com 发送邮件) - 如果需要帮助请提交工单在portal右侧点击咨询和建议提交工单或者直接向 support@qiniu.com 发送邮件)
- 如果有什么问题,可以到问答社区提问,[问答社区](http://qiniu.segmentfault.com/) - 如果有什么问题,可以到问答社区提问,[问答社区](https://qiniu.segmentfault.com/)
- 更详细的文档,见[官方文档站](http://developer.qiniu.com/) - 更详细的文档,见[官方文档站](https://developer.qiniu.com/)
- 如果发现了bug 欢迎提交 [issue](https://github.com/qiniu/php-sdk/issues) - 如果发现了 bug 欢迎提交 [issue](https://github.com/qiniu/php-sdk/issues)
- 如果有功能需求,欢迎提交 [issue](https://github.com/qiniu/php-sdk/issues) - 如果有功能需求,欢迎提交 [issue](https://github.com/qiniu/php-sdk/issues)
- 如果要提交代码,欢迎提交 pull request - 如果要提交代码,欢迎提交 pull request
- 欢迎关注我们的[微信](http://www.qiniu.com/#weixin) [微博](http://weibo.com/qiniutek),及时获取动态信息。 - 欢迎关注我们的[微信](https://www.qiniu.com/#weixin) [微博](https://weibo.com/qiniutek),及时获取动态信息。
## 代码许可 ## 代码许可

@ -1,71 +0,0 @@
# Rtc Streaming Cloud Server-Side Library For PHP
## Features
- Appclient
- [x] 创建房间: client->createApp()
- [x] 查看房间: client->getApp()
- [x] 删除房间: client->deleteApp()
- [x] 生成房间token: client->appToken()
## Contents
- [Installation](#installation)
- [Usage](#usage)
- [Configuration](#configuration)
- [App](#app)
- [Create a app](#create-a-app)
- [Get a app](#get-a-app)
- [Delete a app](#delete-a-app)
- [Generate a app token](#generate-a-app-token)
## Usage
### App
#### Create a app
```php
$ak = "gwd_gV4gPKZZsmEOvAuNU1AcumicmuHooTfu64q5";
$sk = "xxxx";
$auth = new Auth($ak, $sk);
$client = new Qiniu\Rtc\AppClient($auth);
$resp=$client->createApp("901","testApp");
print_r($resp);
```
#### Get an app
```php
$ak = "gwd_gV4gPKZZsmEOvAuNU1AcumicmuHooTfu64q5";
$sk = "xxxx";
$auth = new Auth($ak, $sk);
$client = new Qiniu\Rtc\AppClient($auth);
$resp=$client->getApp("deq02uhb6");
print_r($resp);
```
#### Delete an app
```php
$ak = "gwd_gV4gPKZZsmEOvAuNU1AcumicmuHooTfu64q5";
$sk = "xxxx";
$auth = new Auth($ak, $sk);
$client = new Qiniu\Rtc\AppClient($auth);
$resp=$client->deleteApp("deq02uhb6");
print_r($resp);
```
#### Generate an app token
```php
$ak = "gwd_gV4gPKZZsmEOvAuNU1AcumicmuHooTfu64q5";
$sk = "xxxx";
$auth = new Auth($ak, $sk);
$client = new Qiniu\Rtc\AppClient($auth);
$resp=$client->appToken("deq02uhb6", "lfx", '1111', (time()+3600), 'user');
print_r($resp);
```

Some files were not shown because too many files have changed in this diff Show More