From 78fa827ef7209fc9408f6fbd6608a75bc00e22c6 Mon Sep 17 00:00:00 2001
From: liut <4435316@qq.com>
Date: Tue, 12 Oct 2021 11:11:57 +0800
Subject: [PATCH] 1
---
.gitignore | 3 +-
runtime/.gitignore | 2 -
thinkphp/.gitignore | 8 +
thinkphp/.htaccess | 1 +
thinkphp/CONTRIBUTING.md | 119 +
thinkphp/LICENSE.txt | 32 +
thinkphp/README.md | 99 +
thinkphp/base.php | 52 +
thinkphp/composer.json | 35 +
thinkphp/convention.php | 327 +
thinkphp/helper.php | 726 ++
thinkphp/lang/zh-cn.php | 144 +
thinkphp/library/think/App.php | 979 +++
thinkphp/library/think/Build.php | 415 +
thinkphp/library/think/Cache.php | 133 +
thinkphp/library/think/Collection.php | 552 ++
thinkphp/library/think/Config.php | 398 +
thinkphp/library/think/Console.php | 829 ++
thinkphp/library/think/Container.php | 618 ++
thinkphp/library/think/Controller.php | 287 +
thinkphp/library/think/Cookie.php | 268 +
thinkphp/library/think/Db.php | 197 +
thinkphp/library/think/Debug.php | 278 +
thinkphp/library/think/Env.php | 113 +
thinkphp/library/think/Error.php | 147 +
thinkphp/library/think/Exception.php | 56 +
thinkphp/library/think/Facade.php | 125 +
thinkphp/library/think/File.php | 496 ++
thinkphp/library/think/Hook.php | 220 +
thinkphp/library/think/Lang.php | 284 +
thinkphp/library/think/Loader.php | 417 +
thinkphp/library/think/Log.php | 389 +
thinkphp/library/think/Middleware.php | 205 +
thinkphp/library/think/Model.php | 1125 +++
thinkphp/library/think/Paginator.php | 445 +
thinkphp/library/think/Process.php | 1268 +++
thinkphp/library/think/Request.php | 2267 +++++
thinkphp/library/think/Response.php | 429 +
thinkphp/library/think/Route.php | 992 +++
thinkphp/library/think/Session.php | 579 ++
thinkphp/library/think/Template.php | 1318 +++
thinkphp/library/think/Url.php | 412 +
thinkphp/library/think/Validate.php | 1556 ++++
thinkphp/library/think/View.php | 253 +
thinkphp/library/think/cache/Driver.php | 366 +
thinkphp/library/think/cache/driver/File.php | 307 +
thinkphp/library/think/cache/driver/Lite.php | 209 +
.../library/think/cache/driver/Memcache.php | 206 +
.../library/think/cache/driver/Memcached.php | 279 +
thinkphp/library/think/cache/driver/Redis.php | 272 +
.../library/think/cache/driver/Sqlite.php | 233 +
.../library/think/cache/driver/Wincache.php | 175 +
.../library/think/cache/driver/Xcache.php | 179 +
thinkphp/library/think/config/driver/Ini.php | 31 +
thinkphp/library/think/config/driver/Json.php | 31 +
thinkphp/library/think/config/driver/Xml.php | 40 +
thinkphp/library/think/console/Command.php | 482 ++
thinkphp/library/think/console/Input.php | 464 ++
thinkphp/library/think/console/LICENSE | 19 +
thinkphp/library/think/console/Output.php | 222 +
thinkphp/library/think/console/Table.php | 281 +
thinkphp/library/think/console/bin/README.md | 1 +
.../library/think/console/bin/hiddeninput.exe | Bin 0 -> 9216 bytes
.../library/think/console/command/Build.php | 59 +
.../library/think/console/command/Clear.php | 70 +
.../library/think/console/command/Help.php | 68 +
.../library/think/console/command/Lists.php | 73 +
.../library/think/console/command/Make.php | 110 +
.../think/console/command/RouteList.php | 130 +
.../think/console/command/RunServer.php | 53 +
.../library/think/console/command/Version.php | 31 +
.../think/console/command/make/Command.php | 56 +
.../think/console/command/make/Controller.php | 56 +
.../think/console/command/make/Middleware.php | 36 +
.../think/console/command/make/Model.php | 36 +
.../think/console/command/make/Validate.php | 39 +
.../console/command/make/stubs/command.stub | 24 +
.../command/make/stubs/controller.api.stub | 64 +
.../command/make/stubs/controller.plain.stub | 10 +
.../command/make/stubs/controller.stub | 85 +
.../command/make/stubs/middleware.stub | 10 +
.../console/command/make/stubs/model.stub | 10 +
.../console/command/make/stubs/validate.stub | 24 +
.../console/command/optimize/Autoload.php | 279 +
.../think/console/command/optimize/Config.php | 107 +
.../think/console/command/optimize/Route.php | 66 +
.../think/console/command/optimize/Schema.php | 118 +
.../library/think/console/input/Argument.php | 115 +
.../think/console/input/Definition.php | 375 +
.../library/think/console/input/Option.php | 190 +
thinkphp/library/think/console/output/Ask.php | 340 +
.../think/console/output/Descriptor.php | 319 +
.../think/console/output/Formatter.php | 198 +
.../library/think/console/output/Question.php | 211 +
.../console/output/descriptor/Console.php | 153 +
.../think/console/output/driver/Buffer.php | 52 +
.../think/console/output/driver/Console.php | 368 +
.../think/console/output/driver/Nothing.php | 33 +
.../think/console/output/formatter/Stack.php | 116 +
.../think/console/output/formatter/Style.php | 189 +
.../think/console/output/question/Choice.php | 163 +
.../console/output/question/Confirmation.php | 57 +
thinkphp/library/think/db/Builder.php | 1173 +++
thinkphp/library/think/db/Connection.php | 2152 +++++
thinkphp/library/think/db/Expression.php | 48 +
thinkphp/library/think/db/Query.php | 3766 +++++++++
thinkphp/library/think/db/Where.php | 178 +
thinkphp/library/think/db/builder/Mysql.php | 184 +
thinkphp/library/think/db/builder/Pgsql.php | 104 +
thinkphp/library/think/db/builder/Sqlite.php | 96 +
thinkphp/library/think/db/builder/Sqlsrv.php | 159 +
thinkphp/library/think/db/connector/Mysql.php | 229 +
thinkphp/library/think/db/connector/Pgsql.php | 116 +
.../library/think/db/connector/Sqlite.php | 108 +
.../library/think/db/connector/Sqlsrv.php | 235 +
thinkphp/library/think/db/connector/pgsql.sql | 153 +
.../think/db/exception/BindParamException.php | 36 +
.../db/exception/DataNotFoundException.php | 44 +
.../db/exception/ModelNotFoundException.php | 45 +
thinkphp/library/think/debug/Console.php | 156 +
thinkphp/library/think/debug/Html.php | 106 +
.../exception/ClassNotFoundException.php | 32 +
.../library/think/exception/DbException.php | 44 +
.../think/exception/ErrorException.php | 56 +
thinkphp/library/think/exception/Handle.php | 306 +
.../library/think/exception/HttpException.php | 36 +
.../think/exception/HttpResponseException.php | 33 +
.../library/think/exception/PDOException.php | 40 +
.../exception/RouteNotFoundException.php | 22 +
.../exception/TemplateNotFoundException.php | 33 +
.../think/exception/ThrowableError.php | 47 +
.../think/exception/ValidateException.php | 34 +
thinkphp/library/think/facade/App.php | 63 +
thinkphp/library/think/facade/Build.php | 33 +
thinkphp/library/think/facade/Cache.php | 45 +
thinkphp/library/think/facade/Config.php | 39 +
thinkphp/library/think/facade/Cookie.php | 39 +
thinkphp/library/think/facade/Debug.php | 40 +
thinkphp/library/think/facade/Env.php | 34 +
thinkphp/library/think/facade/Hook.php | 37 +
thinkphp/library/think/facade/Lang.php | 41 +
thinkphp/library/think/facade/Log.php | 50 +
thinkphp/library/think/facade/Middleware.php | 36 +
thinkphp/library/think/facade/Request.php | 97 +
thinkphp/library/think/facade/Response.php | 47 +
thinkphp/library/think/facade/Route.php | 57 +
thinkphp/library/think/facade/Session.php | 46 +
thinkphp/library/think/facade/Template.php | 36 +
thinkphp/library/think/facade/Url.php | 33 +
thinkphp/library/think/facade/Validate.php | 75 +
thinkphp/library/think/facade/View.php | 40 +
thinkphp/library/think/log/driver/File.php | 287 +
thinkphp/library/think/log/driver/Socket.php | 279 +
thinkphp/library/think/model/Collection.php | 118 +
thinkphp/library/think/model/Pivot.php | 42 +
thinkphp/library/think/model/Relation.php | 187 +
.../library/think/model/concern/Attribute.php | 656 ++
.../think/model/concern/Conversion.php | 273 +
.../think/model/concern/ModelEvent.php | 238 +
.../think/model/concern/RelationShip.php | 697 ++
.../think/model/concern/SoftDelete.php | 246 +
.../library/think/model/concern/TimeStamp.php | 92 +
.../think/model/relation/BelongsTo.php | 323 +
.../think/model/relation/BelongsToMany.php | 712 ++
.../library/think/model/relation/HasMany.php | 360 +
.../think/model/relation/HasManyThrough.php | 363 +
.../library/think/model/relation/HasOne.php | 294 +
.../think/model/relation/MorphMany.php | 342 +
.../library/think/model/relation/MorphOne.php | 257 +
.../library/think/model/relation/MorphTo.php | 316 +
.../library/think/model/relation/OneToOne.php | 337 +
.../think/paginator/driver/Bootstrap.php | 206 +
thinkphp/library/think/process/Builder.php | 233 +
thinkphp/library/think/process/Utils.php | 75 +
.../library/think/process/exception/Faild.php | 42 +
.../think/process/exception/Failed.php | 42 +
.../think/process/exception/Timeout.php | 61 +
.../library/think/process/pipes/Pipes.php | 93 +
thinkphp/library/think/process/pipes/Unix.php | 196 +
.../library/think/process/pipes/Windows.php | 228 +
thinkphp/library/think/response/Download.php | 148 +
thinkphp/library/think/response/Json.php | 51 +
thinkphp/library/think/response/Jsonp.php | 58 +
thinkphp/library/think/response/Jump.php | 32 +
thinkphp/library/think/response/Redirect.php | 119 +
thinkphp/library/think/response/View.php | 119 +
thinkphp/library/think/response/Xml.php | 116 +
thinkphp/library/think/route/AliasRule.php | 119 +
thinkphp/library/think/route/Dispatch.php | 366 +
thinkphp/library/think/route/Domain.php | 237 +
thinkphp/library/think/route/Resource.php | 126 +
thinkphp/library/think/route/Rule.php | 1130 +++
thinkphp/library/think/route/RuleGroup.php | 601 ++
thinkphp/library/think/route/RuleItem.php | 292 +
thinkphp/library/think/route/RuleName.php | 147 +
.../library/think/route/dispatch/Callback.php | 26 +
.../think/route/dispatch/Controller.php | 30 +
.../library/think/route/dispatch/Module.php | 138 +
.../library/think/route/dispatch/Redirect.php | 23 +
.../library/think/route/dispatch/Response.php | 23 +
thinkphp/library/think/route/dispatch/Url.php | 169 +
.../library/think/route/dispatch/View.php | 26 +
.../library/think/session/driver/Memcache.php | 124 +
.../think/session/driver/Memcached.php | 135 +
.../library/think/session/driver/Redis.php | 179 +
thinkphp/library/think/template/TagLib.php | 351 +
.../library/think/template/driver/File.php | 83 +
thinkphp/library/think/template/taglib/Cx.php | 724 ++
.../library/think/validate/ValidateRule.php | 171 +
thinkphp/library/think/view/driver/Php.php | 183 +
thinkphp/library/think/view/driver/Think.php | 192 +
thinkphp/library/traits/controller/Jump.php | 168 +
thinkphp/logo.png | Bin 0 -> 6995 bytes
thinkphp/phpunit.xml.dist | 41 +
thinkphp/tpl/default_index.tpl | 10 +
thinkphp/tpl/dispatch_jump.tpl | 49 +
thinkphp/tpl/page_trace.tpl | 71 +
thinkphp/tpl/think_exception.tpl | 507 ++
vendor/aferrandini/phpqrcode/.gitignore | 1 +
vendor/aferrandini/phpqrcode/LICENSE | 165 +
vendor/aferrandini/phpqrcode/VERSION | 2 +
.../aferrandini/phpqrcode/cache/frame_1.dat | 2 +
.../aferrandini/phpqrcode/cache/frame_1.png | Bin 0 -> 126 bytes
.../aferrandini/phpqrcode/cache/frame_10.dat | Bin 0 -> 204 bytes
.../aferrandini/phpqrcode/cache/frame_10.png | Bin 0 -> 202 bytes
.../aferrandini/phpqrcode/cache/frame_11.dat | Bin 0 -> 210 bytes
.../aferrandini/phpqrcode/cache/frame_11.png | Bin 0 -> 205 bytes
.../aferrandini/phpqrcode/cache/frame_12.dat | Bin 0 -> 222 bytes
.../aferrandini/phpqrcode/cache/frame_12.png | Bin 0 -> 216 bytes
.../aferrandini/phpqrcode/cache/frame_13.dat | Bin 0 -> 223 bytes
.../aferrandini/phpqrcode/cache/frame_13.png | Bin 0 -> 210 bytes
.../aferrandini/phpqrcode/cache/frame_14.dat | Bin 0 -> 227 bytes
.../aferrandini/phpqrcode/cache/frame_14.png | Bin 0 -> 213 bytes
.../aferrandini/phpqrcode/cache/frame_15.dat | Bin 0 -> 242 bytes
.../aferrandini/phpqrcode/cache/frame_15.png | Bin 0 -> 219 bytes
.../aferrandini/phpqrcode/cache/frame_16.dat | 1 +
.../aferrandini/phpqrcode/cache/frame_16.png | Bin 0 -> 211 bytes
.../aferrandini/phpqrcode/cache/frame_17.dat | Bin 0 -> 237 bytes
.../aferrandini/phpqrcode/cache/frame_17.png | Bin 0 -> 211 bytes
.../aferrandini/phpqrcode/cache/frame_18.dat | 2 +
.../aferrandini/phpqrcode/cache/frame_18.png | Bin 0 -> 228 bytes
.../aferrandini/phpqrcode/cache/frame_19.dat | 3 +
.../aferrandini/phpqrcode/cache/frame_19.png | Bin 0 -> 225 bytes
.../aferrandini/phpqrcode/cache/frame_2.dat | 1 +
.../aferrandini/phpqrcode/cache/frame_2.png | Bin 0 -> 144 bytes
.../aferrandini/phpqrcode/cache/frame_20.dat | Bin 0 -> 250 bytes
.../aferrandini/phpqrcode/cache/frame_20.png | Bin 0 -> 225 bytes
.../aferrandini/phpqrcode/cache/frame_21.dat | 1 +
.../aferrandini/phpqrcode/cache/frame_21.png | Bin 0 -> 235 bytes
.../aferrandini/phpqrcode/cache/frame_22.dat | 3 +
.../aferrandini/phpqrcode/cache/frame_22.png | Bin 0 -> 226 bytes
.../aferrandini/phpqrcode/cache/frame_23.dat | 3 +
.../aferrandini/phpqrcode/cache/frame_23.png | Bin 0 -> 220 bytes
.../aferrandini/phpqrcode/cache/frame_24.dat | 1 +
.../aferrandini/phpqrcode/cache/frame_24.png | Bin 0 -> 242 bytes
.../aferrandini/phpqrcode/cache/frame_25.dat | 3 +
.../aferrandini/phpqrcode/cache/frame_25.png | Bin 0 -> 242 bytes
.../aferrandini/phpqrcode/cache/frame_26.dat | 2 +
.../aferrandini/phpqrcode/cache/frame_26.png | Bin 0 -> 244 bytes
.../aferrandini/phpqrcode/cache/frame_27.dat | Bin 0 -> 284 bytes
.../aferrandini/phpqrcode/cache/frame_27.png | Bin 0 -> 237 bytes
.../aferrandini/phpqrcode/cache/frame_28.dat | Bin 0 -> 318 bytes
.../aferrandini/phpqrcode/cache/frame_28.png | Bin 0 -> 234 bytes
.../aferrandini/phpqrcode/cache/frame_29.dat | 2 +
.../aferrandini/phpqrcode/cache/frame_29.png | Bin 0 -> 232 bytes
.../aferrandini/phpqrcode/cache/frame_3.dat | 1 +
.../aferrandini/phpqrcode/cache/frame_3.png | Bin 0 -> 147 bytes
.../aferrandini/phpqrcode/cache/frame_30.dat | Bin 0 -> 324 bytes
.../aferrandini/phpqrcode/cache/frame_30.png | Bin 0 -> 255 bytes
.../aferrandini/phpqrcode/cache/frame_31.dat | 1 +
.../aferrandini/phpqrcode/cache/frame_31.png | Bin 0 -> 260 bytes
.../aferrandini/phpqrcode/cache/frame_32.dat | 2 +
.../aferrandini/phpqrcode/cache/frame_32.png | Bin 0 -> 262 bytes
.../aferrandini/phpqrcode/cache/frame_33.dat | 14 +
.../aferrandini/phpqrcode/cache/frame_33.png | Bin 0 -> 253 bytes
.../aferrandini/phpqrcode/cache/frame_34.dat | Bin 0 -> 331 bytes
.../aferrandini/phpqrcode/cache/frame_34.png | Bin 0 -> 256 bytes
.../aferrandini/phpqrcode/cache/frame_35.dat | Bin 0 -> 342 bytes
.../aferrandini/phpqrcode/cache/frame_35.png | Bin 0 -> 243 bytes
.../aferrandini/phpqrcode/cache/frame_36.dat | Bin 0 -> 370 bytes
.../aferrandini/phpqrcode/cache/frame_36.png | Bin 0 -> 272 bytes
.../aferrandini/phpqrcode/cache/frame_37.dat | Bin 0 -> 376 bytes
.../aferrandini/phpqrcode/cache/frame_37.png | Bin 0 -> 279 bytes
.../aferrandini/phpqrcode/cache/frame_38.dat | 1 +
.../aferrandini/phpqrcode/cache/frame_38.png | Bin 0 -> 279 bytes
.../aferrandini/phpqrcode/cache/frame_39.dat | Bin 0 -> 404 bytes
.../aferrandini/phpqrcode/cache/frame_39.png | Bin 0 -> 264 bytes
.../aferrandini/phpqrcode/cache/frame_4.dat | 1 +
.../aferrandini/phpqrcode/cache/frame_4.png | Bin 0 -> 149 bytes
.../aferrandini/phpqrcode/cache/frame_40.dat | 2 +
.../aferrandini/phpqrcode/cache/frame_40.png | Bin 0 -> 267 bytes
.../aferrandini/phpqrcode/cache/frame_5.dat | 1 +
.../aferrandini/phpqrcode/cache/frame_5.png | Bin 0 -> 150 bytes
.../aferrandini/phpqrcode/cache/frame_6.dat | Bin 0 -> 132 bytes
.../aferrandini/phpqrcode/cache/frame_6.png | Bin 0 -> 151 bytes
.../aferrandini/phpqrcode/cache/frame_7.dat | Bin 0 -> 196 bytes
.../aferrandini/phpqrcode/cache/frame_7.png | Bin 0 -> 189 bytes
.../aferrandini/phpqrcode/cache/frame_8.dat | Bin 0 -> 201 bytes
.../aferrandini/phpqrcode/cache/frame_8.png | Bin 0 -> 204 bytes
.../aferrandini/phpqrcode/cache/frame_9.dat | Bin 0 -> 206 bytes
.../aferrandini/phpqrcode/cache/frame_9.png | Bin 0 -> 199 bytes
.../phpqrcode/cache/mask_0/mask_101_0.dat | Bin 0 -> 157 bytes
.../phpqrcode/cache/mask_0/mask_105_0.dat | Bin 0 -> 162 bytes
.../phpqrcode/cache/mask_0/mask_109_0.dat | 2 +
.../phpqrcode/cache/mask_0/mask_113_0.dat | 2 +
.../phpqrcode/cache/mask_0/mask_117_0.dat | 2 +
.../phpqrcode/cache/mask_0/mask_121_0.dat | 1 +
.../phpqrcode/cache/mask_0/mask_125_0.dat | 2 +
.../phpqrcode/cache/mask_0/mask_129_0.dat | 2 +
.../phpqrcode/cache/mask_0/mask_133_0.dat | 2 +
.../phpqrcode/cache/mask_0/mask_137_0.dat | 1 +
.../phpqrcode/cache/mask_0/mask_141_0.dat | 2 +
.../phpqrcode/cache/mask_0/mask_145_0.dat | 2 +
.../phpqrcode/cache/mask_0/mask_149_0.dat | 3 +
.../phpqrcode/cache/mask_0/mask_153_0.dat | 1 +
.../phpqrcode/cache/mask_0/mask_157_0.dat | 2 +
.../phpqrcode/cache/mask_0/mask_161_0.dat | Bin 0 -> 241 bytes
.../phpqrcode/cache/mask_0/mask_165_0.dat | 2 +
.../phpqrcode/cache/mask_0/mask_169_0.dat | 2 +
.../phpqrcode/cache/mask_0/mask_173_0.dat | 1 +
.../phpqrcode/cache/mask_0/mask_177_0.dat | 2 +
.../phpqrcode/cache/mask_0/mask_21_0.dat | Bin 0 -> 48 bytes
.../phpqrcode/cache/mask_0/mask_25_0.dat | Bin 0 -> 57 bytes
.../phpqrcode/cache/mask_0/mask_29_0.dat | Bin 0 -> 59 bytes
.../phpqrcode/cache/mask_0/mask_33_0.dat | Bin 0 -> 62 bytes
.../phpqrcode/cache/mask_0/mask_37_0.dat | Bin 0 -> 65 bytes
.../phpqrcode/cache/mask_0/mask_41_0.dat | Bin 0 -> 68 bytes
.../phpqrcode/cache/mask_0/mask_45_0.dat | Bin 0 -> 106 bytes
.../phpqrcode/cache/mask_0/mask_49_0.dat | 2 +
.../phpqrcode/cache/mask_0/mask_53_0.dat | 2 +
.../phpqrcode/cache/mask_0/mask_57_0.dat | 4 +
.../phpqrcode/cache/mask_0/mask_61_0.dat | Bin 0 -> 119 bytes
.../phpqrcode/cache/mask_0/mask_65_0.dat | Bin 0 -> 123 bytes
.../phpqrcode/cache/mask_0/mask_69_0.dat | 1 +
.../phpqrcode/cache/mask_0/mask_73_0.dat | 1 +
.../phpqrcode/cache/mask_0/mask_77_0.dat | 2 +
.../phpqrcode/cache/mask_0/mask_81_0.dat | 2 +
.../phpqrcode/cache/mask_0/mask_85_0.dat | 2 +
.../phpqrcode/cache/mask_0/mask_89_0.dat | 1 +
.../phpqrcode/cache/mask_0/mask_93_0.dat | 3 +
.../phpqrcode/cache/mask_0/mask_97_0.dat | Bin 0 -> 150 bytes
.../phpqrcode/cache/mask_1/mask_101_1.dat | 2 +
.../phpqrcode/cache/mask_1/mask_105_1.dat | 1 +
.../phpqrcode/cache/mask_1/mask_109_1.dat | 1 +
.../phpqrcode/cache/mask_1/mask_113_1.dat | 1 +
.../phpqrcode/cache/mask_1/mask_117_1.dat | 2 +
.../phpqrcode/cache/mask_1/mask_121_1.dat | 2 +
.../phpqrcode/cache/mask_1/mask_125_1.dat | 2 +
.../phpqrcode/cache/mask_1/mask_129_1.dat | Bin 0 -> 164 bytes
.../phpqrcode/cache/mask_1/mask_133_1.dat | 1 +
.../phpqrcode/cache/mask_1/mask_137_1.dat | 3 +
.../phpqrcode/cache/mask_1/mask_141_1.dat | 2 +
.../phpqrcode/cache/mask_1/mask_145_1.dat | 1 +
.../phpqrcode/cache/mask_1/mask_149_1.dat | 1 +
.../phpqrcode/cache/mask_1/mask_153_1.dat | 2 +
.../phpqrcode/cache/mask_1/mask_157_1.dat | 2 +
.../phpqrcode/cache/mask_1/mask_161_1.dat | 1 +
.../phpqrcode/cache/mask_1/mask_165_1.dat | 1 +
.../phpqrcode/cache/mask_1/mask_169_1.dat | 1 +
.../phpqrcode/cache/mask_1/mask_173_1.dat | 1 +
.../phpqrcode/cache/mask_1/mask_177_1.dat | 1 +
.../phpqrcode/cache/mask_1/mask_21_1.dat | Bin 0 -> 42 bytes
.../phpqrcode/cache/mask_1/mask_25_1.dat | Bin 0 -> 48 bytes
.../phpqrcode/cache/mask_1/mask_29_1.dat | Bin 0 -> 50 bytes
.../phpqrcode/cache/mask_1/mask_33_1.dat | Bin 0 -> 53 bytes
.../phpqrcode/cache/mask_1/mask_37_1.dat | Bin 0 -> 56 bytes
.../phpqrcode/cache/mask_1/mask_41_1.dat | Bin 0 -> 58 bytes
.../phpqrcode/cache/mask_1/mask_45_1.dat | Bin 0 -> 82 bytes
.../phpqrcode/cache/mask_1/mask_49_1.dat | Bin 0 -> 84 bytes
.../phpqrcode/cache/mask_1/mask_53_1.dat | Bin 0 -> 87 bytes
.../phpqrcode/cache/mask_1/mask_57_1.dat | Bin 0 -> 92 bytes
.../phpqrcode/cache/mask_1/mask_61_1.dat | 1 +
.../phpqrcode/cache/mask_1/mask_65_1.dat | Bin 0 -> 99 bytes
.../phpqrcode/cache/mask_1/mask_69_1.dat | Bin 0 -> 102 bytes
.../phpqrcode/cache/mask_1/mask_73_1.dat | Bin 0 -> 104 bytes
.../phpqrcode/cache/mask_1/mask_77_1.dat | Bin 0 -> 110 bytes
.../phpqrcode/cache/mask_1/mask_81_1.dat | Bin 0 -> 114 bytes
.../phpqrcode/cache/mask_1/mask_85_1.dat | 2 +
.../phpqrcode/cache/mask_1/mask_89_1.dat | 1 +
.../phpqrcode/cache/mask_1/mask_93_1.dat | 2 +
.../phpqrcode/cache/mask_1/mask_97_1.dat | 2 +
.../phpqrcode/cache/mask_2/mask_101_2.dat | 3 +
.../phpqrcode/cache/mask_2/mask_105_2.dat | 1 +
.../phpqrcode/cache/mask_2/mask_109_2.dat | 2 +
.../phpqrcode/cache/mask_2/mask_113_2.dat | 1 +
.../phpqrcode/cache/mask_2/mask_117_2.dat | 2 +
.../phpqrcode/cache/mask_2/mask_121_2.dat | Bin 0 -> 127 bytes
.../phpqrcode/cache/mask_2/mask_125_2.dat | 1 +
.../phpqrcode/cache/mask_2/mask_129_2.dat | 2 +
.../phpqrcode/cache/mask_2/mask_133_2.dat | 10 +
.../phpqrcode/cache/mask_2/mask_137_2.dat | 2 +
.../phpqrcode/cache/mask_2/mask_141_2.dat | 2 +
.../phpqrcode/cache/mask_2/mask_145_2.dat | 4 +
.../phpqrcode/cache/mask_2/mask_149_2.dat | 1 +
.../phpqrcode/cache/mask_2/mask_153_2.dat | 2 +
.../phpqrcode/cache/mask_2/mask_157_2.dat | 3 +
.../phpqrcode/cache/mask_2/mask_161_2.dat | Bin 0 -> 190 bytes
.../phpqrcode/cache/mask_2/mask_165_2.dat | 2 +
.../phpqrcode/cache/mask_2/mask_169_2.dat | Bin 0 -> 196 bytes
.../phpqrcode/cache/mask_2/mask_173_2.dat | 1 +
.../phpqrcode/cache/mask_2/mask_177_2.dat | 2 +
.../phpqrcode/cache/mask_2/mask_21_2.dat | Bin 0 -> 35 bytes
.../phpqrcode/cache/mask_2/mask_25_2.dat | Bin 0 -> 41 bytes
.../phpqrcode/cache/mask_2/mask_29_2.dat | Bin 0 -> 45 bytes
.../phpqrcode/cache/mask_2/mask_33_2.dat | Bin 0 -> 47 bytes
.../phpqrcode/cache/mask_2/mask_37_2.dat | Bin 0 -> 47 bytes
.../phpqrcode/cache/mask_2/mask_41_2.dat | 1 +
.../phpqrcode/cache/mask_2/mask_45_2.dat | Bin 0 -> 68 bytes
.../phpqrcode/cache/mask_2/mask_49_2.dat | Bin 0 -> 70 bytes
.../phpqrcode/cache/mask_2/mask_53_2.dat | Bin 0 -> 73 bytes
.../phpqrcode/cache/mask_2/mask_57_2.dat | Bin 0 -> 76 bytes
.../phpqrcode/cache/mask_2/mask_61_2.dat | Bin 0 -> 78 bytes
.../phpqrcode/cache/mask_2/mask_65_2.dat | Bin 0 -> 89 bytes
.../phpqrcode/cache/mask_2/mask_69_2.dat | Bin 0 -> 88 bytes
.../phpqrcode/cache/mask_2/mask_73_2.dat | Bin 0 -> 94 bytes
.../phpqrcode/cache/mask_2/mask_77_2.dat | 1 +
.../phpqrcode/cache/mask_2/mask_81_2.dat | 2 +
.../phpqrcode/cache/mask_2/mask_85_2.dat | 2 +
.../phpqrcode/cache/mask_2/mask_89_2.dat | 1 +
.../phpqrcode/cache/mask_2/mask_93_2.dat | Bin 0 -> 103 bytes
.../phpqrcode/cache/mask_2/mask_97_2.dat | 2 +
.../phpqrcode/cache/mask_3/mask_101_3.dat | 1 +
.../phpqrcode/cache/mask_3/mask_105_3.dat | 1 +
.../phpqrcode/cache/mask_3/mask_109_3.dat | 1 +
.../phpqrcode/cache/mask_3/mask_113_3.dat | 2 +
.../phpqrcode/cache/mask_3/mask_117_3.dat | 4 +
.../phpqrcode/cache/mask_3/mask_121_3.dat | Bin 0 -> 212 bytes
.../phpqrcode/cache/mask_3/mask_125_3.dat | 2 +
.../phpqrcode/cache/mask_3/mask_129_3.dat | 8 +
.../phpqrcode/cache/mask_3/mask_133_3.dat | Bin 0 -> 216 bytes
.../phpqrcode/cache/mask_3/mask_137_3.dat | 2 +
.../phpqrcode/cache/mask_3/mask_141_3.dat | 2 +
.../phpqrcode/cache/mask_3/mask_145_3.dat | 3 +
.../phpqrcode/cache/mask_3/mask_149_3.dat | 1 +
.../phpqrcode/cache/mask_3/mask_153_3.dat | 2 +
.../phpqrcode/cache/mask_3/mask_157_3.dat | Bin 0 -> 248 bytes
.../phpqrcode/cache/mask_3/mask_161_3.dat | 3 +
.../phpqrcode/cache/mask_3/mask_165_3.dat | 2 +
.../phpqrcode/cache/mask_3/mask_169_3.dat | 1 +
.../phpqrcode/cache/mask_3/mask_173_3.dat | 1 +
.../phpqrcode/cache/mask_3/mask_177_3.dat | Bin 0 -> 312 bytes
.../phpqrcode/cache/mask_3/mask_21_3.dat | Bin 0 -> 60 bytes
.../phpqrcode/cache/mask_3/mask_25_3.dat | Bin 0 -> 75 bytes
.../phpqrcode/cache/mask_3/mask_29_3.dat | Bin 0 -> 75 bytes
.../phpqrcode/cache/mask_3/mask_33_3.dat | Bin 0 -> 79 bytes
.../phpqrcode/cache/mask_3/mask_37_3.dat | Bin 0 -> 83 bytes
.../phpqrcode/cache/mask_3/mask_41_3.dat | Bin 0 -> 85 bytes
.../phpqrcode/cache/mask_3/mask_45_3.dat | 2 +
.../phpqrcode/cache/mask_3/mask_49_3.dat | Bin 0 -> 127 bytes
.../phpqrcode/cache/mask_3/mask_53_3.dat | 2 +
.../phpqrcode/cache/mask_3/mask_57_3.dat | Bin 0 -> 126 bytes
.../phpqrcode/cache/mask_3/mask_61_3.dat | 2 +
.../phpqrcode/cache/mask_3/mask_65_3.dat | 2 +
.../phpqrcode/cache/mask_3/mask_69_3.dat | 2 +
.../phpqrcode/cache/mask_3/mask_73_3.dat | 2 +
.../phpqrcode/cache/mask_3/mask_77_3.dat | 2 +
.../phpqrcode/cache/mask_3/mask_81_3.dat | 2 +
.../phpqrcode/cache/mask_3/mask_85_3.dat | Bin 0 -> 160 bytes
.../phpqrcode/cache/mask_3/mask_89_3.dat | 2 +
.../phpqrcode/cache/mask_3/mask_93_3.dat | 2 +
.../phpqrcode/cache/mask_3/mask_97_3.dat | Bin 0 -> 175 bytes
.../phpqrcode/cache/mask_4/mask_101_4.dat | 2 +
.../phpqrcode/cache/mask_4/mask_105_4.dat | 2 +
.../phpqrcode/cache/mask_4/mask_109_4.dat | Bin 0 -> 182 bytes
.../phpqrcode/cache/mask_4/mask_113_4.dat | 2 +
.../phpqrcode/cache/mask_4/mask_117_4.dat | 2 +
.../phpqrcode/cache/mask_4/mask_121_4.dat | Bin 0 -> 208 bytes
.../phpqrcode/cache/mask_4/mask_125_4.dat | Bin 0 -> 213 bytes
.../phpqrcode/cache/mask_4/mask_129_4.dat | Bin 0 -> 220 bytes
.../phpqrcode/cache/mask_4/mask_133_4.dat | 3 +
.../phpqrcode/cache/mask_4/mask_137_4.dat | Bin 0 -> 248 bytes
.../phpqrcode/cache/mask_4/mask_141_4.dat | Bin 0 -> 254 bytes
.../phpqrcode/cache/mask_4/mask_145_4.dat | Bin 0 -> 255 bytes
.../phpqrcode/cache/mask_4/mask_149_4.dat | 2 +
.../phpqrcode/cache/mask_4/mask_153_4.dat | 2 +
.../phpqrcode/cache/mask_4/mask_157_4.dat | 1 +
.../phpqrcode/cache/mask_4/mask_161_4.dat | 1 +
.../phpqrcode/cache/mask_4/mask_165_4.dat | 3 +
.../phpqrcode/cache/mask_4/mask_169_4.dat | Bin 0 -> 297 bytes
.../phpqrcode/cache/mask_4/mask_173_4.dat | 2 +
.../phpqrcode/cache/mask_4/mask_177_4.dat | 2 +
.../phpqrcode/cache/mask_4/mask_21_4.dat | Bin 0 -> 57 bytes
.../phpqrcode/cache/mask_4/mask_25_4.dat | Bin 0 -> 76 bytes
.../phpqrcode/cache/mask_4/mask_29_4.dat | Bin 0 -> 78 bytes
.../phpqrcode/cache/mask_4/mask_33_4.dat | Bin 0 -> 89 bytes
.../phpqrcode/cache/mask_4/mask_37_4.dat | Bin 0 -> 86 bytes
.../phpqrcode/cache/mask_4/mask_41_4.dat | Bin 0 -> 89 bytes
.../phpqrcode/cache/mask_4/mask_45_4.dat | Bin 0 -> 120 bytes
.../phpqrcode/cache/mask_4/mask_49_4.dat | Bin 0 -> 124 bytes
.../phpqrcode/cache/mask_4/mask_53_4.dat | Bin 0 -> 128 bytes
.../phpqrcode/cache/mask_4/mask_57_4.dat | Bin 0 -> 130 bytes
.../phpqrcode/cache/mask_4/mask_61_4.dat | Bin 0 -> 132 bytes
.../phpqrcode/cache/mask_4/mask_65_4.dat | 2 +
.../phpqrcode/cache/mask_4/mask_69_4.dat | 1 +
.../phpqrcode/cache/mask_4/mask_73_4.dat | 3 +
.../phpqrcode/cache/mask_4/mask_77_4.dat | 2 +
.../phpqrcode/cache/mask_4/mask_81_4.dat | 3 +
.../phpqrcode/cache/mask_4/mask_85_4.dat | Bin 0 -> 154 bytes
.../phpqrcode/cache/mask_4/mask_89_4.dat | 2 +
.../phpqrcode/cache/mask_4/mask_93_4.dat | 2 +
.../phpqrcode/cache/mask_4/mask_97_4.dat | Bin 0 -> 176 bytes
.../phpqrcode/cache/mask_5/mask_101_5.dat | 2 +
.../phpqrcode/cache/mask_5/mask_105_5.dat | Bin 0 -> 224 bytes
.../phpqrcode/cache/mask_5/mask_109_5.dat | Bin 0 -> 211 bytes
.../phpqrcode/cache/mask_5/mask_113_5.dat | 9 +
.../phpqrcode/cache/mask_5/mask_117_5.dat | 1 +
.../phpqrcode/cache/mask_5/mask_121_5.dat | Bin 0 -> 256 bytes
.../phpqrcode/cache/mask_5/mask_125_5.dat | 2 +
.../phpqrcode/cache/mask_5/mask_129_5.dat | Bin 0 -> 259 bytes
.../phpqrcode/cache/mask_5/mask_133_5.dat | 2 +
.../phpqrcode/cache/mask_5/mask_137_5.dat | 3 +
.../phpqrcode/cache/mask_5/mask_141_5.dat | Bin 0 -> 297 bytes
.../phpqrcode/cache/mask_5/mask_145_5.dat | Bin 0 -> 300 bytes
.../phpqrcode/cache/mask_5/mask_149_5.dat | 3 +
.../phpqrcode/cache/mask_5/mask_153_5.dat | 2 +
.../phpqrcode/cache/mask_5/mask_157_5.dat | 1 +
.../phpqrcode/cache/mask_5/mask_161_5.dat | 2 +
.../phpqrcode/cache/mask_5/mask_165_5.dat | Bin 0 -> 332 bytes
.../phpqrcode/cache/mask_5/mask_169_5.dat | 1 +
.../phpqrcode/cache/mask_5/mask_173_5.dat | 4 +
.../phpqrcode/cache/mask_5/mask_177_5.dat | 11 +
.../phpqrcode/cache/mask_5/mask_21_5.dat | Bin 0 -> 74 bytes
.../phpqrcode/cache/mask_5/mask_25_5.dat | 2 +
.../phpqrcode/cache/mask_5/mask_29_5.dat | 2 +
.../phpqrcode/cache/mask_5/mask_33_5.dat | Bin 0 -> 106 bytes
.../phpqrcode/cache/mask_5/mask_37_5.dat | Bin 0 -> 103 bytes
.../phpqrcode/cache/mask_5/mask_41_5.dat | 2 +
.../phpqrcode/cache/mask_5/mask_45_5.dat | 1 +
.../phpqrcode/cache/mask_5/mask_49_5.dat | Bin 0 -> 146 bytes
.../phpqrcode/cache/mask_5/mask_53_5.dat | 1 +
.../phpqrcode/cache/mask_5/mask_57_5.dat | 2 +
.../phpqrcode/cache/mask_5/mask_61_5.dat | 1 +
.../phpqrcode/cache/mask_5/mask_65_5.dat | Bin 0 -> 163 bytes
.../phpqrcode/cache/mask_5/mask_69_5.dat | Bin 0 -> 167 bytes
.../phpqrcode/cache/mask_5/mask_73_5.dat | Bin 0 -> 184 bytes
.../phpqrcode/cache/mask_5/mask_77_5.dat | 1 +
.../phpqrcode/cache/mask_5/mask_81_5.dat | 3 +
.../phpqrcode/cache/mask_5/mask_85_5.dat | Bin 0 -> 186 bytes
.../phpqrcode/cache/mask_5/mask_89_5.dat | 2 +
.../phpqrcode/cache/mask_5/mask_93_5.dat | 2 +
.../phpqrcode/cache/mask_5/mask_97_5.dat | 1 +
.../phpqrcode/cache/mask_6/mask_101_6.dat | 2 +
.../phpqrcode/cache/mask_6/mask_105_6.dat | 3 +
.../phpqrcode/cache/mask_6/mask_109_6.dat | 1 +
.../phpqrcode/cache/mask_6/mask_113_6.dat | 3 +
.../phpqrcode/cache/mask_6/mask_117_6.dat | 1 +
.../phpqrcode/cache/mask_6/mask_121_6.dat | Bin 0 -> 309 bytes
.../phpqrcode/cache/mask_6/mask_125_6.dat | 1 +
.../phpqrcode/cache/mask_6/mask_129_6.dat | Bin 0 -> 310 bytes
.../phpqrcode/cache/mask_6/mask_133_6.dat | Bin 0 -> 296 bytes
.../phpqrcode/cache/mask_6/mask_137_6.dat | 2 +
.../phpqrcode/cache/mask_6/mask_141_6.dat | 10 +
.../phpqrcode/cache/mask_6/mask_145_6.dat | Bin 0 -> 357 bytes
.../phpqrcode/cache/mask_6/mask_149_6.dat | 2 +
.../phpqrcode/cache/mask_6/mask_153_6.dat | Bin 0 -> 367 bytes
.../phpqrcode/cache/mask_6/mask_157_6.dat | 1 +
.../phpqrcode/cache/mask_6/mask_161_6.dat | Bin 0 -> 399 bytes
.../phpqrcode/cache/mask_6/mask_165_6.dat | Bin 0 -> 400 bytes
.../phpqrcode/cache/mask_6/mask_169_6.dat | 1 +
.../phpqrcode/cache/mask_6/mask_173_6.dat | 1 +
.../phpqrcode/cache/mask_6/mask_177_6.dat | 14 +
.../phpqrcode/cache/mask_6/mask_21_6.dat | 1 +
.../phpqrcode/cache/mask_6/mask_25_6.dat | 1 +
.../phpqrcode/cache/mask_6/mask_29_6.dat | 3 +
.../phpqrcode/cache/mask_6/mask_33_6.dat | Bin 0 -> 124 bytes
.../phpqrcode/cache/mask_6/mask_37_6.dat | 1 +
.../phpqrcode/cache/mask_6/mask_41_6.dat | Bin 0 -> 132 bytes
.../phpqrcode/cache/mask_6/mask_45_6.dat | Bin 0 -> 189 bytes
.../phpqrcode/cache/mask_6/mask_49_6.dat | 2 +
.../phpqrcode/cache/mask_6/mask_53_6.dat | Bin 0 -> 195 bytes
.../phpqrcode/cache/mask_6/mask_57_6.dat | 2 +
.../phpqrcode/cache/mask_6/mask_61_6.dat | 2 +
.../phpqrcode/cache/mask_6/mask_65_6.dat | 1 +
.../phpqrcode/cache/mask_6/mask_69_6.dat | 1 +
.../phpqrcode/cache/mask_6/mask_73_6.dat | Bin 0 -> 230 bytes
.../phpqrcode/cache/mask_6/mask_77_6.dat | 1 +
.../phpqrcode/cache/mask_6/mask_81_6.dat | 3 +
.../phpqrcode/cache/mask_6/mask_85_6.dat | Bin 0 -> 229 bytes
.../phpqrcode/cache/mask_6/mask_89_6.dat | Bin 0 -> 263 bytes
.../phpqrcode/cache/mask_6/mask_93_6.dat | Bin 0 -> 276 bytes
.../phpqrcode/cache/mask_6/mask_97_6.dat | 2 +
.../phpqrcode/cache/mask_7/mask_101_7.dat | 1 +
.../phpqrcode/cache/mask_7/mask_105_7.dat | 2 +
.../phpqrcode/cache/mask_7/mask_109_7.dat | 2 +
.../phpqrcode/cache/mask_7/mask_113_7.dat | 11 +
.../phpqrcode/cache/mask_7/mask_117_7.dat | 2 +
.../phpqrcode/cache/mask_7/mask_121_7.dat | 2 +
.../phpqrcode/cache/mask_7/mask_125_7.dat | Bin 0 -> 288 bytes
.../phpqrcode/cache/mask_7/mask_129_7.dat | Bin 0 -> 282 bytes
.../phpqrcode/cache/mask_7/mask_133_7.dat | Bin 0 -> 281 bytes
.../phpqrcode/cache/mask_7/mask_137_7.dat | 5 +
.../phpqrcode/cache/mask_7/mask_141_7.dat | 1 +
.../phpqrcode/cache/mask_7/mask_145_7.dat | 2 +
.../phpqrcode/cache/mask_7/mask_149_7.dat | 1 +
.../phpqrcode/cache/mask_7/mask_153_7.dat | 2 +
.../phpqrcode/cache/mask_7/mask_157_7.dat | 2 +
.../phpqrcode/cache/mask_7/mask_161_7.dat | 1 +
.../phpqrcode/cache/mask_7/mask_165_7.dat | 1 +
.../phpqrcode/cache/mask_7/mask_169_7.dat | Bin 0 -> 383 bytes
.../phpqrcode/cache/mask_7/mask_173_7.dat | 1 +
.../phpqrcode/cache/mask_7/mask_177_7.dat | Bin 0 -> 407 bytes
.../phpqrcode/cache/mask_7/mask_21_7.dat | 4 +
.../phpqrcode/cache/mask_7/mask_25_7.dat | 1 +
.../phpqrcode/cache/mask_7/mask_29_7.dat | 2 +
.../phpqrcode/cache/mask_7/mask_33_7.dat | 1 +
.../phpqrcode/cache/mask_7/mask_37_7.dat | Bin 0 -> 122 bytes
.../phpqrcode/cache/mask_7/mask_41_7.dat | 1 +
.../phpqrcode/cache/mask_7/mask_45_7.dat | Bin 0 -> 173 bytes
.../phpqrcode/cache/mask_7/mask_49_7.dat | 1 +
.../phpqrcode/cache/mask_7/mask_53_7.dat | 1 +
.../phpqrcode/cache/mask_7/mask_57_7.dat | 1 +
.../phpqrcode/cache/mask_7/mask_61_7.dat | 2 +
.../phpqrcode/cache/mask_7/mask_65_7.dat | 1 +
.../phpqrcode/cache/mask_7/mask_69_7.dat | Bin 0 -> 202 bytes
.../phpqrcode/cache/mask_7/mask_73_7.dat | Bin 0 -> 221 bytes
.../phpqrcode/cache/mask_7/mask_77_7.dat | Bin 0 -> 226 bytes
.../phpqrcode/cache/mask_7/mask_81_7.dat | 1 +
.../phpqrcode/cache/mask_7/mask_85_7.dat | Bin 0 -> 213 bytes
.../phpqrcode/cache/mask_7/mask_89_7.dat | Bin 0 -> 244 bytes
.../phpqrcode/cache/mask_7/mask_93_7.dat | Bin 0 -> 248 bytes
.../phpqrcode/cache/mask_7/mask_97_7.dat | 2 +
vendor/aferrandini/phpqrcode/composer.json | 21 +
.../aferrandini/phpqrcode/lib/PHPQRCode.php | 42 +
.../phpqrcode/lib/PHPQRCode/Autoloader.php | 48 +
.../phpqrcode/lib/PHPQRCode/Constants.php | 58 +
.../phpqrcode/lib/PHPQRCode/FrameFiller.php | 96 +
.../phpqrcode/lib/PHPQRCode/QRbitstream.php | 182 +
.../phpqrcode/lib/PHPQRCode/QRcode.php | 158 +
.../phpqrcode/lib/PHPQRCode/QRencode.php | 137 +
.../phpqrcode/lib/PHPQRCode/QRimage.php | 95 +
.../phpqrcode/lib/PHPQRCode/QRinput.php | 486 ++
.../phpqrcode/lib/PHPQRCode/QRinputItem.php | 246 +
.../phpqrcode/lib/PHPQRCode/QRmask.php | 325 +
.../phpqrcode/lib/PHPQRCode/QRrawcode.php | 117 +
.../phpqrcode/lib/PHPQRCode/QRrs.php | 56 +
.../phpqrcode/lib/PHPQRCode/QRrsItem.php | 162 +
.../phpqrcode/lib/PHPQRCode/QRrsblock.php | 25 +
.../phpqrcode/lib/PHPQRCode/QRspec.php | 586 ++
.../phpqrcode/lib/PHPQRCode/QRsplit.php | 316 +
.../phpqrcode/lib/PHPQRCode/QRstr.php | 35 +
.../phpqrcode/lib/PHPQRCode/QRtools.php | 171 +
vendor/aferrandini/phpqrcode/readme.md | 37 +
vendor/aliyuncs/oss-sdk-php/.coveralls.yml | 2 +
vendor/aliyuncs/oss-sdk-php/.gitignore | 8 +
vendor/aliyuncs/oss-sdk-php/.travis.yml | 21 +
vendor/aliyuncs/oss-sdk-php/CHANGELOG.md | 132 +
vendor/aliyuncs/oss-sdk-php/LICENSE.md | 21 +
vendor/aliyuncs/oss-sdk-php/README-CN.md | 149 +
vendor/aliyuncs/oss-sdk-php/README.md | 150 +
vendor/aliyuncs/oss-sdk-php/autoload.php | 11 +
vendor/aliyuncs/oss-sdk-php/build-phar.sh | 13 +
vendor/aliyuncs/oss-sdk-php/composer.json | 24 +
vendor/aliyuncs/oss-sdk-php/example.jpg | Bin 0 -> 21839 bytes
vendor/aliyuncs/oss-sdk-php/index.php | 3 +
vendor/aliyuncs/oss-sdk-php/phpunit.xml | 19 +
.../aliyuncs/oss-sdk-php/samples/Bucket.php | 168 +
.../oss-sdk-php/samples/BucketCors.php | 108 +
.../oss-sdk-php/samples/BucketLifecycle.php | 109 +
.../oss-sdk-php/samples/BucketLogging.php | 95 +
.../oss-sdk-php/samples/BucketReferer.php | 101 +
.../oss-sdk-php/samples/BucketWebsite.php | 92 +
.../aliyuncs/oss-sdk-php/samples/Callback.php | 83 +
.../aliyuncs/oss-sdk-php/samples/Common.php | 84 +
.../aliyuncs/oss-sdk-php/samples/Config.php | 15 +
vendor/aliyuncs/oss-sdk-php/samples/Image.php | 87 +
.../oss-sdk-php/samples/LiveChannel.php | 131 +
.../oss-sdk-php/samples/MultipartUpload.php | 182 +
.../aliyuncs/oss-sdk-php/samples/Object.php | 518 ++
.../aliyuncs/oss-sdk-php/samples/RunAll.php | 13 +
.../oss-sdk-php/samples/Signature.php | 142 +
.../oss-sdk-php/src/OSS/Core/MimeTypes.php | 263 +
.../oss-sdk-php/src/OSS/Core/OssException.php | 54 +
.../oss-sdk-php/src/OSS/Core/OssUtil.php | 530 ++
.../aliyuncs/oss-sdk-php/src/OSS/Http/LICENSE | 25 +
.../oss-sdk-php/src/OSS/Http/RequestCore.php | 898 ++
.../src/OSS/Http/RequestCore_Exception.php | 8 +
.../oss-sdk-php/src/OSS/Http/ResponseCore.php | 56 +
.../oss-sdk-php/src/OSS/Model/BucketInfo.php | 181 +
.../src/OSS/Model/BucketListInfo.php | 39 +
.../oss-sdk-php/src/OSS/Model/BucketStat.php | 85 +
.../oss-sdk-php/src/OSS/Model/CnameConfig.php | 99 +
.../oss-sdk-php/src/OSS/Model/CorsConfig.php | 113 +
.../oss-sdk-php/src/OSS/Model/CorsRule.php | 150 +
.../src/OSS/Model/DeleteMarkerInfo.php | 65 +
.../src/OSS/Model/DeleteObjectInfo.php | 41 +
.../src/OSS/Model/DeletedObjectInfo.php | 63 +
.../src/OSS/Model/ExtendWormConfig.php | 64 +
.../src/OSS/Model/GetLiveChannelHistory.php | 37 +
.../src/OSS/Model/GetLiveChannelInfo.php | 68 +
.../src/OSS/Model/GetLiveChannelStatus.php | 107 +
.../src/OSS/Model/InitiateWormConfig.php | 64 +
.../src/OSS/Model/LifecycleAction.php | 88 +
.../src/OSS/Model/LifecycleConfig.php | 107 +
.../src/OSS/Model/LifecycleRule.php | 126 +
.../src/OSS/Model/ListMultipartUploadInfo.php | 134 +
.../src/OSS/Model/ListPartsInfo.php | 97 +
.../src/OSS/Model/LiveChannelConfig.php | 121 +
.../src/OSS/Model/LiveChannelHistory.php | 59 +
.../src/OSS/Model/LiveChannelInfo.php | 107 +
.../src/OSS/Model/LiveChannelListInfo.php | 107 +
.../src/OSS/Model/LoggingConfig.php | 86 +
.../oss-sdk-php/src/OSS/Model/ObjectInfo.php | 104 +
.../src/OSS/Model/ObjectListInfo.php | 126 +
.../src/OSS/Model/ObjectVersionInfo.php | 125 +
.../src/OSS/Model/ObjectVersionListInfo.php | 162 +
.../oss-sdk-php/src/OSS/Model/PartInfo.php | 74 +
.../oss-sdk-php/src/OSS/Model/PrefixInfo.php | 36 +
.../src/OSS/Model/RefererConfig.php | 93 +
.../src/OSS/Model/RequestPaymentConfig.php | 68 +
.../src/OSS/Model/RestoreConfig.php | 77 +
.../OSS/Model/ServerSideEncryptionConfig.php | 91 +
.../src/OSS/Model/StorageCapacityConfig.php | 76 +
.../oss-sdk-php/src/OSS/Model/Tag.php | 41 +
.../src/OSS/Model/TaggingConfig.php | 89 +
.../oss-sdk-php/src/OSS/Model/UploadInfo.php | 55 +
.../src/OSS/Model/VersioningConfig.php | 67 +
.../src/OSS/Model/WebsiteConfig.php | 76 +
.../oss-sdk-php/src/OSS/Model/WormConfig.php | 90 +
.../oss-sdk-php/src/OSS/Model/XmlConfig.php | 27 +
.../oss-sdk-php/src/OSS/OssClient.php | 3534 ++++++++
.../oss-sdk-php/src/OSS/Result/AclResult.php | 31 +
.../src/OSS/Result/AppendResult.php | 27 +
.../oss-sdk-php/src/OSS/Result/BodyResult.php | 19 +
.../src/OSS/Result/CallbackResult.php | 21 +
.../src/OSS/Result/CopyObjectResult.php | 30 +
.../OSS/Result/DeleteObjectVersionsResult.php | 39 +
.../src/OSS/Result/DeleteObjectsResult.php | 27 +
.../src/OSS/Result/ExistResult.php | 34 +
.../OSS/Result/GetBucketEncryptionResult.php | 26 +
.../src/OSS/Result/GetBucketInfoResult.php | 37 +
.../Result/GetBucketRequestPaymentResult.php | 26 +
.../src/OSS/Result/GetBucketStatResult.php | 26 +
.../src/OSS/Result/GetBucketTagsResult.php | 26 +
.../OSS/Result/GetBucketVersioningResult.php | 26 +
.../src/OSS/Result/GetBucketWormResult.php | 26 +
.../src/OSS/Result/GetCnameResult.php | 19 +
.../src/OSS/Result/GetCorsResult.php | 34 +
.../src/OSS/Result/GetLifecycleResult.php | 41 +
.../Result/GetLiveChannelHistoryResult.php | 19 +
.../OSS/Result/GetLiveChannelInfoResult.php | 19 +
.../OSS/Result/GetLiveChannelStatusResult.php | 19 +
.../src/OSS/Result/GetLocationResult.php | 30 +
.../src/OSS/Result/GetLoggingResult.php | 41 +
.../src/OSS/Result/GetRefererResult.php | 41 +
.../OSS/Result/GetStorageCapacityResult.php | 34 +
.../src/OSS/Result/GetWebsiteResult.php | 40 +
.../src/OSS/Result/HeaderResult.php | 23 +
.../OSS/Result/InitiateBucketWormResult.php | 27 +
.../Result/InitiateMultipartUploadResult.php | 29 +
.../src/OSS/Result/ListBucketsResult.php | 32 +
.../src/OSS/Result/ListLiveChannelResult.php | 16 +
.../OSS/Result/ListMultipartUploadResult.php | 55 +
.../OSS/Result/ListObjectVersionsResult.php | 96 +
.../src/OSS/Result/ListObjectsResult.php | 71 +
.../src/OSS/Result/ListPartsResult.php | 42 +
.../src/OSS/Result/PutLiveChannelResult.php | 16 +
.../src/OSS/Result/PutSetDeleteResult.php | 20 +
.../oss-sdk-php/src/OSS/Result/Result.php | 175 +
.../src/OSS/Result/SymlinkResult.php | 24 +
.../src/OSS/Result/UploadPartResult.php | 28 +
.../tests/OSS/Tests/AclResultTest.php | 59 +
.../tests/OSS/Tests/BodyResultTest.php | 26 +
.../tests/OSS/Tests/BucketCnameTest.php | 77 +
.../tests/OSS/Tests/BucketInfoTest.php | 21 +
.../tests/OSS/Tests/BucketLiveChannelTest.php | 316 +
.../tests/OSS/Tests/CallbackTest.php | 296 +
.../tests/OSS/Tests/CnameConfigTest.php | 77 +
.../oss-sdk-php/tests/OSS/Tests/Common.php | 80 +
.../tests/OSS/Tests/ContentTypeTest.php | 133 +
.../tests/OSS/Tests/CopyObjectResult.php | 52 +
.../tests/OSS/Tests/CorsConfigTest.php | 140 +
.../Tests/DeleteObjectVersionsResultTest.php | 187 +
.../tests/OSS/Tests/ExistResultTest.php | 38 +
.../Tests/GetBucketEncryptionResultTest.php | 95 +
.../GetBucketRequestPaymentResultTest.php | 66 +
.../OSS/Tests/GetBucketStatResultTest.php | 59 +
.../OSS/Tests/GetBucketTagsResultTest.php | 77 +
.../OSS/Tests/GetBucketWormResultTest.php | 84 +
.../tests/OSS/Tests/GetCorsResultTest.php | 67 +
.../OSS/Tests/GetLifecycleResultTest.php | 59 +
.../tests/OSS/Tests/GetLoggingResultTest.php | 51 +
.../tests/OSS/Tests/GetRefererResultTest.php | 51 +
.../tests/OSS/Tests/GetWebsiteResultTest.php | 50 +
.../tests/OSS/Tests/HeaderResultTest.php | 23 +
.../oss-sdk-php/tests/OSS/Tests/HttpTest.php | 77 +
.../InitiateMultipartUploadResultTest.php | 47 +
.../tests/OSS/Tests/LifecycleConfigTest.php | 130 +
.../tests/OSS/Tests/ListBucketsResultTest.php | 167 +
.../Tests/ListMultipartUploadResultTest.php | 114 +
.../Tests/ListObjectVersionsResultTest.php | 215 +
.../tests/OSS/Tests/ListObjectsResultTest.php | 151 +
.../tests/OSS/Tests/ListPartsResultTest.php | 62 +
.../tests/OSS/Tests/LiveChannelXmlTest.php | 277 +
.../tests/OSS/Tests/LoggingConfigTest.php | 47 +
.../tests/OSS/Tests/MimeTypesTest.php | 13 +
.../tests/OSS/Tests/ObjectAclTest.php | 28 +
.../OSS/Tests/OssClientBucketCorsTest.php | 84 +
.../Tests/OssClientBucketEncryptionTest.php | 63 +
.../OSS/Tests/OssClientBucketInfoTest.php | 20 +
.../Tests/OssClientBucketLifecycleTest.php | 57 +
.../OSS/Tests/OssClientBucketLoggingTest.php | 43 +
.../OSS/Tests/OssClientBucketPolicyTest.php | 47 +
.../OSS/Tests/OssClientBucketRefererTest.php | 48 +
.../OssClientBucketRequestPaymentTest.php | 51 +
.../OSS/Tests/OssClientBucketStatTestTest.php | 34 +
.../OssClientBucketStorageCapacityTest.php | 56 +
.../OSS/Tests/OssClientBucketTagsTest.php | 76 +
.../tests/OSS/Tests/OssClientBucketTest.php | 140 +
.../Tests/OssClientBucketVersioningTest.php | 40 +
.../OSS/Tests/OssClientBucketWebsiteTest.php | 46 +
.../OSS/Tests/OssClientBucketWormTest.php | 36 +
.../tests/OSS/Tests/OssClientImageTest.php | 147 +
.../OSS/Tests/OssClientListObjectsTest.php | 184 +
.../Tests/OssClientMultipartUploadTest.php | 426 +
.../OssClientObjectRequestPaymentTest.php | 472 ++
.../OSS/Tests/OssClientObjectTaggingTest.php | 160 +
.../tests/OSS/Tests/OssClientObjectTest.php | 781 ++
.../Tests/OssClientObjectVersioningTest.php | 610 ++
.../OSS/Tests/OssClientRestoreObjectTest.php | 174 +
.../OSS/Tests/OssClientSignatureTest.php | 167 +
.../tests/OSS/Tests/OssClientTest.php | 346 +
.../tests/OSS/Tests/OssExceptionTest.php | 19 +
.../tests/OSS/Tests/OssTrafficLimitTest.php | 96 +
.../tests/OSS/Tests/OssUtilTest.php | 300 +
.../OSS/Tests/PutSetDeleteResultTest.php | 66 +
.../tests/OSS/Tests/RefererConfigTest.php | 54 +
.../OSS/Tests/StorageCapacityConfigTest.php | 58 +
.../tests/OSS/Tests/StorageCapacityTest.php | 63 +
.../tests/OSS/Tests/SymlinkTest.php | 77 +
.../tests/OSS/Tests/TestOssClientBase.php | 51 +
.../tests/OSS/Tests/UploadPartResultTest.php | 33 +
.../tests/OSS/Tests/WebsiteConfigTest.php | 56 +
vendor/autoload.php | 7 +
vendor/composer/ClassLoader.php | 445 +
vendor/composer/LICENSE | 21 +
vendor/composer/autoload_classmap.php | 13 +
vendor/composer/autoload_files.php | 15 +
vendor/composer/autoload_namespaces.php | 10 +
vendor/composer/autoload_psr4.php | 24 +
vendor/composer/autoload_real.php | 70 +
vendor/composer/autoload_static.php | 148 +
vendor/composer/installed.json | 1119 +++
vendor/guzzlehttp/command/CHANGELOG.md | 60 +
vendor/guzzlehttp/command/LICENSE | 19 +
vendor/guzzlehttp/command/Makefile | 2 +
vendor/guzzlehttp/command/README.md | 120 +
vendor/guzzlehttp/command/composer.json | 36 +
vendor/guzzlehttp/command/phpunit.xml.dist | 19 +
vendor/guzzlehttp/command/src/Command.php | 55 +
.../command/src/CommandInterface.php | 39 +
.../src/Exception/CommandClientException.php | 7 +
.../src/Exception/CommandException.php | 109 +
.../src/Exception/CommandServerException.php | 7 +
.../guzzlehttp/command/src/HasDataTrait.php | 60 +
vendor/guzzlehttp/command/src/Result.php | 18 +
.../command/src/ResultInterface.php | 9 +
.../guzzlehttp/command/src/ServiceClient.php | 217 +
.../command/src/ServiceClientInterface.php | 92 +
.../command/src/ToArrayInterface.php | 16 +
.../guzzlehttp/guzzle-services/CHANGELOG.md | 363 +
vendor/guzzlehttp/guzzle-services/LICENSE | 19 +
vendor/guzzlehttp/guzzle-services/Makefile | 2 +
vendor/guzzlehttp/guzzle-services/README.md | 120 +
.../guzzlehttp/guzzle-services/composer.json | 51 +
.../guzzle-services/phpunit.xml.dist | 19 +
.../guzzle-services/src/Description.php | 265 +
.../src/DescriptionInterface.php | 107 +
.../guzzle-services/src/Deserializer.php | 294 +
.../guzzle-services/src/GuzzleClient.php | 169 +
.../Handler/ValidatedDescriptionHandler.php | 82 +
.../guzzle-services/src/Operation.php | 312 +
.../guzzle-services/src/Parameter.php | 655 ++
.../QuerySerializerInterface.php | 13 +
.../src/QuerySerializer/Rfc3986Serializer.php | 33 +
.../src/RequestLocation/AbstractLocation.php | 101 +
.../src/RequestLocation/BodyLocation.php | 49 +
.../src/RequestLocation/FormParamLocation.php | 83 +
.../src/RequestLocation/HeaderLocation.php | 67 +
.../src/RequestLocation/JsonLocation.php | 86 +
.../src/RequestLocation/MultiPartLocation.php | 76 +
.../src/RequestLocation/QueryLocation.php | 92 +
.../RequestLocationInterface.php | 44 +
.../src/RequestLocation/XmlLocation.php | 328 +
.../src/ResponseLocation/AbstractLocation.php | 69 +
.../src/ResponseLocation/BodyLocation.php | 39 +
.../src/ResponseLocation/HeaderLocation.php | 47 +
.../src/ResponseLocation/JsonLocation.php | 176 +
.../ResponseLocation/ReasonPhraseLocation.php | 41 +
.../ResponseLocationInterface.php | 61 +
.../ResponseLocation/StatusCodeLocation.php | 39 +
.../src/ResponseLocation/XmlLocation.php | 311 +
.../guzzle-services/src/SchemaFormatter.php | 141 +
.../guzzle-services/src/SchemaValidator.php | 297 +
.../guzzle-services/src/Serializer.php | 166 +
vendor/guzzlehttp/guzzle/CHANGELOG.md | 1462 ++++
vendor/guzzlehttp/guzzle/LICENSE | 19 +
vendor/guzzlehttp/guzzle/README.md | 79 +
vendor/guzzlehttp/guzzle/UPGRADING.md | 1253 +++
vendor/guzzlehttp/guzzle/composer.json | 73 +
.../guzzlehttp/guzzle/src/BodySummarizer.php | 28 +
.../guzzle/src/BodySummarizerInterface.php | 13 +
vendor/guzzlehttp/guzzle/src/Client.php | 474 ++
.../guzzlehttp/guzzle/src/ClientInterface.php | 84 +
vendor/guzzlehttp/guzzle/src/ClientTrait.php | 241 +
.../guzzle/src/Cookie/CookieJar.php | 313 +
.../guzzle/src/Cookie/CookieJarInterface.php | 79 +
.../guzzle/src/Cookie/FileCookieJar.php | 101 +
.../guzzle/src/Cookie/SessionCookieJar.php | 77 +
.../guzzle/src/Cookie/SetCookie.php | 410 +
.../src/Exception/BadResponseException.php | 39 +
.../guzzle/src/Exception/ClientException.php | 10 +
.../guzzle/src/Exception/ConnectException.php | 56 +
.../guzzle/src/Exception/GuzzleException.php | 9 +
.../Exception/InvalidArgumentException.php | 7 +
.../guzzle/src/Exception/RequestException.php | 166 +
.../guzzle/src/Exception/ServerException.php | 10 +
.../Exception/TooManyRedirectsException.php | 7 +
.../src/Exception/TransferException.php | 7 +
.../guzzle/src/Handler/CurlFactory.php | 592 ++
.../src/Handler/CurlFactoryInterface.php | 25 +
.../guzzle/src/Handler/CurlHandler.php | 49 +
.../guzzle/src/Handler/CurlMultiHandler.php | 253 +
.../guzzle/src/Handler/EasyHandle.php | 112 +
.../guzzle/src/Handler/HeaderProcessor.php | 42 +
.../guzzle/src/Handler/MockHandler.php | 211 +
.../guzzlehttp/guzzle/src/Handler/Proxy.php | 51 +
.../guzzle/src/Handler/StreamHandler.php | 581 ++
vendor/guzzlehttp/guzzle/src/HandlerStack.php | 271 +
.../guzzle/src/MessageFormatter.php | 198 +
.../guzzle/src/MessageFormatterInterface.php | 18 +
vendor/guzzlehttp/guzzle/src/Middleware.php | 260 +
vendor/guzzlehttp/guzzle/src/Pool.php | 125 +
.../guzzle/src/PrepareBodyMiddleware.php | 104 +
.../guzzle/src/RedirectMiddleware.php | 216 +
.../guzzlehttp/guzzle/src/RequestOptions.php | 264 +
.../guzzlehttp/guzzle/src/RetryMiddleware.php | 116 +
.../guzzlehttp/guzzle/src/TransferStats.php | 133 +
vendor/guzzlehttp/guzzle/src/Utils.php | 382 +
vendor/guzzlehttp/guzzle/src/functions.php | 167 +
.../guzzle/src/functions_include.php | 6 +
.../vendor-bin/php-cs-fixer/composer.json | 9 +
.../guzzle/vendor-bin/phpstan/composer.json | 10 +
.../guzzle/vendor-bin/psalm/composer.json | 9 +
vendor/guzzlehttp/promises/CHANGELOG.md | 84 +
vendor/guzzlehttp/promises/LICENSE | 19 +
vendor/guzzlehttp/promises/Makefile | 13 +
vendor/guzzlehttp/promises/README.md | 532 ++
vendor/guzzlehttp/promises/composer.json | 39 +
.../promises/src/AggregateException.php | 17 +
.../promises/src/CancellationException.php | 10 +
vendor/guzzlehttp/promises/src/Coroutine.php | 169 +
vendor/guzzlehttp/promises/src/Create.php | 84 +
vendor/guzzlehttp/promises/src/Each.php | 90 +
.../guzzlehttp/promises/src/EachPromise.php | 254 +
.../promises/src/FulfilledPromise.php | 84 +
vendor/guzzlehttp/promises/src/Is.php | 46 +
vendor/guzzlehttp/promises/src/Promise.php | 278 +
.../promises/src/PromiseInterface.php | 97 +
.../promises/src/PromisorInterface.php | 16 +
.../promises/src/RejectedPromise.php | 91 +
.../promises/src/RejectionException.php | 48 +
vendor/guzzlehttp/promises/src/TaskQueue.php | 67 +
.../promises/src/TaskQueueInterface.php | 24 +
vendor/guzzlehttp/promises/src/Utils.php | 274 +
vendor/guzzlehttp/promises/src/functions.php | 363 +
.../promises/src/functions_include.php | 6 +
vendor/guzzlehttp/psr7/CHANGELOG.md | 313 +
vendor/guzzlehttp/psr7/LICENSE | 19 +
vendor/guzzlehttp/psr7/README.md | 808 ++
vendor/guzzlehttp/psr7/composer.json | 65 +
vendor/guzzlehttp/psr7/src/AppendStream.php | 244 +
vendor/guzzlehttp/psr7/src/BufferStream.php | 144 +
vendor/guzzlehttp/psr7/src/CachingStream.php | 142 +
vendor/guzzlehttp/psr7/src/DroppingStream.php | 46 +
vendor/guzzlehttp/psr7/src/FnStream.php | 174 +
vendor/guzzlehttp/psr7/src/Header.php | 69 +
vendor/guzzlehttp/psr7/src/HttpFactory.php | 100 +
vendor/guzzlehttp/psr7/src/InflateStream.php | 34 +
vendor/guzzlehttp/psr7/src/LazyOpenStream.php | 40 +
vendor/guzzlehttp/psr7/src/LimitStream.php | 154 +
vendor/guzzlehttp/psr7/src/Message.php | 242 +
vendor/guzzlehttp/psr7/src/MessageTrait.php | 235 +
vendor/guzzlehttp/psr7/src/MimeType.php | 130 +
.../guzzlehttp/psr7/src/MultipartStream.php | 153 +
vendor/guzzlehttp/psr7/src/NoSeekStream.php | 25 +
vendor/guzzlehttp/psr7/src/PumpStream.php | 174 +
vendor/guzzlehttp/psr7/src/Query.php | 113 +
vendor/guzzlehttp/psr7/src/Request.php | 157 +
vendor/guzzlehttp/psr7/src/Response.php | 160 +
vendor/guzzlehttp/psr7/src/Rfc7230.php | 23 +
vendor/guzzlehttp/psr7/src/ServerRequest.php | 334 +
vendor/guzzlehttp/psr7/src/Stream.php | 274 +
.../psr7/src/StreamDecoratorTrait.php | 150 +
vendor/guzzlehttp/psr7/src/StreamWrapper.php | 175 +
vendor/guzzlehttp/psr7/src/UploadedFile.php | 211 +
vendor/guzzlehttp/psr7/src/Uri.php | 732 ++
vendor/guzzlehttp/psr7/src/UriNormalizer.php | 220 +
vendor/guzzlehttp/psr7/src/UriResolver.php | 211 +
vendor/guzzlehttp/psr7/src/Utils.php | 412 +
.../vendor-bin/php-cs-fixer/composer.json | 9 +
.../psr7/vendor-bin/phpstan/composer.json | 10 +
.../psr7/vendor-bin/psalm/composer.json | 9 +
vendor/guzzlehttp/uri-template/CHANGELOG.md | 32 +
vendor/guzzlehttp/uri-template/LICENSE.md | 21 +
vendor/guzzlehttp/uri-template/README.md | 27 +
vendor/guzzlehttp/uri-template/composer.json | 59 +
.../uri-template/src/UriTemplate.php | 297 +
vendor/phpmailer/phpmailer/COMMITMENT | 46 +
vendor/phpmailer/phpmailer/LICENSE | 502 ++
vendor/phpmailer/phpmailer/README.md | 227 +
vendor/phpmailer/phpmailer/SECURITY.md | 37 +
vendor/phpmailer/phpmailer/VERSION | 1 +
vendor/phpmailer/phpmailer/composer.json | 71 +
.../phpmailer/phpmailer/get_oauth_token.php | 146 +
.../phpmailer/language/phpmailer.lang-af.php | 26 +
.../phpmailer/language/phpmailer.lang-ar.php | 27 +
.../phpmailer/language/phpmailer.lang-az.php | 27 +
.../phpmailer/language/phpmailer.lang-ba.php | 27 +
.../phpmailer/language/phpmailer.lang-be.php | 27 +
.../phpmailer/language/phpmailer.lang-bg.php | 27 +
.../phpmailer/language/phpmailer.lang-ca.php | 27 +
.../phpmailer/language/phpmailer.lang-ch.php | 27 +
.../phpmailer/language/phpmailer.lang-cs.php | 28 +
.../phpmailer/language/phpmailer.lang-da.php | 29 +
.../phpmailer/language/phpmailer.lang-de.php | 28 +
.../phpmailer/language/phpmailer.lang-el.php | 26 +
.../phpmailer/language/phpmailer.lang-eo.php | 26 +
.../phpmailer/language/phpmailer.lang-es.php | 27 +
.../phpmailer/language/phpmailer.lang-et.php | 28 +
.../phpmailer/language/phpmailer.lang-fa.php | 28 +
.../phpmailer/language/phpmailer.lang-fi.php | 28 +
.../phpmailer/language/phpmailer.lang-fo.php | 27 +
.../phpmailer/language/phpmailer.lang-fr.php | 32 +
.../phpmailer/language/phpmailer.lang-gl.php | 27 +
.../phpmailer/language/phpmailer.lang-he.php | 27 +
.../phpmailer/language/phpmailer.lang-hi.php | 27 +
.../phpmailer/language/phpmailer.lang-hr.php | 27 +
.../phpmailer/language/phpmailer.lang-hu.php | 27 +
.../phpmailer/language/phpmailer.lang-hy.php | 27 +
.../phpmailer/language/phpmailer.lang-id.php | 31 +
.../phpmailer/language/phpmailer.lang-it.php | 28 +
.../phpmailer/language/phpmailer.lang-ja.php | 29 +
.../phpmailer/language/phpmailer.lang-ka.php | 27 +
.../phpmailer/language/phpmailer.lang-ko.php | 27 +
.../phpmailer/language/phpmailer.lang-lt.php | 27 +
.../phpmailer/language/phpmailer.lang-lv.php | 27 +
.../phpmailer/language/phpmailer.lang-mg.php | 27 +
.../phpmailer/language/phpmailer.lang-ms.php | 27 +
.../phpmailer/language/phpmailer.lang-nb.php | 26 +
.../phpmailer/language/phpmailer.lang-nl.php | 34 +
.../phpmailer/language/phpmailer.lang-pl.php | 27 +
.../phpmailer/language/phpmailer.lang-pt.php | 27 +
.../language/phpmailer.lang-pt_br.php | 30 +
.../phpmailer/language/phpmailer.lang-ro.php | 27 +
.../phpmailer/language/phpmailer.lang-ru.php | 28 +
.../phpmailer/language/phpmailer.lang-sk.php | 30 +
.../phpmailer/language/phpmailer.lang-sl.php | 31 +
.../phpmailer/language/phpmailer.lang-sr.php | 28 +
.../language/phpmailer.lang-sr_latn.php | 28 +
.../phpmailer/language/phpmailer.lang-sv.php | 27 +
.../phpmailer/language/phpmailer.lang-tl.php | 28 +
.../phpmailer/language/phpmailer.lang-tr.php | 31 +
.../phpmailer/language/phpmailer.lang-uk.php | 28 +
.../phpmailer/language/phpmailer.lang-vi.php | 27 +
.../phpmailer/language/phpmailer.lang-zh.php | 29 +
.../language/phpmailer.lang-zh_cn.php | 29 +
vendor/phpmailer/phpmailer/src/Exception.php | 40 +
vendor/phpmailer/phpmailer/src/OAuth.php | 139 +
vendor/phpmailer/phpmailer/src/PHPMailer.php | 5029 ++++++++++++
vendor/phpmailer/phpmailer/src/POP3.php | 448 +
vendor/phpmailer/phpmailer/src/SMTP.php | 1456 ++++
vendor/psr/http-client/CHANGELOG.md | 23 +
vendor/psr/http-client/LICENSE | 19 +
vendor/psr/http-client/README.md | 12 +
vendor/psr/http-client/composer.json | 27 +
.../src/ClientExceptionInterface.php | 10 +
.../psr/http-client/src/ClientInterface.php | 20 +
.../src/NetworkExceptionInterface.php | 24 +
.../src/RequestExceptionInterface.php | 24 +
vendor/psr/http-factory/.gitignore | 2 +
vendor/psr/http-factory/.pullapprove.yml | 7 +
vendor/psr/http-factory/LICENSE | 21 +
vendor/psr/http-factory/README.md | 10 +
vendor/psr/http-factory/composer.json | 35 +
.../src/RequestFactoryInterface.php | 18 +
.../src/ResponseFactoryInterface.php | 18 +
.../src/ServerRequestFactoryInterface.php | 24 +
.../src/StreamFactoryInterface.php | 45 +
.../src/UploadedFileFactoryInterface.php | 34 +
.../http-factory/src/UriFactoryInterface.php | 17 +
vendor/psr/http-message/CHANGELOG.md | 36 +
vendor/psr/http-message/LICENSE | 19 +
vendor/psr/http-message/README.md | 13 +
vendor/psr/http-message/composer.json | 26 +
.../psr/http-message/src/MessageInterface.php | 187 +
.../psr/http-message/src/RequestInterface.php | 129 +
.../http-message/src/ResponseInterface.php | 68 +
.../src/ServerRequestInterface.php | 261 +
.../psr/http-message/src/StreamInterface.php | 158 +
.../src/UploadedFileInterface.php | 123 +
vendor/psr/http-message/src/UriInterface.php | 323 +
.../cos-sdk-v5/.github/workflows/php5.6.yml | 34 +
.../cos-sdk-v5/.github/workflows/php7.1.yml | 33 +
.../cos-sdk-v5/.github/workflows/php7.2.yml | 36 +
vendor/qcloud/cos-sdk-v5/CHANGELOG.md | 203 +
vendor/qcloud/cos-sdk-v5/LICENSE | 21 +
vendor/qcloud/cos-sdk-v5/README.md | 314 +
vendor/qcloud/cos-sdk-v5/composer.json | 37 +
vendor/qcloud/cos-sdk-v5/phpunit.xml | 15 +
.../sample/abortMultipartUpload.php | 27 +
.../qcloud/cos-sdk-v5/sample/appendObject.php | 37 +
.../cos-sdk-v5/sample/blindWatermark.php | 32 +
.../cos-sdk-v5/sample/catchException.php | 30 +
.../cos-sdk-v5/sample/ciTransformation.php | 39 +
.../sample/completeMultipartUpload.php | 37 +
vendor/qcloud/cos-sdk-v5/sample/copy.php | 32 +
.../qcloud/cos-sdk-v5/sample/copyObject.php | 28 +
vendor/qcloud/cos-sdk-v5/sample/cosClient.php | 30 +
.../qcloud/cos-sdk-v5/sample/createBucket.php | 25 +
.../qcloud/cos-sdk-v5/sample/createFolder.php | 27 +
.../sample/createMediaConcatJobs.php | 96 +
.../sample/createMediaSnapshotJobs.php | 71 +
.../sample/createMediaTranscodeJobs.php | 91 +
.../sample/createMultipartUpload.php | 39 +
.../qcloud/cos-sdk-v5/sample/deleteBucket.php | 25 +
.../cos-sdk-v5/sample/deleteBucketCors.php | 25 +
.../cos-sdk-v5/sample/deleteBucketDomain.php | 24 +
.../cos-sdk-v5/sample/deleteBucketGuetzli.php | 25 +
.../sample/deleteBucketImageStyle.php | 25 +
.../sample/deleteBucketLifecycle.php | 25 +
.../cos-sdk-v5/sample/deleteBucketTagging.php | 25 +
.../cos-sdk-v5/sample/deleteBucketWebsite.php | 24 +
.../qcloud/cos-sdk-v5/sample/deleteFolder.php | 48 +
.../qcloud/cos-sdk-v5/sample/deleteObject.php | 26 +
.../cos-sdk-v5/sample/deleteObjectTagging.php | 25 +
.../qcloud/cos-sdk-v5/sample/detectAudio.php | 51 +
.../cos-sdk-v5/sample/detectDocument.php | 34 +
.../qcloud/cos-sdk-v5/sample/detectLable.php | 26 +
.../qcloud/cos-sdk-v5/sample/detectText.php | 51 +
.../qcloud/cos-sdk-v5/sample/detectVideo.php | 40 +
vendor/qcloud/cos-sdk-v5/sample/download.php | 39 +
.../cos-sdk-v5/sample/downloadFolder.php | 55 +
.../cos-sdk-v5/sample/getBlindWatermark.php | 36 +
.../qcloud/cos-sdk-v5/sample/getBucketAcl.php | 25 +
.../cos-sdk-v5/sample/getBucketCors.php | 25 +
.../cos-sdk-v5/sample/getBucketDomain.php | 24 +
.../cos-sdk-v5/sample/getBucketGuetzli.php | 25 +
.../cos-sdk-v5/sample/getBucketImageStyle.php | 26 +
.../cos-sdk-v5/sample/getBucketInventory.php | 26 +
.../cos-sdk-v5/sample/getBucketLifecycle.php | 25 +
.../cos-sdk-v5/sample/getBucketLogging.php | 25 +
.../cos-sdk-v5/sample/getBucketReferer.php | 25 +
.../cos-sdk-v5/sample/getBucketTagging.php | 25 +
.../cos-sdk-v5/sample/getBucketWebsite.php | 24 +
.../sample/getDetectAudioResult.php | 26 +
.../sample/getDetectDocumentResult.php | 26 +
.../cos-sdk-v5/sample/getDetectTextResult.php | 26 +
.../sample/getDetectVideoResult.php | 26 +
.../qcloud/cos-sdk-v5/sample/getMediaInfo.php | 29 +
vendor/qcloud/cos-sdk-v5/sample/getObject.php | 36 +
.../getObjectSensitiveContentRecognition.php | 48 +
.../cos-sdk-v5/sample/getObjectTagging.php | 25 +
.../qcloud/cos-sdk-v5/sample/getObjectUrl.php | 41 +
.../sample/getObjectWithoutSign.php | 27 +
.../cos-sdk-v5/sample/getPresignedUrl.php | 33 +
.../qcloud/cos-sdk-v5/sample/getSnapshot.php | 41 +
.../qcloud/cos-sdk-v5/sample/headBucket.php | 25 +
.../qcloud/cos-sdk-v5/sample/headObject.php | 26 +
vendor/qcloud/cos-sdk-v5/sample/imageAve.php | 26 +
vendor/qcloud/cos-sdk-v5/sample/imageExif.php | 26 +
vendor/qcloud/cos-sdk-v5/sample/imageInfo.php | 26 +
vendor/qcloud/cos-sdk-v5/sample/imageMogr.php | 31 +
.../qcloud/cos-sdk-v5/sample/imageProcess.php | 32 +
vendor/qcloud/cos-sdk-v5/sample/imageView.php | 33 +
.../cos-sdk-v5/sample/imageWatermark.php | 34 +
.../qcloud/cos-sdk-v5/sample/listBucket.php | 24 +
.../sample/listMultipartUploads.php | 31 +
.../qcloud/cos-sdk-v5/sample/listObjects.php | 30 +
vendor/qcloud/cos-sdk-v5/sample/listParts.php | 29 +
.../cos-sdk-v5/sample/picOperations.php | 34 +
.../cos-sdk-v5/sample/putBlindWatermark.php | 35 +
.../qcloud/cos-sdk-v5/sample/putBucketAcl.php | 41 +
.../cos-sdk-v5/sample/putBucketCors.php | 33 +
.../cos-sdk-v5/sample/putBucketDomain.php | 33 +
.../cos-sdk-v5/sample/putBucketGuetzli.php | 25 +
.../cos-sdk-v5/sample/putBucketImageStyle.php | 27 +
.../cos-sdk-v5/sample/putBucketInventory.php | 46 +
.../cos-sdk-v5/sample/putBucketLifecycle.php | 45 +
.../cos-sdk-v5/sample/putBucketLogging.php | 29 +
.../cos-sdk-v5/sample/putBucketReferer.php | 35 +
.../cos-sdk-v5/sample/putBucketTagging.php | 33 +
.../cos-sdk-v5/sample/putBucketWebsite.php | 46 +
.../cos-sdk-v5/sample/putImageStyle.php | 34 +
vendor/qcloud/cos-sdk-v5/sample/putObject.php | 49 +
.../cos-sdk-v5/sample/putObjectTagging.php | 33 +
vendor/qcloud/cos-sdk-v5/sample/putQrcode.php | 34 +
vendor/qcloud/cos-sdk-v5/sample/qrcode.php | 27 +
.../cos-sdk-v5/sample/qrcodeGenerate.php | 28 +
.../cos-sdk-v5/sample/restoreObject.php | 30 +
.../cos-sdk-v5/sample/selectObjectContent.php | 85 +
.../cos-sdk-v5/sample/textWatermark.php | 32 +
.../qcloud/cos-sdk-v5/sample/trafficLimit.php | 41 +
vendor/qcloud/cos-sdk-v5/sample/upload.php | 57 +
.../qcloud/cos-sdk-v5/sample/uploadFolder.php | 45 +
.../qcloud/cos-sdk-v5/sample/uploadPart.php | 31 +
.../cos-sdk-v5/src/Qcloud/Cos/Client.php | 466 ++
.../Cos/CommandToRequestTransformer.php | 263 +
.../cos-sdk-v5/src/Qcloud/Cos/Common.php | 55 +
.../qcloud/cos-sdk-v5/src/Qcloud/Cos/Copy.php | 140 +
.../src/Qcloud/Cos/Descriptions.php | 1090 +++
.../src/Qcloud/Cos/Exception/CosException.php | 5 +
.../Exception/ServiceResponseException.php | 189 +
.../src/Qcloud/Cos/ExceptionMiddleware.php | 71 +
.../src/Qcloud/Cos/ExceptionParser.php | 112 +
.../BlindWatermarkTemplate.php | 87 +
.../CIParamTransformation.php | 39 +
.../ImageParamTemplate/ImageMogrTemplate.php | 159 +
.../ImageQrcodeTemplate.php | 37 +
.../ImageParamTemplate/ImageStyleTemplate.php | 33 +
.../Cos/ImageParamTemplate/ImageTemplate.php | 18 +
.../ImageParamTemplate/ImageViewTemplate.php | 106 +
.../ImageWatermarkTemplate.php | 122 +
.../PicOperationsTransformation.php | 60 +
.../TextWatermarkTemplate.php | 166 +
.../src/Qcloud/Cos/MultipartUpload.php | 159 +
.../src/Qcloud/Cos/RangeDownload.php | 145 +
.../src/Qcloud/Cos/Request/BodyLocation.php | 49 +
.../src/Qcloud/Cos/ResultTransformer.php | 185 +
.../cos-sdk-v5/src/Qcloud/Cos/Serializer.php | 81 +
.../cos-sdk-v5/src/Qcloud/Cos/Service.php | 7256 +++++++++++++++++
.../cos-sdk-v5/src/Qcloud/Cos/Signature.php | 103 +
.../src/Qcloud/Cos/SignatureMiddleware.php | 23 +
.../src/Qcloud/Cos/Tests/COSTest.php | 2080 +++++
.../src/Qcloud/Cos/Tests/TestHelper.php | 44 +
vendor/ralouphie/getallheaders/LICENSE | 21 +
vendor/ralouphie/getallheaders/README.md | 27 +
vendor/ralouphie/getallheaders/composer.json | 26 +
.../getallheaders/src/getallheaders.php | 46 +
vendor/symfony/polyfill-php80/LICENSE | 19 +
vendor/symfony/polyfill-php80/Php80.php | 105 +
vendor/symfony/polyfill-php80/README.md | 24 +
.../Resources/stubs/Attribute.php | 22 +
.../Resources/stubs/Stringable.php | 11 +
.../Resources/stubs/UnhandledMatchError.php | 5 +
.../Resources/stubs/ValueError.php | 5 +
vendor/symfony/polyfill-php80/bootstrap.php | 42 +
vendor/symfony/polyfill-php80/composer.json | 40 +
vendor/topthink/think-captcha/.gitignore | 3 +
vendor/topthink/think-captcha/LICENSE | 32 +
vendor/topthink/think-captcha/README.md | 33 +
.../topthink/think-captcha/assets/bgs/1.jpg | Bin 0 -> 30428 bytes
.../topthink/think-captcha/assets/bgs/2.jpg | Bin 0 -> 29677 bytes
.../topthink/think-captcha/assets/bgs/3.jpg | Bin 0 -> 32109 bytes
.../topthink/think-captcha/assets/bgs/4.jpg | Bin 0 -> 29081 bytes
.../topthink/think-captcha/assets/bgs/5.jpg | Bin 0 -> 27940 bytes
.../topthink/think-captcha/assets/bgs/6.jpg | Bin 0 -> 31381 bytes
.../topthink/think-captcha/assets/bgs/7.jpg | Bin 0 -> 30234 bytes
.../topthink/think-captcha/assets/bgs/8.jpg | Bin 0 -> 30188 bytes
.../topthink/think-captcha/assets/ttfs/1.ttf | Bin 0 -> 57520 bytes
.../topthink/think-captcha/assets/ttfs/2.ttf | Bin 0 -> 28328 bytes
.../topthink/think-captcha/assets/ttfs/3.ttf | Bin 0 -> 39308 bytes
.../topthink/think-captcha/assets/ttfs/4.ttf | Bin 0 -> 34852 bytes
.../topthink/think-captcha/assets/ttfs/5.ttf | Bin 0 -> 32664 bytes
.../topthink/think-captcha/assets/ttfs/6.ttf | Bin 0 -> 28036 bytes
.../think-captcha/assets/zhttfs/1.ttf | Bin 0 -> 2183628 bytes
vendor/topthink/think-captcha/composer.json | 22 +
vendor/topthink/think-captcha/src/Captcha.php | 320 +
.../think-captcha/src/CaptchaController.php | 23 +
vendor/topthink/think-captcha/src/helper.php | 59 +
vendor/topthink/think-installer/.gitignore | 3 +
vendor/topthink/think-installer/composer.json | 25 +
.../think-installer/src/LibraryInstaller.php | 28 +
.../topthink/think-installer/src/Plugin.php | 34 +
.../topthink/think-installer/src/Promise.php | 11 +
.../think-installer/src/ThinkExtend.php | 72 +
.../think-installer/src/ThinkFramework.php | 66 +
.../think-installer/src/ThinkTesting.php | 66 +
1277 files changed, 135174 insertions(+), 3 deletions(-)
delete mode 100644 runtime/.gitignore
create mode 100644 thinkphp/.gitignore
create mode 100644 thinkphp/.htaccess
create mode 100644 thinkphp/CONTRIBUTING.md
create mode 100644 thinkphp/LICENSE.txt
create mode 100644 thinkphp/README.md
create mode 100644 thinkphp/base.php
create mode 100644 thinkphp/composer.json
create mode 100644 thinkphp/convention.php
create mode 100644 thinkphp/helper.php
create mode 100644 thinkphp/lang/zh-cn.php
create mode 100644 thinkphp/library/think/App.php
create mode 100644 thinkphp/library/think/Build.php
create mode 100644 thinkphp/library/think/Cache.php
create mode 100644 thinkphp/library/think/Collection.php
create mode 100644 thinkphp/library/think/Config.php
create mode 100644 thinkphp/library/think/Console.php
create mode 100644 thinkphp/library/think/Container.php
create mode 100644 thinkphp/library/think/Controller.php
create mode 100644 thinkphp/library/think/Cookie.php
create mode 100644 thinkphp/library/think/Db.php
create mode 100644 thinkphp/library/think/Debug.php
create mode 100644 thinkphp/library/think/Env.php
create mode 100644 thinkphp/library/think/Error.php
create mode 100644 thinkphp/library/think/Exception.php
create mode 100644 thinkphp/library/think/Facade.php
create mode 100644 thinkphp/library/think/File.php
create mode 100644 thinkphp/library/think/Hook.php
create mode 100644 thinkphp/library/think/Lang.php
create mode 100644 thinkphp/library/think/Loader.php
create mode 100644 thinkphp/library/think/Log.php
create mode 100644 thinkphp/library/think/Middleware.php
create mode 100644 thinkphp/library/think/Model.php
create mode 100644 thinkphp/library/think/Paginator.php
create mode 100644 thinkphp/library/think/Process.php
create mode 100644 thinkphp/library/think/Request.php
create mode 100644 thinkphp/library/think/Response.php
create mode 100644 thinkphp/library/think/Route.php
create mode 100644 thinkphp/library/think/Session.php
create mode 100644 thinkphp/library/think/Template.php
create mode 100644 thinkphp/library/think/Url.php
create mode 100644 thinkphp/library/think/Validate.php
create mode 100644 thinkphp/library/think/View.php
create mode 100644 thinkphp/library/think/cache/Driver.php
create mode 100644 thinkphp/library/think/cache/driver/File.php
create mode 100644 thinkphp/library/think/cache/driver/Lite.php
create mode 100644 thinkphp/library/think/cache/driver/Memcache.php
create mode 100644 thinkphp/library/think/cache/driver/Memcached.php
create mode 100644 thinkphp/library/think/cache/driver/Redis.php
create mode 100644 thinkphp/library/think/cache/driver/Sqlite.php
create mode 100644 thinkphp/library/think/cache/driver/Wincache.php
create mode 100644 thinkphp/library/think/cache/driver/Xcache.php
create mode 100644 thinkphp/library/think/config/driver/Ini.php
create mode 100644 thinkphp/library/think/config/driver/Json.php
create mode 100644 thinkphp/library/think/config/driver/Xml.php
create mode 100644 thinkphp/library/think/console/Command.php
create mode 100644 thinkphp/library/think/console/Input.php
create mode 100644 thinkphp/library/think/console/LICENSE
create mode 100644 thinkphp/library/think/console/Output.php
create mode 100644 thinkphp/library/think/console/Table.php
create mode 100644 thinkphp/library/think/console/bin/README.md
create mode 100644 thinkphp/library/think/console/bin/hiddeninput.exe
create mode 100644 thinkphp/library/think/console/command/Build.php
create mode 100644 thinkphp/library/think/console/command/Clear.php
create mode 100644 thinkphp/library/think/console/command/Help.php
create mode 100644 thinkphp/library/think/console/command/Lists.php
create mode 100644 thinkphp/library/think/console/command/Make.php
create mode 100644 thinkphp/library/think/console/command/RouteList.php
create mode 100644 thinkphp/library/think/console/command/RunServer.php
create mode 100644 thinkphp/library/think/console/command/Version.php
create mode 100644 thinkphp/library/think/console/command/make/Command.php
create mode 100644 thinkphp/library/think/console/command/make/Controller.php
create mode 100644 thinkphp/library/think/console/command/make/Middleware.php
create mode 100644 thinkphp/library/think/console/command/make/Model.php
create mode 100644 thinkphp/library/think/console/command/make/Validate.php
create mode 100644 thinkphp/library/think/console/command/make/stubs/command.stub
create mode 100644 thinkphp/library/think/console/command/make/stubs/controller.api.stub
create mode 100644 thinkphp/library/think/console/command/make/stubs/controller.plain.stub
create mode 100644 thinkphp/library/think/console/command/make/stubs/controller.stub
create mode 100644 thinkphp/library/think/console/command/make/stubs/middleware.stub
create mode 100644 thinkphp/library/think/console/command/make/stubs/model.stub
create mode 100644 thinkphp/library/think/console/command/make/stubs/validate.stub
create mode 100644 thinkphp/library/think/console/command/optimize/Autoload.php
create mode 100644 thinkphp/library/think/console/command/optimize/Config.php
create mode 100644 thinkphp/library/think/console/command/optimize/Route.php
create mode 100644 thinkphp/library/think/console/command/optimize/Schema.php
create mode 100644 thinkphp/library/think/console/input/Argument.php
create mode 100644 thinkphp/library/think/console/input/Definition.php
create mode 100644 thinkphp/library/think/console/input/Option.php
create mode 100644 thinkphp/library/think/console/output/Ask.php
create mode 100644 thinkphp/library/think/console/output/Descriptor.php
create mode 100644 thinkphp/library/think/console/output/Formatter.php
create mode 100644 thinkphp/library/think/console/output/Question.php
create mode 100644 thinkphp/library/think/console/output/descriptor/Console.php
create mode 100644 thinkphp/library/think/console/output/driver/Buffer.php
create mode 100644 thinkphp/library/think/console/output/driver/Console.php
create mode 100644 thinkphp/library/think/console/output/driver/Nothing.php
create mode 100644 thinkphp/library/think/console/output/formatter/Stack.php
create mode 100644 thinkphp/library/think/console/output/formatter/Style.php
create mode 100644 thinkphp/library/think/console/output/question/Choice.php
create mode 100644 thinkphp/library/think/console/output/question/Confirmation.php
create mode 100644 thinkphp/library/think/db/Builder.php
create mode 100644 thinkphp/library/think/db/Connection.php
create mode 100644 thinkphp/library/think/db/Expression.php
create mode 100644 thinkphp/library/think/db/Query.php
create mode 100644 thinkphp/library/think/db/Where.php
create mode 100644 thinkphp/library/think/db/builder/Mysql.php
create mode 100644 thinkphp/library/think/db/builder/Pgsql.php
create mode 100644 thinkphp/library/think/db/builder/Sqlite.php
create mode 100644 thinkphp/library/think/db/builder/Sqlsrv.php
create mode 100644 thinkphp/library/think/db/connector/Mysql.php
create mode 100644 thinkphp/library/think/db/connector/Pgsql.php
create mode 100644 thinkphp/library/think/db/connector/Sqlite.php
create mode 100644 thinkphp/library/think/db/connector/Sqlsrv.php
create mode 100644 thinkphp/library/think/db/connector/pgsql.sql
create mode 100644 thinkphp/library/think/db/exception/BindParamException.php
create mode 100644 thinkphp/library/think/db/exception/DataNotFoundException.php
create mode 100644 thinkphp/library/think/db/exception/ModelNotFoundException.php
create mode 100644 thinkphp/library/think/debug/Console.php
create mode 100644 thinkphp/library/think/debug/Html.php
create mode 100644 thinkphp/library/think/exception/ClassNotFoundException.php
create mode 100644 thinkphp/library/think/exception/DbException.php
create mode 100644 thinkphp/library/think/exception/ErrorException.php
create mode 100644 thinkphp/library/think/exception/Handle.php
create mode 100644 thinkphp/library/think/exception/HttpException.php
create mode 100644 thinkphp/library/think/exception/HttpResponseException.php
create mode 100644 thinkphp/library/think/exception/PDOException.php
create mode 100644 thinkphp/library/think/exception/RouteNotFoundException.php
create mode 100644 thinkphp/library/think/exception/TemplateNotFoundException.php
create mode 100644 thinkphp/library/think/exception/ThrowableError.php
create mode 100644 thinkphp/library/think/exception/ValidateException.php
create mode 100644 thinkphp/library/think/facade/App.php
create mode 100644 thinkphp/library/think/facade/Build.php
create mode 100644 thinkphp/library/think/facade/Cache.php
create mode 100644 thinkphp/library/think/facade/Config.php
create mode 100644 thinkphp/library/think/facade/Cookie.php
create mode 100644 thinkphp/library/think/facade/Debug.php
create mode 100644 thinkphp/library/think/facade/Env.php
create mode 100644 thinkphp/library/think/facade/Hook.php
create mode 100644 thinkphp/library/think/facade/Lang.php
create mode 100644 thinkphp/library/think/facade/Log.php
create mode 100644 thinkphp/library/think/facade/Middleware.php
create mode 100644 thinkphp/library/think/facade/Request.php
create mode 100644 thinkphp/library/think/facade/Response.php
create mode 100644 thinkphp/library/think/facade/Route.php
create mode 100644 thinkphp/library/think/facade/Session.php
create mode 100644 thinkphp/library/think/facade/Template.php
create mode 100644 thinkphp/library/think/facade/Url.php
create mode 100644 thinkphp/library/think/facade/Validate.php
create mode 100644 thinkphp/library/think/facade/View.php
create mode 100644 thinkphp/library/think/log/driver/File.php
create mode 100644 thinkphp/library/think/log/driver/Socket.php
create mode 100644 thinkphp/library/think/model/Collection.php
create mode 100644 thinkphp/library/think/model/Pivot.php
create mode 100644 thinkphp/library/think/model/Relation.php
create mode 100644 thinkphp/library/think/model/concern/Attribute.php
create mode 100644 thinkphp/library/think/model/concern/Conversion.php
create mode 100644 thinkphp/library/think/model/concern/ModelEvent.php
create mode 100644 thinkphp/library/think/model/concern/RelationShip.php
create mode 100644 thinkphp/library/think/model/concern/SoftDelete.php
create mode 100644 thinkphp/library/think/model/concern/TimeStamp.php
create mode 100644 thinkphp/library/think/model/relation/BelongsTo.php
create mode 100644 thinkphp/library/think/model/relation/BelongsToMany.php
create mode 100644 thinkphp/library/think/model/relation/HasMany.php
create mode 100644 thinkphp/library/think/model/relation/HasManyThrough.php
create mode 100644 thinkphp/library/think/model/relation/HasOne.php
create mode 100644 thinkphp/library/think/model/relation/MorphMany.php
create mode 100644 thinkphp/library/think/model/relation/MorphOne.php
create mode 100644 thinkphp/library/think/model/relation/MorphTo.php
create mode 100644 thinkphp/library/think/model/relation/OneToOne.php
create mode 100644 thinkphp/library/think/paginator/driver/Bootstrap.php
create mode 100644 thinkphp/library/think/process/Builder.php
create mode 100644 thinkphp/library/think/process/Utils.php
create mode 100644 thinkphp/library/think/process/exception/Faild.php
create mode 100644 thinkphp/library/think/process/exception/Failed.php
create mode 100644 thinkphp/library/think/process/exception/Timeout.php
create mode 100644 thinkphp/library/think/process/pipes/Pipes.php
create mode 100644 thinkphp/library/think/process/pipes/Unix.php
create mode 100644 thinkphp/library/think/process/pipes/Windows.php
create mode 100644 thinkphp/library/think/response/Download.php
create mode 100644 thinkphp/library/think/response/Json.php
create mode 100644 thinkphp/library/think/response/Jsonp.php
create mode 100644 thinkphp/library/think/response/Jump.php
create mode 100644 thinkphp/library/think/response/Redirect.php
create mode 100644 thinkphp/library/think/response/View.php
create mode 100644 thinkphp/library/think/response/Xml.php
create mode 100644 thinkphp/library/think/route/AliasRule.php
create mode 100644 thinkphp/library/think/route/Dispatch.php
create mode 100644 thinkphp/library/think/route/Domain.php
create mode 100644 thinkphp/library/think/route/Resource.php
create mode 100644 thinkphp/library/think/route/Rule.php
create mode 100644 thinkphp/library/think/route/RuleGroup.php
create mode 100644 thinkphp/library/think/route/RuleItem.php
create mode 100644 thinkphp/library/think/route/RuleName.php
create mode 100644 thinkphp/library/think/route/dispatch/Callback.php
create mode 100644 thinkphp/library/think/route/dispatch/Controller.php
create mode 100644 thinkphp/library/think/route/dispatch/Module.php
create mode 100644 thinkphp/library/think/route/dispatch/Redirect.php
create mode 100644 thinkphp/library/think/route/dispatch/Response.php
create mode 100644 thinkphp/library/think/route/dispatch/Url.php
create mode 100644 thinkphp/library/think/route/dispatch/View.php
create mode 100644 thinkphp/library/think/session/driver/Memcache.php
create mode 100644 thinkphp/library/think/session/driver/Memcached.php
create mode 100644 thinkphp/library/think/session/driver/Redis.php
create mode 100644 thinkphp/library/think/template/TagLib.php
create mode 100644 thinkphp/library/think/template/driver/File.php
create mode 100644 thinkphp/library/think/template/taglib/Cx.php
create mode 100644 thinkphp/library/think/validate/ValidateRule.php
create mode 100644 thinkphp/library/think/view/driver/Php.php
create mode 100644 thinkphp/library/think/view/driver/Think.php
create mode 100644 thinkphp/library/traits/controller/Jump.php
create mode 100644 thinkphp/logo.png
create mode 100644 thinkphp/phpunit.xml.dist
create mode 100644 thinkphp/tpl/default_index.tpl
create mode 100644 thinkphp/tpl/dispatch_jump.tpl
create mode 100644 thinkphp/tpl/page_trace.tpl
create mode 100644 thinkphp/tpl/think_exception.tpl
create mode 100644 vendor/aferrandini/phpqrcode/.gitignore
create mode 100644 vendor/aferrandini/phpqrcode/LICENSE
create mode 100644 vendor/aferrandini/phpqrcode/VERSION
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_1.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_10.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_10.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_11.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_11.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_12.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_12.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_13.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_13.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_14.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_14.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_15.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_15.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_16.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_16.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_17.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_17.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_18.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_18.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_19.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_19.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_2.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_20.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_20.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_21.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_21.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_22.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_22.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_23.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_23.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_24.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_24.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_25.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_25.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_26.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_26.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_27.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_27.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_28.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_28.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_29.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_29.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_3.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_30.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_30.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_31.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_31.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_32.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_32.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_33.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_33.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_34.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_34.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_35.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_35.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_36.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_36.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_37.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_37.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_38.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_38.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_39.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_39.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_4.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_40.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_40.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_5.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_6.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_7.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_8.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_8.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_9.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/frame_9.png
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_101_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_105_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_109_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_113_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_117_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_121_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_125_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_129_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_133_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_137_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_141_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_145_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_149_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_153_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_157_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_161_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_165_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_169_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_173_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_177_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_21_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_25_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_29_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_33_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_37_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_41_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_45_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_49_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_53_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_57_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_61_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_65_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_69_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_73_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_77_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_81_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_85_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_89_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_93_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_0/mask_97_0.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_101_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_105_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_109_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_113_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_117_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_121_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_125_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_129_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_133_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_137_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_141_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_145_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_149_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_153_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_157_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_161_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_165_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_169_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_173_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_177_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_21_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_25_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_29_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_33_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_37_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_41_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_45_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_49_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_53_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_57_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_61_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_65_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_69_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_73_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_77_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_81_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_85_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_89_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_93_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_1/mask_97_1.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_101_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_105_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_109_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_113_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_117_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_121_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_125_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_129_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_133_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_137_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_141_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_145_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_149_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_153_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_157_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_161_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_165_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_169_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_173_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_177_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_21_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_25_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_29_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_33_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_37_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_41_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_45_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_49_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_53_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_57_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_61_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_65_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_69_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_73_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_77_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_81_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_85_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_89_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_93_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_2/mask_97_2.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_101_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_105_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_109_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_113_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_117_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_121_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_125_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_129_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_133_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_137_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_141_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_145_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_149_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_153_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_157_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_161_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_165_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_169_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_173_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_177_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_21_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_25_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_29_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_33_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_37_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_41_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_45_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_49_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_53_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_57_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_61_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_65_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_69_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_73_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_77_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_81_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_85_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_89_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_93_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_3/mask_97_3.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_101_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_105_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_109_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_113_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_117_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_121_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_125_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_129_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_133_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_137_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_141_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_145_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_149_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_153_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_157_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_161_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_165_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_169_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_173_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_177_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_21_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_25_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_29_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_33_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_37_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_41_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_45_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_49_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_53_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_57_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_61_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_65_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_69_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_73_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_77_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_81_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_85_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_89_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_93_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_4/mask_97_4.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_101_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_105_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_109_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_113_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_117_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_121_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_125_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_129_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_133_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_137_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_141_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_145_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_149_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_153_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_157_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_161_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_165_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_169_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_173_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_177_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_21_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_25_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_29_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_33_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_37_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_41_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_45_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_49_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_53_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_57_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_61_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_65_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_69_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_73_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_77_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_81_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_85_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_89_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_93_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_5/mask_97_5.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_101_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_105_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_109_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_113_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_117_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_121_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_125_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_129_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_133_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_137_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_141_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_145_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_149_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_153_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_157_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_161_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_165_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_169_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_173_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_177_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_21_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_25_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_29_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_33_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_37_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_41_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_45_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_49_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_53_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_57_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_61_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_65_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_69_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_73_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_77_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_81_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_85_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_89_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_93_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_6/mask_97_6.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_101_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_105_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_109_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_113_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_117_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_121_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_125_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_129_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_133_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_137_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_141_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_145_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_149_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_153_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_157_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_161_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_165_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_169_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_173_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_177_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_21_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_25_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_29_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_33_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_37_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_41_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_45_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_49_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_53_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_57_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_61_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_65_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_69_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_73_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_77_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_81_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_85_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_89_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_93_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/cache/mask_7/mask_97_7.dat
create mode 100644 vendor/aferrandini/phpqrcode/composer.json
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/Autoloader.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/Constants.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/FrameFiller.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRbitstream.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRcode.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRencode.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRimage.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRinput.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRinputItem.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRmask.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRrawcode.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRrs.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRrsItem.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRrsblock.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRspec.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRsplit.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRstr.php
create mode 100644 vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRtools.php
create mode 100644 vendor/aferrandini/phpqrcode/readme.md
create mode 100644 vendor/aliyuncs/oss-sdk-php/.coveralls.yml
create mode 100644 vendor/aliyuncs/oss-sdk-php/.gitignore
create mode 100644 vendor/aliyuncs/oss-sdk-php/.travis.yml
create mode 100644 vendor/aliyuncs/oss-sdk-php/CHANGELOG.md
create mode 100644 vendor/aliyuncs/oss-sdk-php/LICENSE.md
create mode 100644 vendor/aliyuncs/oss-sdk-php/README-CN.md
create mode 100644 vendor/aliyuncs/oss-sdk-php/README.md
create mode 100644 vendor/aliyuncs/oss-sdk-php/autoload.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/build-phar.sh
create mode 100644 vendor/aliyuncs/oss-sdk-php/composer.json
create mode 100644 vendor/aliyuncs/oss-sdk-php/example.jpg
create mode 100644 vendor/aliyuncs/oss-sdk-php/index.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/phpunit.xml
create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/Bucket.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/BucketCors.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/BucketLifecycle.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/BucketLogging.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/BucketReferer.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/BucketWebsite.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/Callback.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/Common.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/Config.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/Image.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/LiveChannel.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/MultipartUpload.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/Object.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/RunAll.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/Signature.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Core/MimeTypes.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Core/OssException.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Core/OssUtil.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Http/LICENSE
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore_Exception.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Http/ResponseCore.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/BucketInfo.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/BucketListInfo.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/BucketStat.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CnameConfig.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CorsConfig.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CorsRule.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/DeleteMarkerInfo.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/DeleteObjectInfo.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/DeletedObjectInfo.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ExtendWormConfig.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelHistory.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelInfo.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelStatus.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/InitiateWormConfig.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleAction.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleConfig.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleRule.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ListMultipartUploadInfo.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ListPartsInfo.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelConfig.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelHistory.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelInfo.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelListInfo.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LoggingConfig.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectInfo.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectListInfo.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectVersionInfo.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectVersionListInfo.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/PartInfo.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/PrefixInfo.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/RefererConfig.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/RequestPaymentConfig.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/RestoreConfig.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ServerSideEncryptionConfig.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/StorageCapacityConfig.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/Tag.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/TaggingConfig.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/UploadInfo.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/VersioningConfig.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/WebsiteConfig.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/WormConfig.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/XmlConfig.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/OssClient.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/AclResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/AppendResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/BodyResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/CallbackResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/CopyObjectResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/DeleteObjectVersionsResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/DeleteObjectsResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ExistResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketEncryptionResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketInfoResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketRequestPaymentResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketStatResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketTagsResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketVersioningResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketWormResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetCnameResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetCorsResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLifecycleResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelHistoryResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelInfoResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelStatusResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLocationResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLoggingResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetRefererResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetStorageCapacityResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetWebsiteResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/HeaderResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/InitiateBucketWormResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/InitiateMultipartUploadResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListBucketsResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListLiveChannelResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListMultipartUploadResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectVersionsResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectsResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListPartsResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/PutLiveChannelResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/PutSetDeleteResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/Result.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/SymlinkResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/UploadPartResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/AclResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BodyResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketCnameTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketInfoTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketLiveChannelTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CallbackTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CnameConfigTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/Common.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ContentTypeTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CopyObjectResult.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CorsConfigTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/DeleteObjectVersionsResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ExistResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketEncryptionResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketRequestPaymentResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketStatResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketTagsResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketWormResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetCorsResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetLifecycleResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetLoggingResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetRefererResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetWebsiteResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/HeaderResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/HttpTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/InitiateMultipartUploadResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LifecycleConfigTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListBucketsResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListMultipartUploadResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListObjectVersionsResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListObjectsResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListPartsResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LiveChannelXmlTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LoggingConfigTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/MimeTypesTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ObjectAclTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketCorsTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketEncryptionTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketInfoTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketLifecycleTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketLoggingTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketPolicyTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketRefererTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketRequestPaymentTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketStatTestTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketStorageCapacityTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketTagsTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketVersioningTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketWebsiteTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketWormTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientImageTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientListObjectsTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientMultipartUploadTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectRequestPaymentTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectTaggingTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectVersioningTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientRestoreObjectTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientSignatureTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssExceptionTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssTrafficLimitTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssUtilTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/PutSetDeleteResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/RefererConfigTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/StorageCapacityConfigTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/StorageCapacityTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/SymlinkTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/TestOssClientBase.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/UploadPartResultTest.php
create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/WebsiteConfigTest.php
create mode 100644 vendor/autoload.php
create mode 100644 vendor/composer/ClassLoader.php
create mode 100644 vendor/composer/LICENSE
create mode 100644 vendor/composer/autoload_classmap.php
create mode 100644 vendor/composer/autoload_files.php
create mode 100644 vendor/composer/autoload_namespaces.php
create mode 100644 vendor/composer/autoload_psr4.php
create mode 100644 vendor/composer/autoload_real.php
create mode 100644 vendor/composer/autoload_static.php
create mode 100644 vendor/composer/installed.json
create mode 100644 vendor/guzzlehttp/command/CHANGELOG.md
create mode 100644 vendor/guzzlehttp/command/LICENSE
create mode 100644 vendor/guzzlehttp/command/Makefile
create mode 100644 vendor/guzzlehttp/command/README.md
create mode 100644 vendor/guzzlehttp/command/composer.json
create mode 100644 vendor/guzzlehttp/command/phpunit.xml.dist
create mode 100644 vendor/guzzlehttp/command/src/Command.php
create mode 100644 vendor/guzzlehttp/command/src/CommandInterface.php
create mode 100644 vendor/guzzlehttp/command/src/Exception/CommandClientException.php
create mode 100644 vendor/guzzlehttp/command/src/Exception/CommandException.php
create mode 100644 vendor/guzzlehttp/command/src/Exception/CommandServerException.php
create mode 100644 vendor/guzzlehttp/command/src/HasDataTrait.php
create mode 100644 vendor/guzzlehttp/command/src/Result.php
create mode 100644 vendor/guzzlehttp/command/src/ResultInterface.php
create mode 100644 vendor/guzzlehttp/command/src/ServiceClient.php
create mode 100644 vendor/guzzlehttp/command/src/ServiceClientInterface.php
create mode 100644 vendor/guzzlehttp/command/src/ToArrayInterface.php
create mode 100644 vendor/guzzlehttp/guzzle-services/CHANGELOG.md
create mode 100644 vendor/guzzlehttp/guzzle-services/LICENSE
create mode 100644 vendor/guzzlehttp/guzzle-services/Makefile
create mode 100644 vendor/guzzlehttp/guzzle-services/README.md
create mode 100644 vendor/guzzlehttp/guzzle-services/composer.json
create mode 100644 vendor/guzzlehttp/guzzle-services/phpunit.xml.dist
create mode 100644 vendor/guzzlehttp/guzzle-services/src/Description.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/DescriptionInterface.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/Deserializer.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/GuzzleClient.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/Handler/ValidatedDescriptionHandler.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/Operation.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/Parameter.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/QuerySerializer/QuerySerializerInterface.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/QuerySerializer/Rfc3986Serializer.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/RequestLocation/AbstractLocation.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/RequestLocation/BodyLocation.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/RequestLocation/FormParamLocation.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/RequestLocation/HeaderLocation.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/RequestLocation/JsonLocation.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/RequestLocation/MultiPartLocation.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/RequestLocation/QueryLocation.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/RequestLocation/RequestLocationInterface.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/RequestLocation/XmlLocation.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/ResponseLocation/AbstractLocation.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/ResponseLocation/BodyLocation.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/ResponseLocation/HeaderLocation.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/ResponseLocation/JsonLocation.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/ResponseLocation/ReasonPhraseLocation.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/ResponseLocation/ResponseLocationInterface.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/ResponseLocation/StatusCodeLocation.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/ResponseLocation/XmlLocation.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/SchemaFormatter.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/SchemaValidator.php
create mode 100644 vendor/guzzlehttp/guzzle-services/src/Serializer.php
create mode 100644 vendor/guzzlehttp/guzzle/CHANGELOG.md
create mode 100644 vendor/guzzlehttp/guzzle/LICENSE
create mode 100644 vendor/guzzlehttp/guzzle/README.md
create mode 100644 vendor/guzzlehttp/guzzle/UPGRADING.md
create mode 100644 vendor/guzzlehttp/guzzle/composer.json
create mode 100644 vendor/guzzlehttp/guzzle/src/BodySummarizer.php
create mode 100644 vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Client.php
create mode 100644 vendor/guzzlehttp/guzzle/src/ClientInterface.php
create mode 100644 vendor/guzzlehttp/guzzle/src/ClientTrait.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/ClientException.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/ServerException.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/TransferException.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/Proxy.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php
create mode 100644 vendor/guzzlehttp/guzzle/src/HandlerStack.php
create mode 100644 vendor/guzzlehttp/guzzle/src/MessageFormatter.php
create mode 100644 vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Middleware.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Pool.php
create mode 100644 vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php
create mode 100644 vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php
create mode 100644 vendor/guzzlehttp/guzzle/src/RequestOptions.php
create mode 100644 vendor/guzzlehttp/guzzle/src/RetryMiddleware.php
create mode 100644 vendor/guzzlehttp/guzzle/src/TransferStats.php
create mode 100644 vendor/guzzlehttp/guzzle/src/Utils.php
create mode 100644 vendor/guzzlehttp/guzzle/src/functions.php
create mode 100644 vendor/guzzlehttp/guzzle/src/functions_include.php
create mode 100644 vendor/guzzlehttp/guzzle/vendor-bin/php-cs-fixer/composer.json
create mode 100644 vendor/guzzlehttp/guzzle/vendor-bin/phpstan/composer.json
create mode 100644 vendor/guzzlehttp/guzzle/vendor-bin/psalm/composer.json
create mode 100644 vendor/guzzlehttp/promises/CHANGELOG.md
create mode 100644 vendor/guzzlehttp/promises/LICENSE
create mode 100644 vendor/guzzlehttp/promises/Makefile
create mode 100644 vendor/guzzlehttp/promises/README.md
create mode 100644 vendor/guzzlehttp/promises/composer.json
create mode 100644 vendor/guzzlehttp/promises/src/AggregateException.php
create mode 100644 vendor/guzzlehttp/promises/src/CancellationException.php
create mode 100644 vendor/guzzlehttp/promises/src/Coroutine.php
create mode 100644 vendor/guzzlehttp/promises/src/Create.php
create mode 100644 vendor/guzzlehttp/promises/src/Each.php
create mode 100644 vendor/guzzlehttp/promises/src/EachPromise.php
create mode 100644 vendor/guzzlehttp/promises/src/FulfilledPromise.php
create mode 100644 vendor/guzzlehttp/promises/src/Is.php
create mode 100644 vendor/guzzlehttp/promises/src/Promise.php
create mode 100644 vendor/guzzlehttp/promises/src/PromiseInterface.php
create mode 100644 vendor/guzzlehttp/promises/src/PromisorInterface.php
create mode 100644 vendor/guzzlehttp/promises/src/RejectedPromise.php
create mode 100644 vendor/guzzlehttp/promises/src/RejectionException.php
create mode 100644 vendor/guzzlehttp/promises/src/TaskQueue.php
create mode 100644 vendor/guzzlehttp/promises/src/TaskQueueInterface.php
create mode 100644 vendor/guzzlehttp/promises/src/Utils.php
create mode 100644 vendor/guzzlehttp/promises/src/functions.php
create mode 100644 vendor/guzzlehttp/promises/src/functions_include.php
create mode 100644 vendor/guzzlehttp/psr7/CHANGELOG.md
create mode 100644 vendor/guzzlehttp/psr7/LICENSE
create mode 100644 vendor/guzzlehttp/psr7/README.md
create mode 100644 vendor/guzzlehttp/psr7/composer.json
create mode 100644 vendor/guzzlehttp/psr7/src/AppendStream.php
create mode 100644 vendor/guzzlehttp/psr7/src/BufferStream.php
create mode 100644 vendor/guzzlehttp/psr7/src/CachingStream.php
create mode 100644 vendor/guzzlehttp/psr7/src/DroppingStream.php
create mode 100644 vendor/guzzlehttp/psr7/src/FnStream.php
create mode 100644 vendor/guzzlehttp/psr7/src/Header.php
create mode 100644 vendor/guzzlehttp/psr7/src/HttpFactory.php
create mode 100644 vendor/guzzlehttp/psr7/src/InflateStream.php
create mode 100644 vendor/guzzlehttp/psr7/src/LazyOpenStream.php
create mode 100644 vendor/guzzlehttp/psr7/src/LimitStream.php
create mode 100644 vendor/guzzlehttp/psr7/src/Message.php
create mode 100644 vendor/guzzlehttp/psr7/src/MessageTrait.php
create mode 100644 vendor/guzzlehttp/psr7/src/MimeType.php
create mode 100644 vendor/guzzlehttp/psr7/src/MultipartStream.php
create mode 100644 vendor/guzzlehttp/psr7/src/NoSeekStream.php
create mode 100644 vendor/guzzlehttp/psr7/src/PumpStream.php
create mode 100644 vendor/guzzlehttp/psr7/src/Query.php
create mode 100644 vendor/guzzlehttp/psr7/src/Request.php
create mode 100644 vendor/guzzlehttp/psr7/src/Response.php
create mode 100644 vendor/guzzlehttp/psr7/src/Rfc7230.php
create mode 100644 vendor/guzzlehttp/psr7/src/ServerRequest.php
create mode 100644 vendor/guzzlehttp/psr7/src/Stream.php
create mode 100644 vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php
create mode 100644 vendor/guzzlehttp/psr7/src/StreamWrapper.php
create mode 100644 vendor/guzzlehttp/psr7/src/UploadedFile.php
create mode 100644 vendor/guzzlehttp/psr7/src/Uri.php
create mode 100644 vendor/guzzlehttp/psr7/src/UriNormalizer.php
create mode 100644 vendor/guzzlehttp/psr7/src/UriResolver.php
create mode 100644 vendor/guzzlehttp/psr7/src/Utils.php
create mode 100644 vendor/guzzlehttp/psr7/vendor-bin/php-cs-fixer/composer.json
create mode 100644 vendor/guzzlehttp/psr7/vendor-bin/phpstan/composer.json
create mode 100644 vendor/guzzlehttp/psr7/vendor-bin/psalm/composer.json
create mode 100644 vendor/guzzlehttp/uri-template/CHANGELOG.md
create mode 100644 vendor/guzzlehttp/uri-template/LICENSE.md
create mode 100644 vendor/guzzlehttp/uri-template/README.md
create mode 100644 vendor/guzzlehttp/uri-template/composer.json
create mode 100644 vendor/guzzlehttp/uri-template/src/UriTemplate.php
create mode 100644 vendor/phpmailer/phpmailer/COMMITMENT
create mode 100644 vendor/phpmailer/phpmailer/LICENSE
create mode 100644 vendor/phpmailer/phpmailer/README.md
create mode 100644 vendor/phpmailer/phpmailer/SECURITY.md
create mode 100644 vendor/phpmailer/phpmailer/VERSION
create mode 100644 vendor/phpmailer/phpmailer/composer.json
create mode 100644 vendor/phpmailer/phpmailer/get_oauth_token.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ar.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-az.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ba.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-be.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-bg.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ca.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ch.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-de.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-el.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-eo.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-es.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-et.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-fa.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-fo.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-gl.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-he.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-hi.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-hr.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-hu.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-hy.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-id.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-it.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ka.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ko.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-lt.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-lv.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-mg.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ms.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-nl.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-pt.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-sr.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-sr_latn.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-tl.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-uk.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-vi.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-zh.php
create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php
create mode 100644 vendor/phpmailer/phpmailer/src/Exception.php
create mode 100644 vendor/phpmailer/phpmailer/src/OAuth.php
create mode 100644 vendor/phpmailer/phpmailer/src/PHPMailer.php
create mode 100644 vendor/phpmailer/phpmailer/src/POP3.php
create mode 100644 vendor/phpmailer/phpmailer/src/SMTP.php
create mode 100644 vendor/psr/http-client/CHANGELOG.md
create mode 100644 vendor/psr/http-client/LICENSE
create mode 100644 vendor/psr/http-client/README.md
create mode 100644 vendor/psr/http-client/composer.json
create mode 100644 vendor/psr/http-client/src/ClientExceptionInterface.php
create mode 100644 vendor/psr/http-client/src/ClientInterface.php
create mode 100644 vendor/psr/http-client/src/NetworkExceptionInterface.php
create mode 100644 vendor/psr/http-client/src/RequestExceptionInterface.php
create mode 100644 vendor/psr/http-factory/.gitignore
create mode 100644 vendor/psr/http-factory/.pullapprove.yml
create mode 100644 vendor/psr/http-factory/LICENSE
create mode 100644 vendor/psr/http-factory/README.md
create mode 100644 vendor/psr/http-factory/composer.json
create mode 100644 vendor/psr/http-factory/src/RequestFactoryInterface.php
create mode 100644 vendor/psr/http-factory/src/ResponseFactoryInterface.php
create mode 100644 vendor/psr/http-factory/src/ServerRequestFactoryInterface.php
create mode 100644 vendor/psr/http-factory/src/StreamFactoryInterface.php
create mode 100644 vendor/psr/http-factory/src/UploadedFileFactoryInterface.php
create mode 100644 vendor/psr/http-factory/src/UriFactoryInterface.php
create mode 100644 vendor/psr/http-message/CHANGELOG.md
create mode 100644 vendor/psr/http-message/LICENSE
create mode 100644 vendor/psr/http-message/README.md
create mode 100644 vendor/psr/http-message/composer.json
create mode 100644 vendor/psr/http-message/src/MessageInterface.php
create mode 100644 vendor/psr/http-message/src/RequestInterface.php
create mode 100644 vendor/psr/http-message/src/ResponseInterface.php
create mode 100644 vendor/psr/http-message/src/ServerRequestInterface.php
create mode 100644 vendor/psr/http-message/src/StreamInterface.php
create mode 100644 vendor/psr/http-message/src/UploadedFileInterface.php
create mode 100644 vendor/psr/http-message/src/UriInterface.php
create mode 100644 vendor/qcloud/cos-sdk-v5/.github/workflows/php5.6.yml
create mode 100644 vendor/qcloud/cos-sdk-v5/.github/workflows/php7.1.yml
create mode 100644 vendor/qcloud/cos-sdk-v5/.github/workflows/php7.2.yml
create mode 100644 vendor/qcloud/cos-sdk-v5/CHANGELOG.md
create mode 100644 vendor/qcloud/cos-sdk-v5/LICENSE
create mode 100644 vendor/qcloud/cos-sdk-v5/README.md
create mode 100644 vendor/qcloud/cos-sdk-v5/composer.json
create mode 100644 vendor/qcloud/cos-sdk-v5/phpunit.xml
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/abortMultipartUpload.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/appendObject.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/blindWatermark.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/catchException.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/ciTransformation.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/completeMultipartUpload.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/copy.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/copyObject.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/cosClient.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/createBucket.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/createFolder.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/createMediaConcatJobs.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/createMediaSnapshotJobs.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/createMediaTranscodeJobs.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/createMultipartUpload.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/deleteBucket.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/deleteBucketCors.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/deleteBucketDomain.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/deleteBucketGuetzli.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/deleteBucketImageStyle.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/deleteBucketLifecycle.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/deleteBucketTagging.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/deleteBucketWebsite.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/deleteFolder.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/deleteObject.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/deleteObjectTagging.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/detectAudio.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/detectDocument.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/detectLable.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/detectText.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/detectVideo.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/download.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/downloadFolder.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getBlindWatermark.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getBucketAcl.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getBucketCors.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getBucketDomain.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getBucketGuetzli.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getBucketImageStyle.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getBucketInventory.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getBucketLifecycle.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getBucketLogging.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getBucketReferer.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getBucketTagging.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getBucketWebsite.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getDetectAudioResult.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getDetectDocumentResult.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getDetectTextResult.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getDetectVideoResult.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getMediaInfo.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getObject.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getObjectSensitiveContentRecognition.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getObjectTagging.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getObjectUrl.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getObjectWithoutSign.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getPresignedUrl.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/getSnapshot.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/headBucket.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/headObject.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/imageAve.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/imageExif.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/imageInfo.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/imageMogr.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/imageProcess.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/imageView.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/imageWatermark.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/listBucket.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/listMultipartUploads.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/listObjects.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/listParts.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/picOperations.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/putBlindWatermark.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/putBucketAcl.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/putBucketCors.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/putBucketDomain.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/putBucketGuetzli.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/putBucketImageStyle.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/putBucketInventory.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/putBucketLifecycle.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/putBucketLogging.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/putBucketReferer.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/putBucketTagging.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/putBucketWebsite.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/putImageStyle.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/putObject.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/putObjectTagging.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/putQrcode.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/qrcode.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/qrcodeGenerate.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/restoreObject.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/selectObjectContent.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/textWatermark.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/trafficLimit.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/upload.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/uploadFolder.php
create mode 100644 vendor/qcloud/cos-sdk-v5/sample/uploadPart.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/Client.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/CommandToRequestTransformer.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/Common.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/Copy.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/Descriptions.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/Exception/CosException.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/Exception/ServiceResponseException.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/ExceptionMiddleware.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/ExceptionParser.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/ImageParamTemplate/BlindWatermarkTemplate.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/ImageParamTemplate/CIParamTransformation.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/ImageParamTemplate/ImageMogrTemplate.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/ImageParamTemplate/ImageQrcodeTemplate.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/ImageParamTemplate/ImageStyleTemplate.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/ImageParamTemplate/ImageTemplate.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/ImageParamTemplate/ImageViewTemplate.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/ImageParamTemplate/ImageWatermarkTemplate.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/ImageParamTemplate/PicOperationsTransformation.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/ImageParamTemplate/TextWatermarkTemplate.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/MultipartUpload.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/RangeDownload.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/Request/BodyLocation.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/ResultTransformer.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/Serializer.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/Service.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/Signature.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/SignatureMiddleware.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/Tests/COSTest.php
create mode 100644 vendor/qcloud/cos-sdk-v5/src/Qcloud/Cos/Tests/TestHelper.php
create mode 100644 vendor/ralouphie/getallheaders/LICENSE
create mode 100644 vendor/ralouphie/getallheaders/README.md
create mode 100644 vendor/ralouphie/getallheaders/composer.json
create mode 100644 vendor/ralouphie/getallheaders/src/getallheaders.php
create mode 100644 vendor/symfony/polyfill-php80/LICENSE
create mode 100644 vendor/symfony/polyfill-php80/Php80.php
create mode 100644 vendor/symfony/polyfill-php80/README.md
create mode 100644 vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php
create mode 100644 vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php
create mode 100644 vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php
create mode 100644 vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php
create mode 100644 vendor/symfony/polyfill-php80/bootstrap.php
create mode 100644 vendor/symfony/polyfill-php80/composer.json
create mode 100644 vendor/topthink/think-captcha/.gitignore
create mode 100644 vendor/topthink/think-captcha/LICENSE
create mode 100644 vendor/topthink/think-captcha/README.md
create mode 100644 vendor/topthink/think-captcha/assets/bgs/1.jpg
create mode 100644 vendor/topthink/think-captcha/assets/bgs/2.jpg
create mode 100644 vendor/topthink/think-captcha/assets/bgs/3.jpg
create mode 100644 vendor/topthink/think-captcha/assets/bgs/4.jpg
create mode 100644 vendor/topthink/think-captcha/assets/bgs/5.jpg
create mode 100644 vendor/topthink/think-captcha/assets/bgs/6.jpg
create mode 100644 vendor/topthink/think-captcha/assets/bgs/7.jpg
create mode 100644 vendor/topthink/think-captcha/assets/bgs/8.jpg
create mode 100644 vendor/topthink/think-captcha/assets/ttfs/1.ttf
create mode 100644 vendor/topthink/think-captcha/assets/ttfs/2.ttf
create mode 100644 vendor/topthink/think-captcha/assets/ttfs/3.ttf
create mode 100644 vendor/topthink/think-captcha/assets/ttfs/4.ttf
create mode 100644 vendor/topthink/think-captcha/assets/ttfs/5.ttf
create mode 100644 vendor/topthink/think-captcha/assets/ttfs/6.ttf
create mode 100644 vendor/topthink/think-captcha/assets/zhttfs/1.ttf
create mode 100644 vendor/topthink/think-captcha/composer.json
create mode 100644 vendor/topthink/think-captcha/src/Captcha.php
create mode 100644 vendor/topthink/think-captcha/src/CaptchaController.php
create mode 100644 vendor/topthink/think-captcha/src/helper.php
create mode 100644 vendor/topthink/think-installer/.gitignore
create mode 100644 vendor/topthink/think-installer/composer.json
create mode 100644 vendor/topthink/think-installer/src/LibraryInstaller.php
create mode 100644 vendor/topthink/think-installer/src/Plugin.php
create mode 100644 vendor/topthink/think-installer/src/Promise.php
create mode 100644 vendor/topthink/think-installer/src/ThinkExtend.php
create mode 100644 vendor/topthink/think-installer/src/ThinkFramework.php
create mode 100644 vendor/topthink/think-installer/src/ThinkTesting.php
diff --git a/.gitignore b/.gitignore
index 2f3b478..fb91e34 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,4 +11,5 @@ thinkphp
/public/server/chunks/*
/public/server/upload/*
/public/temp/*
-/public/avatar/*
\ No newline at end of file
+/public/avatar/*
+/runtime
diff --git a/runtime/.gitignore b/runtime/.gitignore
deleted file mode 100644
index c96a04f..0000000
--- a/runtime/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*
-!.gitignore
\ No newline at end of file
diff --git a/thinkphp/.gitignore b/thinkphp/.gitignore
new file mode 100644
index 0000000..f7775ba
--- /dev/null
+++ b/thinkphp/.gitignore
@@ -0,0 +1,8 @@
+/vendor
+composer.phar
+composer.lock
+.DS_Store
+Thumbs.db
+/phpunit.xml
+/.idea
+/.vscode
\ No newline at end of file
diff --git a/thinkphp/.htaccess b/thinkphp/.htaccess
new file mode 100644
index 0000000..3418e55
--- /dev/null
+++ b/thinkphp/.htaccess
@@ -0,0 +1 @@
+deny from all
\ No newline at end of file
diff --git a/thinkphp/CONTRIBUTING.md b/thinkphp/CONTRIBUTING.md
new file mode 100644
index 0000000..6cefcb3
--- /dev/null
+++ b/thinkphp/CONTRIBUTING.md
@@ -0,0 +1,119 @@
+如何贡献我的源代码
+===
+
+此文档介绍了 ThinkPHP 团队的组成以及运转机制,您提交的代码将给 ThinkPHP 项目带来什么好处,以及如何才能加入我们的行列。
+
+## 通过 Github 贡献代码
+
+ThinkPHP 目前使用 Git 来控制程序版本,如果你想为 ThinkPHP 贡献源代码,请先大致了解 Git 的使用方法。我们目前把项目托管在 GitHub 上,任何 GitHub 用户都可以向我们贡献代码。
+
+参与的方式很简单,`fork`一份 ThinkPHP 的代码到你的仓库中,修改后提交,并向我们发起`pull request`申请,我们会及时对代码进行审查并处理你的申请并。审查通过后,你的代码将被`merge`进我们的仓库中,这样你就会自动出现在贡献者名单里了,非常方便。
+
+我们希望你贡献的代码符合:
+
+* ThinkPHP 的编码规范
+* 适当的注释,能让其他人读懂
+* 遵循 Apache2 开源协议
+
+**如果想要了解更多细节或有任何疑问,请继续阅读下面的内容**
+
+### 注意事项
+
+* 本项目代码格式化标准选用 [**PSR-2**](http://www.kancloud.cn/thinkphp/php-fig-psr/3141);
+* 类名和类文件名遵循 [**PSR-4**](http://www.kancloud.cn/thinkphp/php-fig-psr/3144);
+* 对于 Issues 的处理,请使用诸如 `fix #xxx(Issue ID)` 的 commit title 直接关闭 issue。
+* 系统会自动在 PHP 5.4 5.5 5.6 7.0 和 HHVM 上测试修改,其中 HHVM 下的测试容许报错,请确保你的修改符合 PHP 5.4 ~ 5.6 和 PHP 7.0 的语法规范;
+* 管理员不会合并造成 CI faild 的修改,若出现 CI faild 请检查自己的源代码或修改相应的[单元测试文件](tests);
+
+## GitHub Issue
+
+GitHub 提供了 Issue 功能,该功能可以用于:
+
+* 提出 bug
+* 提出功能改进
+* 反馈使用体验
+
+该功能不应该用于:
+
+ * 提出修改意见(涉及代码署名和修订追溯问题)
+ * 不友善的言论
+
+## 快速修改
+
+**GitHub 提供了快速编辑文件的功能**
+
+1. 登录 GitHub 帐号;
+2. 浏览项目文件,找到要进行修改的文件;
+3. 点击右上角铅笔图标进行修改;
+4. 填写 `Commit changes` 相关内容(Title 必填);
+5. 提交修改,等待 CI 验证和管理员合并。
+
+**若您需要一次提交大量修改,请继续阅读下面的内容**
+
+## 完整流程
+
+1. `fork`本项目;
+2. 克隆(`clone`)你 `fork` 的项目到本地;
+3. 新建分支(`branch`)并检出(`checkout`)新分支;
+4. 添加本项目到你的本地 git 仓库作为上游(`upstream`);
+5. 进行修改,若你的修改包含方法或函数的增减,请记得修改[单元测试文件](tests);
+6. 变基(衍合 `rebase`)你的分支到上游 master 分支;
+7. `push` 你的本地仓库到 GitHub;
+8. 提交 `pull request`;
+9. 等待 CI 验证(若不通过则重复 5~7,GitHub 会自动更新你的 `pull request`);
+10. 等待管理员处理,并及时 `rebase` 你的分支到上游 master 分支(若上游 master 分支有修改)。
+
+*若有必要,可以 `git push -f` 强行推送 rebase 后的分支到自己的 `fork`*
+
+*绝对不可以使用 `git push -f` 强行推送修改到上游*
+
+### 注意事项
+
+* 若对上述流程有任何不清楚的地方,请查阅 GIT 教程,如 [这个](http://backlogtool.com/git-guide/cn/);
+* 对于代码**不同方面**的修改,请在自己 `fork` 的项目中**创建不同的分支**(原因参见`完整流程`第9条备注部分);
+* 变基及交互式变基操作参见 [Git 交互式变基](http://pakchoi.me/2015/03/17/git-interactive-rebase/)
+
+## 推荐资源
+
+### 开发环境
+
+* XAMPP for Windows 5.5.x
+* WampServer (for Windows)
+* upupw Apache PHP5.4 ( for Windows)
+
+或自行安装
+
+- Apache / Nginx
+- PHP 5.4 ~ 5.6
+- MySQL / MariaDB
+
+*Windows 用户推荐添加 PHP bin 目录到 PATH,方便使用 composer*
+
+*Linux 用户自行配置环境, Mac 用户推荐使用内置 Apache 配合 Homebrew 安装 PHP 和 MariaDB*
+
+### 编辑器
+
+Sublime Text 3 + phpfmt 插件
+
+phpfmt 插件参数
+
+```json
+{
+ "autocomplete": true,
+ "enable_auto_align": true,
+ "format_on_save": true,
+ "indent_with_space": true,
+ "psr1_naming": false,
+ "psr2": true,
+ "version": 4
+}
+```
+
+或其他 编辑器 / IDE 配合 PSR2 自动格式化工具
+
+### Git GUI
+
+* SourceTree
+* GitHub Desktop
+
+或其他 Git 图形界面客户端
diff --git a/thinkphp/LICENSE.txt b/thinkphp/LICENSE.txt
new file mode 100644
index 0000000..774fa76
--- /dev/null
+++ b/thinkphp/LICENSE.txt
@@ -0,0 +1,32 @@
+
+ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
+版权所有Copyright © 2006-2018 by ThinkPHP (http://thinkphp.cn)
+All rights reserved。
+ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。
+
+Apache Licence是著名的非盈利开源组织Apache采用的协议。
+该协议和BSD类似,鼓励代码共享和尊重原作者的著作权,
+允许代码修改,再作为开源或商业软件发布。需要满足
+的条件:
+1. 需要给代码的用户一份Apache Licence ;
+2. 如果你修改了代码,需要在被修改的文件中说明;
+3. 在延伸的代码中(修改和有源代码衍生的代码中)需要
+带有原来代码中的协议,商标,专利声明和其他原来作者规
+定需要包含的说明;
+4. 如果再发布的产品中包含一个Notice文件,则在Notice文
+件中需要带有本协议内容。你可以在Notice中增加自己的
+许可,但不可以表现为对Apache Licence构成更改。
+具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
diff --git a/thinkphp/README.md b/thinkphp/README.md
new file mode 100644
index 0000000..1339e6c
--- /dev/null
+++ b/thinkphp/README.md
@@ -0,0 +1,99 @@
+
+
+ThinkPHP 5.1(LTS) —— 12载初心,你值得信赖的PHP框架
+===============
+
+[](https://scrutinizer-ci.com/g/top-think/framework/?branch=5.1)
+[](https://travis-ci.org/top-think/framework)
+[](https://packagist.org/packages/topthink/framework)
+[](https://packagist.org/packages/topthink/framework)
+[](http://www.php.net/)
+[](https://packagist.org/packages/topthink/framework)
+
+ThinkPHP5.1对底层架构做了进一步的改进,减少依赖,其主要特性包括:
+
+ + 采用容器统一管理对象
+ + 支持Facade
+ + 更易用的路由
+ + 注解路由支持
+ + 路由跨域请求支持
+ + 验证类增强
+ + 配置和路由目录独立
+ + 取消系统常量
+ + 类库别名机制
+ + 模型和数据库增强
+ + 依赖注入完善
+ + 支持PSR-3日志规范
+ + 中间件支持(`V5.1.6+`)
+ + 支持`Swoole`/`Workerman`运行(`V5.1.18+`)
+
+官方已经正式宣布`5.1.27`版本为LTS版本。
+
+### 废除的功能:
+
+ + 聚合模型
+ + 内置控制器扩展类
+ + 模型自动验证
+
+> ThinkPHP5.1的运行环境要求PHP5.6+ 兼容PHP8.0。
+
+
+## 安装
+
+使用composer安装
+
+~~~
+composer create-project topthink/think tp
+~~~
+
+启动服务
+
+~~~
+cd tp
+php think run
+~~~
+
+然后就可以在浏览器中访问
+
+~~~
+http://localhost:8000
+~~~
+
+更新框架
+~~~
+composer update topthink/framework
+~~~
+
+
+## 在线手册
+
++ [完全开发手册](https://www.kancloud.cn/manual/thinkphp5_1/content)
++ [升级指导](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 核心框架包](https://github.com/top-think/framework)。
+
+## 版权信息
+
+ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
+
+本项目包含的第三方源码和二进制文件之版权信息另行标注。
+
+版权所有Copyright © 2006-2018 by ThinkPHP (http://thinkphp.cn)
+
+All rights reserved。
+
+ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。
+
+更多细节参阅 [LICENSE.txt](LICENSE.txt)
diff --git a/thinkphp/base.php b/thinkphp/base.php
new file mode 100644
index 0000000..d7238cc
--- /dev/null
+++ b/thinkphp/base.php
@@ -0,0 +1,52 @@
+
+// +----------------------------------------------------------------------
+namespace think;
+
+// 载入Loader类
+require __DIR__ . '/library/think/Loader.php';
+
+// 注册自动加载
+Loader::register();
+
+// 注册错误和异常处理机制
+Error::register();
+
+// 实现日志接口
+if (interface_exists('Psr\Log\LoggerInterface')) {
+ interface LoggerInterface extends \Psr\Log\LoggerInterface
+ {}
+} else {
+ interface LoggerInterface
+ {}
+}
+
+// 注册类库别名
+Loader::addClassAlias([
+ 'App' => facade\App::class,
+ 'Build' => facade\Build::class,
+ 'Cache' => facade\Cache::class,
+ 'Config' => facade\Config::class,
+ 'Cookie' => facade\Cookie::class,
+ 'Db' => Db::class,
+ 'Debug' => facade\Debug::class,
+ 'Env' => facade\Env::class,
+ 'Facade' => Facade::class,
+ 'Hook' => facade\Hook::class,
+ 'Lang' => facade\Lang::class,
+ 'Log' => facade\Log::class,
+ 'Request' => facade\Request::class,
+ 'Response' => facade\Response::class,
+ 'Route' => facade\Route::class,
+ 'Session' => facade\Session::class,
+ 'Url' => facade\Url::class,
+ 'Validate' => facade\Validate::class,
+ 'View' => facade\View::class,
+]);
diff --git a/thinkphp/composer.json b/thinkphp/composer.json
new file mode 100644
index 0000000..33477b1
--- /dev/null
+++ b/thinkphp/composer.json
@@ -0,0 +1,35 @@
+{
+ "name": "topthink/framework",
+ "description": "the new thinkphp framework",
+ "type": "think-framework",
+ "keywords": [
+ "framework",
+ "thinkphp",
+ "ORM"
+ ],
+ "homepage": "http://thinkphp.cn/",
+ "license": "Apache-2.0",
+ "authors": [
+ {
+ "name": "liu21st",
+ "email": "liu21st@gmail.com"
+ },
+ {
+ "name": "yunwuxin",
+ "email": "448901948@qq.com"
+ }
+ ],
+ "require": {
+ "php": ">=5.6.0",
+ "topthink/think-installer": "2.*"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^5.0|^6.0",
+ "johnkary/phpunit-speedtrap": "^1.0",
+ "mikey179/vfsstream": "~1.6",
+ "phploc/phploc": "2.*",
+ "sebastian/phpcpd": "2.*",
+ "squizlabs/php_codesniffer": "2.*",
+ "phpdocumentor/reflection-docblock": "^2.0"
+ }
+}
diff --git a/thinkphp/convention.php b/thinkphp/convention.php
new file mode 100644
index 0000000..1d85e56
--- /dev/null
+++ b/thinkphp/convention.php
@@ -0,0 +1,327 @@
+ [
+ // 应用名称
+ 'app_name' => '',
+ // 应用地址
+ 'app_host' => '',
+ // 应用调试模式
+ 'app_debug' => false,
+ // 应用Trace
+ 'app_trace' => false,
+ // 应用模式状态
+ 'app_status' => '',
+ // 是否HTTPS
+ 'is_https' => false,
+ // 入口自动绑定模块
+ 'auto_bind_module' => false,
+ // 注册的根命名空间
+ 'root_namespace' => [],
+ // 默认输出类型
+ 'default_return_type' => 'html',
+ // 默认AJAX 数据返回格式,可选json xml ...
+ 'default_ajax_return' => 'json',
+ // 默认JSONP格式返回的处理方法
+ 'default_jsonp_handler' => 'jsonpReturn',
+ // 默认JSONP处理方法
+ 'var_jsonp_handler' => 'callback',
+ // 默认时区
+ 'default_timezone' => 'Asia/Shanghai',
+ // 是否开启多语言
+ 'lang_switch_on' => false,
+ // 默认验证器
+ 'default_validate' => '',
+ // 默认语言
+ 'default_lang' => 'zh-cn',
+
+ // +----------------------------------------------------------------------
+ // | 模块设置
+ // +----------------------------------------------------------------------
+
+ // 自动搜索控制器
+ 'controller_auto_search' => false,
+ // 操作方法前缀
+ 'use_action_prefix' => false,
+ // 操作方法后缀
+ 'action_suffix' => '',
+ // 默认的空控制器名
+ 'empty_controller' => 'Error',
+ // 默认的空模块名
+ 'empty_module' => '',
+ // 默认模块名
+ 'default_module' => 'index',
+ // 是否支持多模块
+ 'app_multi_module' => true,
+ // 禁止访问模块
+ 'deny_module_list' => ['common'],
+ // 默认控制器名
+ 'default_controller' => 'Index',
+ // 默认操作名
+ 'default_action' => 'index',
+ // 是否自动转换URL中的控制器和操作名
+ 'url_convert' => true,
+ // 默认的访问控制器层
+ 'url_controller_layer' => 'controller',
+ // 应用类库后缀
+ 'class_suffix' => false,
+ // 控制器类后缀
+ 'controller_suffix' => false,
+
+ // +----------------------------------------------------------------------
+ // | URL请求设置
+ // +----------------------------------------------------------------------
+
+ // 默认全局过滤方法 用逗号分隔多个
+ 'default_filter' => '',
+ // PATHINFO变量名 用于兼容模式
+ 'var_pathinfo' => 's',
+ // 兼容PATH_INFO获取
+ 'pathinfo_fetch' => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'],
+ // HTTPS代理标识
+ 'https_agent_name' => '',
+ // IP代理获取标识
+ 'http_agent_ip' => 'HTTP_X_REAL_IP',
+ // URL伪静态后缀
+ 'url_html_suffix' => 'html',
+ // 域名根,如thinkphp.cn
+ 'url_domain_root' => '',
+ // 表单请求类型伪装变量
+ 'var_method' => '_method',
+ // 表单ajax伪装变量
+ 'var_ajax' => '_ajax',
+ // 表单pjax伪装变量
+ 'var_pjax' => '_pjax',
+ // 是否开启请求缓存 true自动缓存 支持设置请求缓存规则
+ 'request_cache' => false,
+ // 请求缓存有效期
+ 'request_cache_expire' => null,
+ // 全局请求缓存排除规则
+ 'request_cache_except' => [],
+
+ // +----------------------------------------------------------------------
+ // | 路由设置
+ // +----------------------------------------------------------------------
+
+ // pathinfo分隔符
+ 'pathinfo_depr' => '/',
+ // URL普通方式参数 用于自动生成
+ 'url_common_param' => false,
+ // URL参数方式 0 按名称成对解析 1 按顺序解析
+ 'url_param_type' => 0,
+ // 是否开启路由延迟解析
+ 'url_lazy_route' => false,
+ // 是否强制使用路由
+ 'url_route_must' => false,
+ // 合并路由规则
+ 'route_rule_merge' => false,
+ // 路由是否完全匹配
+ 'route_complete_match' => false,
+ // 使用注解路由
+ 'route_annotation' => false,
+ // 默认的路由变量规则
+ 'default_route_pattern' => '\w+',
+ // 是否开启路由缓存
+ 'route_check_cache' => false,
+ // 路由缓存的Key自定义设置(闭包),默认为当前URL和请求类型的md5
+ 'route_check_cache_key' => '',
+ // 路由缓存的设置
+ 'route_cache_option' => [],
+
+ // +----------------------------------------------------------------------
+ // | 异常及错误设置
+ // +----------------------------------------------------------------------
+
+ // 默认跳转页面对应的模板文件
+ 'dispatch_success_tmpl' => __DIR__ . '/tpl/dispatch_jump.tpl',
+ 'dispatch_error_tmpl' => __DIR__ . '/tpl/dispatch_jump.tpl',
+ // 异常页面的模板文件
+ 'exception_tmpl' => __DIR__ . '/tpl/think_exception.tpl',
+ // 错误显示信息,非调试模式有效
+ 'error_message' => '页面错误!请稍后再试~',
+ // 显示错误信息
+ 'show_error_msg' => false,
+ // 异常处理handle类 留空使用 \think\exception\Handle
+ 'exception_handle' => '',
+ ],
+
+ // +----------------------------------------------------------------------
+ // | 模板设置
+ // +----------------------------------------------------------------------
+
+ 'template' => [
+ // 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写
+ 'auto_rule' => 1,
+ // 模板引擎类型 支持 php think 支持扩展
+ 'type' => 'Think',
+ // 视图基础目录,配置目录为所有模块的视图起始目录
+ 'view_base' => '',
+ // 当前模板的视图目录 留空为自动获取
+ 'view_path' => '',
+ // 模板后缀
+ 'view_suffix' => 'html',
+ // 模板文件名分隔符
+ 'view_depr' => DIRECTORY_SEPARATOR,
+ // 模板引擎普通标签开始标记
+ 'tpl_begin' => '{',
+ // 模板引擎普通标签结束标记
+ 'tpl_end' => '}',
+ // 标签库标签开始标记
+ 'taglib_begin' => '{',
+ // 标签库标签结束标记
+ 'taglib_end' => '}',
+ ],
+
+ // +----------------------------------------------------------------------
+ // | 日志设置
+ // +----------------------------------------------------------------------
+
+ 'log' => [
+ // 日志记录方式,内置 file socket 支持扩展
+ 'type' => 'File',
+ // 日志保存目录
+ //'path' => LOG_PATH,
+ // 日志记录级别
+ 'level' => [],
+ // 是否记录trace信息到日志
+ 'record_trace' => false,
+ // 是否JSON格式记录
+ 'json' => false,
+ ],
+
+ // +----------------------------------------------------------------------
+ // | Trace设置 开启 app_trace 后 有效
+ // +----------------------------------------------------------------------
+
+ 'trace' => [
+ // 内置Html Console 支持扩展
+ 'type' => 'Html',
+ 'file' => __DIR__ . '/tpl/page_trace.tpl',
+ ],
+
+ // +----------------------------------------------------------------------
+ // | 缓存设置
+ // +----------------------------------------------------------------------
+
+ 'cache' => [
+ // 驱动方式
+ 'type' => 'File',
+ // 缓存保存目录
+ //'path' => CACHE_PATH,
+ // 缓存前缀
+ 'prefix' => '',
+ // 缓存有效期 0表示永久缓存
+ 'expire' => 0,
+ ],
+
+ // +----------------------------------------------------------------------
+ // | 会话设置
+ // +----------------------------------------------------------------------
+
+ 'session' => [
+ 'id' => '',
+ // SESSION_ID的提交变量,解决flash上传跨域
+ 'var_session_id' => '',
+ // SESSION 前缀
+ 'prefix' => 'think',
+ // 驱动方式 支持redis memcache memcached
+ 'type' => '',
+ // 是否自动开启 SESSION
+ 'auto_start' => true,
+ 'httponly' => true,
+ 'secure' => false,
+ ],
+
+ // +----------------------------------------------------------------------
+ // | Cookie设置
+ // +----------------------------------------------------------------------
+
+ 'cookie' => [
+ // cookie 名称前缀
+ 'prefix' => '',
+ // cookie 保存时间
+ 'expire' => 0,
+ // cookie 保存路径
+ 'path' => '/',
+ // cookie 有效域名
+ 'domain' => '',
+ // cookie 启用安全传输
+ 'secure' => false,
+ // httponly设置
+ 'httponly' => '',
+ // 是否使用 setcookie
+ 'setcookie' => true,
+ ],
+
+ // +----------------------------------------------------------------------
+ // | 数据库设置
+ // +----------------------------------------------------------------------
+
+ 'database' => [
+ // 数据库类型
+ 'type' => 'mysql',
+ // 数据库连接DSN配置
+ 'dsn' => '',
+ // 服务器地址
+ 'hostname' => '127.0.0.1',
+ // 数据库名
+ 'database' => '',
+ // 数据库用户名
+ 'username' => 'root',
+ // 数据库密码
+ 'password' => '',
+ // 数据库连接端口
+ 'hostport' => '',
+ // 数据库连接参数
+ 'params' => [],
+ // 数据库编码默认采用utf8
+ 'charset' => 'utf8',
+ // 数据库表前缀
+ 'prefix' => '',
+ // 数据库调试模式
+ 'debug' => false,
+ // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
+ 'deploy' => 0,
+ // 数据库读写是否分离 主从式有效
+ 'rw_separate' => false,
+ // 读写分离后 主服务器数量
+ 'master_num' => 1,
+ // 指定从服务器序号
+ 'slave_no' => '',
+ // 是否严格检查字段是否存在
+ 'fields_strict' => true,
+ // 数据集返回类型
+ 'resultset_type' => 'array',
+ // 自动写入时间戳字段
+ 'auto_timestamp' => false,
+ // 时间字段取出后的默认时间格式
+ 'datetime_format' => 'Y-m-d H:i:s',
+ // 是否需要进行SQL性能分析
+ 'sql_explain' => false,
+ // 查询对象
+ 'query' => '\\think\\db\\Query',
+ ],
+
+ //分页配置
+ 'paginate' => [
+ 'type' => 'bootstrap',
+ 'var_page' => 'page',
+ 'list_rows' => 15,
+ ],
+
+ //控制台配置
+ 'console' => [
+ 'name' => 'Think Console',
+ 'version' => '0.1',
+ 'user' => null,
+ 'auto_path' => '',
+ ],
+
+ // 中间件配置
+ 'middleware' => [
+ 'default_namespace' => 'app\\http\\middleware\\',
+ ],
+];
diff --git a/thinkphp/helper.php b/thinkphp/helper.php
new file mode 100644
index 0000000..72b9e9f
--- /dev/null
+++ b/thinkphp/helper.php
@@ -0,0 +1,726 @@
+
+// +----------------------------------------------------------------------
+
+//------------------------
+// ThinkPHP 助手函数
+//-------------------------
+
+use think\Container;
+use think\Db;
+use think\exception\HttpException;
+use think\exception\HttpResponseException;
+use think\facade\Cache;
+use think\facade\Config;
+use think\facade\Cookie;
+use think\facade\Debug;
+use think\facade\Env;
+use think\facade\Hook;
+use think\facade\Lang;
+use think\facade\Log;
+use think\facade\Request;
+use think\facade\Route;
+use think\facade\Session;
+use think\facade\Url;
+use think\Response;
+use think\route\RuleItem;
+
+if (!function_exists('abort')) {
+ /**
+ * 抛出HTTP异常
+ * @param integer|Response $code 状态码 或者 Response对象实例
+ * @param string $message 错误信息
+ * @param array $header 参数
+ */
+ function abort($code, $message = null, $header = [])
+ {
+ if ($code instanceof Response) {
+ throw new HttpResponseException($code);
+ } else {
+ throw new HttpException($code, $message, null, $header);
+ }
+ }
+}
+
+if (!function_exists('action')) {
+ /**
+ * 调用模块的操作方法 参数格式 [模块/控制器/]操作
+ * @param string $url 调用地址
+ * @param string|array $vars 调用参数 支持字符串和数组
+ * @param string $layer 要调用的控制层名称
+ * @param bool $appendSuffix 是否添加类名后缀
+ * @return mixed
+ */
+ function action($url, $vars = [], $layer = 'controller', $appendSuffix = false)
+ {
+ return app()->action($url, $vars, $layer, $appendSuffix);
+ }
+}
+
+if (!function_exists('app')) {
+ /**
+ * 快速获取容器中的实例 支持依赖注入
+ * @param string $name 类名或标识 默认获取当前应用实例
+ * @param array $args 参数
+ * @param bool $newInstance 是否每次创建新的实例
+ * @return mixed|\think\App
+ */
+ function app($name = 'think\App', $args = [], $newInstance = false)
+ {
+ return Container::get($name, $args, $newInstance);
+ }
+}
+
+if (!function_exists('behavior')) {
+ /**
+ * 执行某个行为(run方法) 支持依赖注入
+ * @param mixed $behavior 行为类名或者别名
+ * @param mixed $args 参数
+ * @return mixed
+ */
+ function behavior($behavior, $args = null)
+ {
+ return Hook::exec($behavior, $args);
+ }
+}
+
+if (!function_exists('bind')) {
+ /**
+ * 绑定一个类到容器
+ * @access public
+ * @param string $abstract 类标识、接口
+ * @param mixed $concrete 要绑定的类、闭包或者实例
+ * @return Container
+ */
+ function bind($abstract, $concrete = null)
+ {
+ return Container::getInstance()->bindTo($abstract, $concrete);
+ }
+}
+
+if (!function_exists('cache')) {
+ /**
+ * 缓存管理
+ * @param mixed $name 缓存名称,如果为数组表示进行缓存设置
+ * @param mixed $value 缓存值
+ * @param mixed $options 缓存参数
+ * @param string $tag 缓存标签
+ * @return mixed
+ */
+ function cache($name, $value = '', $options = null, $tag = null)
+ {
+ if (is_array($options)) {
+ // 缓存操作的同时初始化
+ Cache::connect($options);
+ } elseif (is_array($name)) {
+ // 缓存初始化
+ return Cache::connect($name);
+ }
+
+ if ('' === $value) {
+ // 获取缓存
+ return 0 === strpos($name, '?') ? Cache::has(substr($name, 1)) : Cache::get($name);
+ } elseif (is_null($value)) {
+ // 删除缓存
+ return Cache::rm($name);
+ }
+
+ // 缓存数据
+ if (is_array($options)) {
+ $expire = isset($options['expire']) ? $options['expire'] : null; //修复查询缓存无法设置过期时间
+ } else {
+ $expire = is_numeric($options) ? $options : null; //默认快捷缓存设置过期时间
+ }
+
+ if (is_null($tag)) {
+ return Cache::set($name, $value, $expire);
+ } else {
+ return Cache::tag($tag)->set($name, $value, $expire);
+ }
+ }
+}
+
+if (!function_exists('call')) {
+ /**
+ * 调用反射执行callable 支持依赖注入
+ * @param mixed $callable 支持闭包等callable写法
+ * @param array $args 参数
+ * @return mixed
+ */
+ function call($callable, $args = [])
+ {
+ return Container::getInstance()->invoke($callable, $args);
+ }
+}
+
+if (!function_exists('class_basename')) {
+ /**
+ * 获取类名(不包含命名空间)
+ *
+ * @param string|object $class
+ * @return string
+ */
+ function class_basename($class)
+ {
+ $class = is_object($class) ? get_class($class) : $class;
+ return basename(str_replace('\\', '/', $class));
+ }
+}
+
+if (!function_exists('class_uses_recursive')) {
+ /**
+ *获取一个类里所有用到的trait,包括父类的
+ *
+ * @param $class
+ * @return array
+ */
+ function class_uses_recursive($class)
+ {
+ if (is_object($class)) {
+ $class = get_class($class);
+ }
+
+ $results = [];
+ $classes = array_merge([$class => $class], class_parents($class));
+ foreach ($classes as $class) {
+ $results += trait_uses_recursive($class);
+ }
+
+ return array_unique($results);
+ }
+}
+
+if (!function_exists('config')) {
+ /**
+ * 获取和设置配置参数
+ * @param string|array $name 参数名
+ * @param mixed $value 参数值
+ * @return mixed
+ */
+ function config($name = '', $value = null)
+ {
+ if (is_null($value) && is_string($name)) {
+ if ('.' == substr($name, -1)) {
+ return Config::pull(substr($name, 0, -1));
+ }
+
+ return 0 === strpos($name, '?') ? Config::has(substr($name, 1)) : Config::get($name);
+ } else {
+ return Config::set($name, $value);
+ }
+ }
+}
+
+if (!function_exists('container')) {
+ /**
+ * 获取容器对象实例
+ * @return Container
+ */
+ function container()
+ {
+ return Container::getInstance();
+ }
+}
+
+if (!function_exists('controller')) {
+ /**
+ * 实例化控制器 格式:[模块/]控制器
+ * @param string $name 资源地址
+ * @param string $layer 控制层名称
+ * @param bool $appendSuffix 是否添加类名后缀
+ * @return \think\Controller
+ */
+ function controller($name, $layer = 'controller', $appendSuffix = false)
+ {
+ return app()->controller($name, $layer, $appendSuffix);
+ }
+}
+
+if (!function_exists('cookie')) {
+ /**
+ * Cookie管理
+ * @param string|array $name cookie名称,如果为数组表示进行cookie设置
+ * @param mixed $value cookie值
+ * @param mixed $option 参数
+ * @return mixed
+ */
+ function cookie($name, $value = '', $option = null)
+ {
+ if (is_array($name)) {
+ // 初始化
+ Cookie::init($name);
+ } elseif (is_null($name)) {
+ // 清除
+ Cookie::clear($value);
+ } elseif ('' === $value) {
+ // 获取
+ return 0 === strpos($name, '?') ? Cookie::has(substr($name, 1), $option) : Cookie::get($name);
+ } elseif (is_null($value)) {
+ // 删除
+ return Cookie::delete($name);
+ } else {
+ // 设置
+ return Cookie::set($name, $value, $option);
+ }
+ }
+}
+
+if (!function_exists('db')) {
+ /**
+ * 实例化数据库类
+ * @param string $name 操作的数据表名称(不含前缀)
+ * @param array|string $config 数据库配置参数
+ * @param bool $force 是否强制重新连接
+ * @return \think\db\Query
+ */
+ function db($name = '', $config = [], $force = true)
+ {
+ return Db::connect($config, $force)->name($name);
+ }
+}
+
+if (!function_exists('debug')) {
+ /**
+ * 记录时间(微秒)和内存使用情况
+ * @param string $start 开始标签
+ * @param string $end 结束标签
+ * @param integer|string $dec 小数位 如果是m 表示统计内存占用
+ * @return mixed
+ */
+ function debug($start, $end = '', $dec = 6)
+ {
+ if ('' == $end) {
+ Debug::remark($start);
+ } else {
+ return 'm' == $dec ? Debug::getRangeMem($start, $end) : Debug::getRangeTime($start, $end, $dec);
+ }
+ }
+}
+
+if (!function_exists('download')) {
+ /**
+ * 获取\think\response\Download对象实例
+ * @param string $filename 要下载的文件
+ * @param string $name 显示文件名
+ * @param bool $content 是否为内容
+ * @param integer $expire 有效期(秒)
+ * @return \think\response\Download
+ */
+ function download($filename, $name = '', $content = false, $expire = 360, $openinBrowser = false)
+ {
+ return Response::create($filename, 'download')->name($name)->isContent($content)->expire($expire)->openinBrowser($openinBrowser);
+ }
+}
+
+if (!function_exists('dump')) {
+ /**
+ * 浏览器友好的变量输出
+ * @param mixed $var 变量
+ * @param boolean $echo 是否输出 默认为true 如果为false 则返回输出字符串
+ * @param string $label 标签 默认为空
+ * @return void|string
+ */
+ function dump($var, $echo = true, $label = null)
+ {
+ return Debug::dump($var, $echo, $label);
+ }
+}
+
+if (!function_exists('env')) {
+ /**
+ * 获取环境变量值
+ * @access public
+ * @param string $name 环境变量名(支持二级 .号分割)
+ * @param string $default 默认值
+ * @return mixed
+ */
+ function env($name = null, $default = null)
+ {
+ return Env::get($name, $default);
+ }
+}
+
+if (!function_exists('exception')) {
+ /**
+ * 抛出异常处理
+ *
+ * @param string $msg 异常消息
+ * @param integer $code 异常代码 默认为0
+ * @param string $exception 异常类
+ *
+ * @throws Exception
+ */
+ function exception($msg, $code = 0, $exception = '')
+ {
+ $e = $exception ?: '\think\Exception';
+ throw new $e($msg, $code);
+ }
+}
+
+if (!function_exists('halt')) {
+ /**
+ * 调试变量并且中断输出
+ * @param mixed $var 调试变量或者信息
+ */
+ function halt($var)
+ {
+ dump($var);
+
+ throw new HttpResponseException(new Response);
+ }
+}
+
+if (!function_exists('input')) {
+ /**
+ * 获取输入数据 支持默认值和过滤
+ * @param string $key 获取的变量名
+ * @param mixed $default 默认值
+ * @param string $filter 过滤方法
+ * @return mixed
+ */
+ function input($key = '', $default = null, $filter = '')
+ {
+ if (0 === strpos($key, '?')) {
+ $key = substr($key, 1);
+ $has = true;
+ }
+
+ if ($pos = strpos($key, '.')) {
+ // 指定参数来源
+ $method = substr($key, 0, $pos);
+ if (in_array($method, ['get', 'post', 'put', 'patch', 'delete', 'route', 'param', 'request', 'session', 'cookie', 'server', 'env', 'path', 'file'])) {
+ $key = substr($key, $pos + 1);
+ } else {
+ $method = 'param';
+ }
+ } else {
+ // 默认为自动判断
+ $method = 'param';
+ }
+
+ if (isset($has)) {
+ return request()->has($key, $method, $default);
+ } else {
+ return request()->$method($key, $default, $filter);
+ }
+ }
+}
+
+if (!function_exists('json')) {
+ /**
+ * 获取\think\response\Json对象实例
+ * @param mixed $data 返回的数据
+ * @param integer $code 状态码
+ * @param array $header 头部
+ * @param array $options 参数
+ * @return \think\response\Json
+ */
+ function json($data = [], $code = 200, $header = [], $options = [])
+ {
+ return Response::create($data, 'json', $code, $header, $options);
+ }
+}
+
+if (!function_exists('jsonp')) {
+ /**
+ * 获取\think\response\Jsonp对象实例
+ * @param mixed $data 返回的数据
+ * @param integer $code 状态码
+ * @param array $header 头部
+ * @param array $options 参数
+ * @return \think\response\Jsonp
+ */
+ function jsonp($data = [], $code = 200, $header = [], $options = [])
+ {
+ return Response::create($data, 'jsonp', $code, $header, $options);
+ }
+}
+
+if (!function_exists('lang')) {
+ /**
+ * 获取语言变量值
+ * @param string $name 语言变量名
+ * @param array $vars 动态变量值
+ * @param string $lang 语言
+ * @return mixed
+ */
+ function lang($name, $vars = [], $lang = '')
+ {
+ return Lang::get($name, $vars, $lang);
+ }
+}
+
+if (!function_exists('model')) {
+ /**
+ * 实例化Model
+ * @param string $name Model名称
+ * @param string $layer 业务层名称
+ * @param bool $appendSuffix 是否添加类名后缀
+ * @return \think\Model
+ */
+ function model($name = '', $layer = 'model', $appendSuffix = false)
+ {
+ return app()->model($name, $layer, $appendSuffix);
+ }
+}
+
+if (!function_exists('parse_name')) {
+ /**
+ * 字符串命名风格转换
+ * type 0 将Java风格转换为C的风格 1 将C风格转换为Java的风格
+ * @param string $name 字符串
+ * @param integer $type 转换类型
+ * @param bool $ucfirst 首字母是否大写(驼峰规则)
+ * @return string
+ */
+ function parse_name($name, $type = 0, $ucfirst = true)
+ {
+ if ($type) {
+ $name = preg_replace_callback('/_([a-zA-Z])/', function ($match) {
+ return strtoupper($match[1]);
+ }, $name);
+
+ return $ucfirst ? ucfirst($name) : lcfirst($name);
+ } else {
+ return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name), "_"));
+ }
+ }
+}
+
+if (!function_exists('redirect')) {
+ /**
+ * 获取\think\response\Redirect对象实例
+ * @param mixed $url 重定向地址 支持Url::build方法的地址
+ * @param array|integer $params 额外参数
+ * @param integer $code 状态码
+ * @return \think\response\Redirect
+ */
+ function redirect($url = [], $params = [], $code = 302)
+ {
+ if (is_integer($params)) {
+ $code = $params;
+ $params = [];
+ }
+
+ return Response::create($url, 'redirect', $code)->params($params);
+ }
+}
+
+if (!function_exists('request')) {
+ /**
+ * 获取当前Request对象实例
+ * @return Request
+ */
+ function request()
+ {
+ return app('request');
+ }
+}
+
+if (!function_exists('response')) {
+ /**
+ * 创建普通 Response 对象实例
+ * @param mixed $data 输出数据
+ * @param int|string $code 状态码
+ * @param array $header 头信息
+ * @param string $type
+ * @return Response
+ */
+ function response($data = '', $code = 200, $header = [], $type = 'html')
+ {
+ return Response::create($data, $type, $code, $header);
+ }
+}
+
+if (!function_exists('route')) {
+ /**
+ * 路由注册
+ * @param string $rule 路由规则
+ * @param mixed $route 路由地址
+ * @param array $option 路由参数
+ * @param array $pattern 变量规则
+ * @return RuleItem
+ */
+ function route($rule, $route, $option = [], $pattern = [])
+ {
+ return Route::rule($rule, $route, '*', $option, $pattern);
+ }
+}
+
+if (!function_exists('session')) {
+ /**
+ * Session管理
+ * @param string|array $name session名称,如果为数组表示进行session设置
+ * @param mixed $value session值
+ * @param string $prefix 前缀
+ * @return mixed
+ */
+ function session($name, $value = '', $prefix = null)
+ {
+ if (is_array($name)) {
+ // 初始化
+ Session::init($name);
+ } elseif (is_null($name)) {
+ // 清除
+ Session::clear($value);
+ } elseif ('' === $value) {
+ // 判断或获取
+ return 0 === strpos($name, '?') ? Session::has(substr($name, 1), $prefix) : Session::get($name, $prefix);
+ } elseif (is_null($value)) {
+ // 删除
+ return Session::delete($name, $prefix);
+ } else {
+ // 设置
+ return Session::set($name, $value, $prefix);
+ }
+ }
+}
+
+if (!function_exists('token')) {
+ /**
+ * 生成表单令牌
+ * @param string $name 令牌名称
+ * @param mixed $type 令牌生成方法
+ * @return string
+ */
+ function token($name = '__token__', $type = 'md5')
+ {
+ $token = Request::token($name, $type);
+
+ return '';
+ }
+}
+
+if (!function_exists('trace')) {
+ /**
+ * 记录日志信息
+ * @param mixed $log log信息 支持字符串和数组
+ * @param string $level 日志级别
+ * @return array|void
+ */
+ function trace($log = '[think]', $level = 'log')
+ {
+ if ('[think]' === $log) {
+ return Log::getLog();
+ } else {
+ Log::record($log, $level);
+ }
+ }
+}
+
+if (!function_exists('trait_uses_recursive')) {
+ /**
+ * 获取一个trait里所有引用到的trait
+ *
+ * @param string $trait
+ * @return array
+ */
+ function trait_uses_recursive($trait)
+ {
+ $traits = class_uses($trait);
+ foreach ($traits as $trait) {
+ $traits += trait_uses_recursive($trait);
+ }
+
+ return $traits;
+ }
+}
+
+if (!function_exists('url')) {
+ /**
+ * Url生成
+ * @param string $url 路由地址
+ * @param string|array $vars 变量
+ * @param bool|string $suffix 生成的URL后缀
+ * @param bool|string $domain 域名
+ * @return string
+ */
+ function url($url = '', $vars = '', $suffix = true, $domain = false)
+ {
+ return Url::build($url, $vars, $suffix, $domain);
+ }
+}
+
+if (!function_exists('validate')) {
+ /**
+ * 实例化验证器
+ * @param string $name 验证器名称
+ * @param string $layer 业务层名称
+ * @param bool $appendSuffix 是否添加类名后缀
+ * @return \think\Validate
+ */
+ function validate($name = '', $layer = 'validate', $appendSuffix = false)
+ {
+ return app()->validate($name, $layer, $appendSuffix);
+ }
+}
+
+if (!function_exists('view')) {
+ /**
+ * 渲染模板输出
+ * @param string $template 模板文件
+ * @param array $vars 模板变量
+ * @param integer $code 状态码
+ * @param callable $filter 内容过滤
+ * @return \think\response\View
+ */
+ function view($template = '', $vars = [], $code = 200, $filter = null)
+ {
+ return Response::create($template, 'view', $code)->assign($vars)->filter($filter);
+ }
+}
+
+if (!function_exists('widget')) {
+ /**
+ * 渲染输出Widget
+ * @param string $name Widget名称
+ * @param array $data 传入的参数
+ * @return mixed
+ */
+ function widget($name, $data = [])
+ {
+ $result = app()->action($name, $data, 'widget');
+
+ if (is_object($result)) {
+ $result = $result->getContent();
+ }
+
+ return $result;
+ }
+}
+
+if (!function_exists('xml')) {
+ /**
+ * 获取\think\response\Xml对象实例
+ * @param mixed $data 返回的数据
+ * @param integer $code 状态码
+ * @param array $header 头部
+ * @param array $options 参数
+ * @return \think\response\Xml
+ */
+ function xml($data = [], $code = 200, $header = [], $options = [])
+ {
+ return Response::create($data, 'xml', $code, $header, $options);
+ }
+}
+
+if (!function_exists('yaconf')) {
+ /**
+ * 获取yaconf配置
+ *
+ * @param string $name 配置参数名
+ * @param mixed $default 默认值
+ * @return mixed
+ */
+ function yaconf($name, $default = null)
+ {
+ return Config::yaconf($name, $default);
+ }
+}
diff --git a/thinkphp/lang/zh-cn.php b/thinkphp/lang/zh-cn.php
new file mode 100644
index 0000000..1e05082
--- /dev/null
+++ b/thinkphp/lang/zh-cn.php
@@ -0,0 +1,144 @@
+
+// +----------------------------------------------------------------------
+
+// 核心中文语言包
+return [
+ // 系统错误提示
+ 'Undefined variable' => '未定义变量',
+ 'Undefined index' => '未定义数组索引',
+ 'Undefined offset' => '未定义数组下标',
+ 'Parse error' => '语法解析错误',
+ 'Type error' => '类型错误',
+ 'Fatal error' => '致命错误',
+ 'syntax error' => '语法错误',
+
+ // 框架核心错误提示
+ 'dispatch type not support' => '不支持的调度类型',
+ 'method param miss' => '方法参数错误',
+ 'method not exists' => '方法不存在',
+ 'function not exists' => '函数不存在',
+ 'file not exists' => '文件不存在',
+ 'module not exists' => '模块不存在',
+ 'controller not exists' => '控制器不存在',
+ 'class not exists' => '类不存在',
+ 'property not exists' => '类的属性不存在',
+ 'template not exists' => '模板文件不存在',
+ 'illegal controller name' => '非法的控制器名称',
+ 'illegal action name' => '非法的操作名称',
+ 'url suffix deny' => '禁止的URL后缀访问',
+ 'Route Not Found' => '当前访问路由未定义或不匹配',
+ 'Undefined db type' => '未定义数据库类型',
+ 'variable type error' => '变量类型错误',
+ 'PSR-4 error' => 'PSR-4 规范错误',
+ 'not support total' => '简洁模式下不能获取数据总数',
+ 'not support last' => '简洁模式下不能获取最后一页',
+ 'error session handler' => '错误的SESSION处理器类',
+ 'not allow php tag' => '模板不允许使用PHP语法',
+ 'not support' => '不支持',
+ 'redisd master' => 'Redisd 主服务器错误',
+ 'redisd slave' => 'Redisd 从服务器错误',
+ 'must run at sae' => '必须在SAE运行',
+ 'memcache init error' => '未开通Memcache服务,请在SAE管理平台初始化Memcache服务',
+ 'KVDB init error' => '没有初始化KVDB,请在SAE管理平台初始化KVDB服务',
+ 'fields not exists' => '数据表字段不存在',
+ 'where express error' => '查询表达式错误',
+ 'order express error' => '排序表达式错误',
+ 'no data to update' => '没有任何数据需要更新',
+ 'miss data to insert' => '缺少需要写入的数据',
+ 'not support data' => '不支持的数据表达式',
+ 'miss complex primary data' => '缺少复合主键数据',
+ 'miss update condition' => '缺少更新条件',
+ 'model data Not Found' => '模型数据不存在',
+ 'table data not Found' => '表数据不存在',
+ 'delete without condition' => '没有条件不会执行删除操作',
+ 'miss relation data' => '缺少关联表数据',
+ 'tag attr must' => '模板标签属性必须',
+ 'tag error' => '模板标签错误',
+ 'cache write error' => '缓存写入失败',
+ 'sae mc write error' => 'SAE mc 写入错误',
+ 'route name not exists' => '路由标识不存在(或参数不够)',
+ 'invalid request' => '非法请求',
+ 'bind attr has exists' => '模型的属性已经存在',
+ 'relation data not exists' => '关联数据不存在',
+ 'relation not support' => '关联不支持',
+ 'chunk not support order' => 'Chunk不支持调用order方法',
+ 'route pattern error' => '路由变量规则定义错误',
+ 'route behavior will not support' => '路由行为废弃(使用中间件替代)',
+ 'closure not support cache(true)' => '使用闭包查询不支持cache(true),请指定缓存Key',
+
+ // 上传错误信息
+ 'unknown upload error' => '未知上传错误!',
+ 'file write error' => '文件写入失败!',
+ 'upload temp dir not found' => '找不到临时文件夹!',
+ 'no file to uploaded' => '没有文件被上传!',
+ 'only the portion of file is uploaded' => '文件只有部分被上传!',
+ 'upload File size exceeds the maximum value' => '上传文件大小超过了最大值!',
+ 'upload write error' => '文件上传保存错误!',
+ 'has the same filename: {:filename}' => '存在同名文件:{:filename}',
+ 'upload illegal files' => '非法上传文件',
+ 'illegal image files' => '非法图片文件',
+ 'extensions to upload is not allowed' => '上传文件后缀不允许',
+ 'mimetype to upload is not allowed' => '上传文件MIME类型不允许!',
+ 'filesize not match' => '上传文件大小不符!',
+ 'directory {:path} creation failed' => '目录 {:path} 创建失败!',
+
+ 'The middleware must return Response instance' => '中间件方法必须返回Response对象实例',
+ 'The queue was exhausted, with no response returned' => '中间件队列为空',
+ // Validate Error Message
+ ':attribute require' => ':attribute不能为空',
+ ':attribute must' => ':attribute必须',
+ ':attribute must be numeric' => ':attribute必须是数字',
+ ':attribute must be integer' => ':attribute必须是整数',
+ ':attribute must be float' => ':attribute必须是浮点数',
+ ':attribute must be bool' => ':attribute必须是布尔值',
+ ':attribute not a valid email address' => ':attribute格式不符',
+ ':attribute not a valid mobile' => ':attribute格式不符',
+ ':attribute must be a array' => ':attribute必须是数组',
+ ':attribute must be yes,on or 1' => ':attribute必须是yes、on或者1',
+ ':attribute not a valid datetime' => ':attribute不是一个有效的日期或时间格式',
+ ':attribute not a valid file' => ':attribute不是有效的上传文件',
+ ':attribute not a valid image' => ':attribute不是有效的图像文件',
+ ':attribute must be alpha' => ':attribute只能是字母',
+ ':attribute must be alpha-numeric' => ':attribute只能是字母和数字',
+ ':attribute must be alpha-numeric, dash, underscore' => ':attribute只能是字母、数字和下划线_及破折号-',
+ ':attribute not a valid domain or ip' => ':attribute不是有效的域名或者IP',
+ ':attribute must be chinese' => ':attribute只能是汉字',
+ ':attribute must be chinese or alpha' => ':attribute只能是汉字、字母',
+ ':attribute must be chinese,alpha-numeric' => ':attribute只能是汉字、字母和数字',
+ ':attribute must be chinese,alpha-numeric,underscore, dash' => ':attribute只能是汉字、字母、数字和下划线_及破折号-',
+ ':attribute not a valid url' => ':attribute不是有效的URL地址',
+ ':attribute not a valid ip' => ':attribute不是有效的IP地址',
+ ':attribute must be dateFormat of :rule' => ':attribute必须使用日期格式 :rule',
+ ':attribute must be in :rule' => ':attribute必须在 :rule 范围内',
+ ':attribute be notin :rule' => ':attribute不能在 :rule 范围内',
+ ':attribute must between :1 - :2' => ':attribute只能在 :1 - :2 之间',
+ ':attribute not between :1 - :2' => ':attribute不能在 :1 - :2 之间',
+ 'size of :attribute must be :rule' => ':attribute长度不符合要求 :rule',
+ 'max size of :attribute must be :rule' => ':attribute长度不能超过 :rule',
+ 'min size of :attribute must be :rule' => ':attribute长度不能小于 :rule',
+ ':attribute cannot be less than :rule' => ':attribute日期不能小于 :rule',
+ ':attribute cannot exceed :rule' => ':attribute日期不能超过 :rule',
+ ':attribute not within :rule' => '不在有效期内 :rule',
+ 'access IP is not allowed' => '不允许的IP访问',
+ 'access IP denied' => '禁止的IP访问',
+ ':attribute out of accord with :2' => ':attribute和确认字段:2不一致',
+ ':attribute cannot be same with :2' => ':attribute和比较字段:2不能相同',
+ ':attribute must greater than or equal :rule' => ':attribute必须大于等于 :rule',
+ ':attribute must greater than :rule' => ':attribute必须大于 :rule',
+ ':attribute must less than or equal :rule' => ':attribute必须小于等于 :rule',
+ ':attribute must less than :rule' => ':attribute必须小于 :rule',
+ ':attribute must equal :rule' => ':attribute必须等于 :rule',
+ ':attribute has exists' => ':attribute已存在',
+ ':attribute not conform to the rules' => ':attribute不符合指定规则',
+ 'invalid Request method' => '无效的请求类型',
+ 'invalid token' => '令牌数据无效',
+ 'not conform to the rules' => '规则错误',
+];
diff --git a/thinkphp/library/think/App.php b/thinkphp/library/think/App.php
new file mode 100644
index 0000000..35924a5
--- /dev/null
+++ b/thinkphp/library/think/App.php
@@ -0,0 +1,979 @@
+
+// +----------------------------------------------------------------------
+
+namespace think;
+
+use think\exception\ClassNotFoundException;
+use think\exception\HttpResponseException;
+use think\route\Dispatch;
+
+/**
+ * App 应用管理
+ */
+class App extends Container
+{
+ const VERSION = '5.1.41 LTS';
+
+ /**
+ * 当前模块路径
+ * @var string
+ */
+ protected $modulePath;
+
+ /**
+ * 应用调试模式
+ * @var bool
+ */
+ protected $appDebug = true;
+
+ /**
+ * 应用开始时间
+ * @var float
+ */
+ protected $beginTime;
+
+ /**
+ * 应用内存初始占用
+ * @var integer
+ */
+ protected $beginMem;
+
+ /**
+ * 应用类库命名空间
+ * @var string
+ */
+ protected $namespace = 'app';
+
+ /**
+ * 应用类库后缀
+ * @var bool
+ */
+ protected $suffix = false;
+
+ /**
+ * 严格路由检测
+ * @var bool
+ */
+ protected $routeMust;
+
+ /**
+ * 应用类库目录
+ * @var string
+ */
+ protected $appPath;
+
+ /**
+ * 框架目录
+ * @var string
+ */
+ protected $thinkPath;
+
+ /**
+ * 应用根目录
+ * @var string
+ */
+ protected $rootPath;
+
+ /**
+ * 运行时目录
+ * @var string
+ */
+ protected $runtimePath;
+
+ /**
+ * 配置目录
+ * @var string
+ */
+ protected $configPath;
+
+ /**
+ * 路由目录
+ * @var string
+ */
+ protected $routePath;
+
+ /**
+ * 配置后缀
+ * @var string
+ */
+ protected $configExt;
+
+ /**
+ * 应用调度实例
+ * @var Dispatch
+ */
+ protected $dispatch;
+
+ /**
+ * 绑定模块(控制器)
+ * @var string
+ */
+ protected $bindModule;
+
+ /**
+ * 初始化
+ * @var bool
+ */
+ protected $initialized = false;
+
+ public function __construct($appPath = '')
+ {
+ $this->thinkPath = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR;
+ $this->path($appPath);
+ }
+
+ /**
+ * 绑定模块或者控制器
+ * @access public
+ * @param string $bind
+ * @return $this
+ */
+ public function bind($bind)
+ {
+ $this->bindModule = $bind;
+ return $this;
+ }
+
+ /**
+ * 设置应用类库目录
+ * @access public
+ * @param string $path 路径
+ * @return $this
+ */
+ public function path($path)
+ {
+ $this->appPath = $path ? realpath($path) . DIRECTORY_SEPARATOR : $this->getAppPath();
+
+ return $this;
+ }
+
+ /**
+ * 初始化应用
+ * @access public
+ * @return void
+ */
+ public function initialize()
+ {
+ if ($this->initialized) {
+ return;
+ }
+
+ $this->initialized = true;
+ $this->beginTime = microtime(true);
+ $this->beginMem = memory_get_usage();
+
+ $this->rootPath = dirname($this->appPath) . DIRECTORY_SEPARATOR;
+ $this->runtimePath = $this->rootPath . 'runtime' . DIRECTORY_SEPARATOR;
+ $this->routePath = $this->rootPath . 'route' . DIRECTORY_SEPARATOR;
+ $this->configPath = $this->rootPath . 'config' . DIRECTORY_SEPARATOR;
+
+ static::setInstance($this);
+
+ $this->instance('app', $this);
+
+ // 加载环境变量配置文件
+ if (is_file($this->rootPath . '.env')) {
+ $this->env->load($this->rootPath . '.env');
+ }
+
+ $this->configExt = $this->env->get('config_ext', '.php');
+
+ // 加载惯例配置文件
+ $this->config->set(include $this->thinkPath . 'convention.php');
+
+ // 设置路径环境变量
+ $this->env->set([
+ 'think_path' => $this->thinkPath,
+ 'root_path' => $this->rootPath,
+ 'app_path' => $this->appPath,
+ 'config_path' => $this->configPath,
+ 'route_path' => $this->routePath,
+ 'runtime_path' => $this->runtimePath,
+ 'extend_path' => $this->rootPath . 'extend' . DIRECTORY_SEPARATOR,
+ 'vendor_path' => $this->rootPath . 'vendor' . DIRECTORY_SEPARATOR,
+ ]);
+
+ $this->namespace = $this->env->get('app_namespace', $this->namespace);
+ $this->env->set('app_namespace', $this->namespace);
+
+ // 注册应用命名空间
+ Loader::addNamespace($this->namespace, $this->appPath);
+
+ // 初始化应用
+ $this->init();
+
+ // 开启类名后缀
+ $this->suffix = $this->config('app.class_suffix');
+
+ // 应用调试模式
+ $this->appDebug = $this->env->get('app_debug', $this->config('app.app_debug'));
+ $this->env->set('app_debug', $this->appDebug);
+
+ if (!$this->appDebug) {
+ ini_set('display_errors', 'Off');
+ } elseif (PHP_SAPI != 'cli') {
+ //重新申请一块比较大的buffer
+ if (ob_get_level() > 0) {
+ $output = ob_get_clean();
+ }
+ ob_start();
+ if (!empty($output)) {
+ echo $output;
+ }
+ }
+
+ // 注册异常处理类
+ if ($this->config('app.exception_handle')) {
+ Error::setExceptionHandler($this->config('app.exception_handle'));
+ }
+
+ // 注册根命名空间
+ if (!empty($this->config('app.root_namespace'))) {
+ Loader::addNamespace($this->config('app.root_namespace'));
+ }
+
+ // 加载composer autofile文件
+ Loader::loadComposerAutoloadFiles();
+
+ // 注册类库别名
+ Loader::addClassAlias($this->config->pull('alias'));
+
+ // 数据库配置初始化
+ Db::init($this->config->pull('database'));
+
+ // 设置系统时区
+ date_default_timezone_set($this->config('app.default_timezone'));
+
+ // 读取语言包
+ $this->loadLangPack();
+
+ // 路由初始化
+ $this->routeInit();
+ }
+
+ /**
+ * 初始化应用或模块
+ * @access public
+ * @param string $module 模块名
+ * @return void
+ */
+ public function init($module = '')
+ {
+ // 定位模块目录
+ $module = $module ? $module . DIRECTORY_SEPARATOR : '';
+ $path = $this->appPath . $module;
+
+ // 加载初始化文件
+ if (is_file($path . 'init.php')) {
+ include $path . 'init.php';
+ } elseif (is_file($this->runtimePath . $module . 'init.php')) {
+ include $this->runtimePath . $module . 'init.php';
+ } else {
+ // 加载行为扩展文件
+ if (is_file($path . 'tags.php')) {
+ $tags = include $path . 'tags.php';
+ if (is_array($tags)) {
+ $this->hook->import($tags);
+ }
+ }
+
+ // 加载公共文件
+ if (is_file($path . 'common.php')) {
+ include_once $path . 'common.php';
+ }
+
+ if ('' == $module) {
+ // 加载系统助手函数
+ include $this->thinkPath . 'helper.php';
+ }
+
+ // 加载中间件
+ if (is_file($path . 'middleware.php')) {
+ $middleware = include $path . 'middleware.php';
+ if (is_array($middleware)) {
+ $this->middleware->import($middleware);
+ }
+ }
+
+ // 注册服务的容器对象实例
+ if (is_file($path . 'provider.php')) {
+ $provider = include $path . 'provider.php';
+ if (is_array($provider)) {
+ $this->bindTo($provider);
+ }
+ }
+
+ // 自动读取配置文件
+ if (is_dir($path . 'config')) {
+ $dir = $path . 'config' . DIRECTORY_SEPARATOR;
+ } elseif (is_dir($this->configPath . $module)) {
+ $dir = $this->configPath . $module;
+ }
+
+ $files = isset($dir) ? scandir($dir) : [];
+
+ foreach ($files as $file) {
+ if ('.' . pathinfo($file, PATHINFO_EXTENSION) === $this->configExt) {
+ $this->config->load($dir . $file, pathinfo($file, PATHINFO_FILENAME));
+ }
+ }
+ }
+
+ $this->setModulePath($path);
+
+ if ($module) {
+ // 对容器中的对象实例进行配置更新
+ $this->containerConfigUpdate($module);
+ }
+ }
+
+ protected function containerConfigUpdate($module)
+ {
+ $config = $this->config->get();
+
+ // 注册异常处理类
+ if ($config['app']['exception_handle']) {
+ Error::setExceptionHandler($config['app']['exception_handle']);
+ }
+
+ Db::init($config['database']);
+ $this->middleware->setConfig($config['middleware']);
+ $this->route->setConfig($config['app']);
+ $this->request->init($config['app']);
+ $this->cookie->init($config['cookie']);
+ $this->view->init($config['template']);
+ $this->log->init($config['log']);
+ $this->session->setConfig($config['session']);
+ $this->debug->setConfig($config['trace']);
+ $this->cache->init($config['cache'], true);
+
+ // 加载当前模块语言包
+ $this->lang->load($this->appPath . $module . DIRECTORY_SEPARATOR . 'lang' . DIRECTORY_SEPARATOR . $this->request->langset() . '.php');
+
+ // 模块请求缓存检查
+ $this->checkRequestCache(
+ $config['app']['request_cache'],
+ $config['app']['request_cache_expire'],
+ $config['app']['request_cache_except']
+ );
+ }
+
+ /**
+ * 执行应用程序
+ * @access public
+ * @return Response
+ * @throws Exception
+ */
+ public function run()
+ {
+ try {
+ // 初始化应用
+ $this->initialize();
+
+ // 监听app_init
+ $this->hook->listen('app_init');
+
+ if ($this->bindModule) {
+ // 模块/控制器绑定
+ $this->route->bind($this->bindModule);
+ } elseif ($this->config('app.auto_bind_module')) {
+ // 入口自动绑定
+ $name = pathinfo($this->request->baseFile(), PATHINFO_FILENAME);
+ if ($name && 'index' != $name && is_dir($this->appPath . $name)) {
+ $this->route->bind($name);
+ }
+ }
+
+ // 监听app_dispatch
+ $this->hook->listen('app_dispatch');
+
+ $dispatch = $this->dispatch;
+
+ if (empty($dispatch)) {
+ // 路由检测
+ $dispatch = $this->routeCheck()->init();
+ }
+
+ // 记录当前调度信息
+ $this->request->dispatch($dispatch);
+
+ // 记录路由和请求信息
+ if ($this->appDebug) {
+ $this->log('[ ROUTE ] ' . var_export($this->request->routeInfo(), true));
+ $this->log('[ HEADER ] ' . var_export($this->request->header(), true));
+ $this->log('[ PARAM ] ' . var_export($this->request->param(), true));
+ }
+
+ // 监听app_begin
+ $this->hook->listen('app_begin');
+
+ // 请求缓存检查
+ $this->checkRequestCache(
+ $this->config('request_cache'),
+ $this->config('request_cache_expire'),
+ $this->config('request_cache_except')
+ );
+
+ $data = null;
+ } catch (HttpResponseException $exception) {
+ $dispatch = null;
+ $data = $exception->getResponse();
+ }
+
+ $this->middleware->add(function (Request $request, $next) use ($dispatch, $data) {
+ return is_null($data) ? $dispatch->run() : $data;
+ });
+
+ $response = $this->middleware->dispatch($this->request);
+
+ // 监听app_end
+ $this->hook->listen('app_end', $response);
+
+ return $response;
+ }
+
+ protected function getRouteCacheKey()
+ {
+ if ($this->config->get('route_check_cache_key')) {
+ $closure = $this->config->get('route_check_cache_key');
+ $routeKey = $closure($this->request);
+ } else {
+ $routeKey = md5($this->request->baseUrl(true) . ':' . $this->request->method());
+ }
+
+ return $routeKey;
+ }
+
+ protected function loadLangPack()
+ {
+ // 读取默认语言
+ $this->lang->range($this->config('app.default_lang'));
+
+ if ($this->config('app.lang_switch_on')) {
+ // 开启多语言机制 检测当前语言
+ $this->lang->detect();
+ }
+
+ $this->request->setLangset($this->lang->range());
+
+ // 加载系统语言包
+ $this->lang->load([
+ $this->thinkPath . 'lang' . DIRECTORY_SEPARATOR . $this->request->langset() . '.php',
+ $this->appPath . 'lang' . DIRECTORY_SEPARATOR . $this->request->langset() . '.php',
+ ]);
+ }
+
+ /**
+ * 设置当前地址的请求缓存
+ * @access public
+ * @param string $key 缓存标识,支持变量规则 ,例如 item/:name/:id
+ * @param mixed $expire 缓存有效期
+ * @param array $except 缓存排除
+ * @param string $tag 缓存标签
+ * @return void
+ */
+ public function checkRequestCache($key, $expire = null, $except = [], $tag = null)
+ {
+ $cache = $this->request->cache($key, $expire, $except, $tag);
+
+ if ($cache) {
+ $this->setResponseCache($cache);
+ }
+ }
+
+ public function setResponseCache($cache)
+ {
+ list($key, $expire, $tag) = $cache;
+
+ if (strtotime($this->request->server('HTTP_IF_MODIFIED_SINCE')) + $expire > $this->request->server('REQUEST_TIME')) {
+ // 读取缓存
+ $response = Response::create()->code(304);
+ throw new HttpResponseException($response);
+ } elseif ($this->cache->has($key)) {
+ list($content, $header) = $this->cache->get($key);
+
+ $response = Response::create($content)->header($header);
+ throw new HttpResponseException($response);
+ }
+ }
+
+ /**
+ * 设置当前请求的调度信息
+ * @access public
+ * @param Dispatch $dispatch 调度信息
+ * @return $this
+ */
+ public function dispatch(Dispatch $dispatch)
+ {
+ $this->dispatch = $dispatch;
+ return $this;
+ }
+
+ /**
+ * 记录调试信息
+ * @access public
+ * @param mixed $msg 调试信息
+ * @param string $type 信息类型
+ * @return void
+ */
+ public function log($msg, $type = 'info')
+ {
+ $this->appDebug && $this->log->record($msg, $type);
+ }
+
+ /**
+ * 获取配置参数 为空则获取所有配置
+ * @access public
+ * @param string $name 配置参数名(支持二级配置 .号分割)
+ * @return mixed
+ */
+ public function config($name = '')
+ {
+ return $this->config->get($name);
+ }
+
+ /**
+ * 路由初始化 导入路由定义规则
+ * @access public
+ * @return void
+ */
+ public function routeInit()
+ {
+ // 路由检测
+ if (is_dir($this->routePath)) {
+ $files = glob($this->routePath . '*.php');
+ foreach ($files as $file) {
+ $rules = include $file;
+ if (is_array($rules)) {
+ $this->route->import($rules);
+ }
+ }
+ }
+
+ if ($this->route->config('route_annotation')) {
+ // 自动生成路由定义
+ if ($this->appDebug) {
+ $suffix = $this->route->config('controller_suffix') || $this->route->config('class_suffix');
+ $this->build->buildRoute($suffix);
+ }
+
+ $filename = $this->runtimePath . 'build_route.php';
+
+ if (is_file($filename)) {
+ include $filename;
+ }
+ }
+ }
+
+ /**
+ * URL路由检测(根据PATH_INFO)
+ * @access public
+ * @return Dispatch
+ */
+ public function routeCheck()
+ {
+ // 检测路由缓存
+ if (!$this->appDebug && $this->config->get('route_check_cache')) {
+ $routeKey = $this->getRouteCacheKey();
+ $option = $this->config->get('route_cache_option');
+
+ if ($option && $this->cache->connect($option)->has($routeKey)) {
+ return $this->cache->connect($option)->get($routeKey);
+ } elseif ($this->cache->has($routeKey)) {
+ return $this->cache->get($routeKey);
+ }
+ }
+
+ // 获取应用调度信息
+ $path = $this->request->path();
+
+ // 是否强制路由模式
+ $must = !is_null($this->routeMust) ? $this->routeMust : $this->route->config('url_route_must');
+
+ // 路由检测 返回一个Dispatch对象
+ $dispatch = $this->route->check($path, $must);
+
+ if (!empty($routeKey)) {
+ try {
+ if ($option) {
+ $this->cache->connect($option)->tag('route_cache')->set($routeKey, $dispatch);
+ } else {
+ $this->cache->tag('route_cache')->set($routeKey, $dispatch);
+ }
+ } catch (\Exception $e) {
+ // 存在闭包的时候缓存无效
+ }
+ }
+
+ return $dispatch;
+ }
+
+ /**
+ * 设置应用的路由检测机制
+ * @access public
+ * @param bool $must 是否强制检测路由
+ * @return $this
+ */
+ public function routeMust($must = false)
+ {
+ $this->routeMust = $must;
+ return $this;
+ }
+
+ /**
+ * 解析模块和类名
+ * @access protected
+ * @param string $name 资源地址
+ * @param string $layer 验证层名称
+ * @param bool $appendSuffix 是否添加类名后缀
+ * @return array
+ */
+ protected function parseModuleAndClass($name, $layer, $appendSuffix)
+ {
+ if (false !== strpos($name, '\\')) {
+ $class = $name;
+ $module = $this->request->module();
+ } else {
+ if (strpos($name, '/')) {
+ list($module, $name) = explode('/', $name, 2);
+ } else {
+ $module = $this->request->module();
+ }
+
+ $class = $this->parseClass($module, $layer, $name, $appendSuffix);
+ }
+
+ return [$module, $class];
+ }
+
+ /**
+ * 实例化应用类库
+ * @access public
+ * @param string $name 类名称
+ * @param string $layer 业务层名称
+ * @param bool $appendSuffix 是否添加类名后缀
+ * @param string $common 公共模块名
+ * @return object
+ * @throws ClassNotFoundException
+ */
+ public function create($name, $layer, $appendSuffix = false, $common = 'common')
+ {
+ $guid = $name . $layer;
+
+ if ($this->__isset($guid)) {
+ return $this->__get($guid);
+ }
+
+ list($module, $class) = $this->parseModuleAndClass($name, $layer, $appendSuffix);
+
+ if (class_exists($class)) {
+ $object = $this->__get($class);
+ } else {
+ $class = str_replace('\\' . $module . '\\', '\\' . $common . '\\', $class);
+ if (class_exists($class)) {
+ $object = $this->__get($class);
+ } else {
+ throw new ClassNotFoundException('class not exists:' . $class, $class);
+ }
+ }
+
+ $this->__set($guid, $class);
+
+ return $object;
+ }
+
+ /**
+ * 实例化(分层)模型
+ * @access public
+ * @param string $name Model名称
+ * @param string $layer 业务层名称
+ * @param bool $appendSuffix 是否添加类名后缀
+ * @param string $common 公共模块名
+ * @return Model
+ * @throws ClassNotFoundException
+ */
+ public function model($name = '', $layer = 'model', $appendSuffix = false, $common = 'common')
+ {
+ return $this->create($name, $layer, $appendSuffix, $common);
+ }
+
+ /**
+ * 实例化(分层)控制器 格式:[模块名/]控制器名
+ * @access public
+ * @param string $name 资源地址
+ * @param string $layer 控制层名称
+ * @param bool $appendSuffix 是否添加类名后缀
+ * @param string $empty 空控制器名称
+ * @return object
+ * @throws ClassNotFoundException
+ */
+ public function controller($name, $layer = 'controller', $appendSuffix = false, $empty = '')
+ {
+ list($module, $class) = $this->parseModuleAndClass($name, $layer, $appendSuffix);
+
+ if (class_exists($class)) {
+ return $this->make($class, true);
+ } elseif ($empty && class_exists($emptyClass = $this->parseClass($module, $layer, $empty, $appendSuffix))) {
+ return $this->make($emptyClass, true);
+ }
+
+ throw new ClassNotFoundException('class not exists:' . $class, $class);
+ }
+
+ /**
+ * 实例化验证类 格式:[模块名/]验证器名
+ * @access public
+ * @param string $name 资源地址
+ * @param string $layer 验证层名称
+ * @param bool $appendSuffix 是否添加类名后缀
+ * @param string $common 公共模块名
+ * @return Validate
+ * @throws ClassNotFoundException
+ */
+ public function validate($name = '', $layer = 'validate', $appendSuffix = false, $common = 'common')
+ {
+ $name = $name ?: $this->config('default_validate');
+
+ if (empty($name)) {
+ return new Validate;
+ }
+
+ return $this->create($name, $layer, $appendSuffix, $common);
+ }
+
+ /**
+ * 数据库初始化
+ * @access public
+ * @param mixed $config 数据库配置
+ * @param bool|string $name 连接标识 true 强制重新连接
+ * @return \think\db\Query
+ */
+ public function db($config = [], $name = false)
+ {
+ return Db::connect($config, $name);
+ }
+
+ /**
+ * 远程调用模块的操作方法 参数格式 [模块/控制器/]操作
+ * @access public
+ * @param string $url 调用地址
+ * @param string|array $vars 调用参数 支持字符串和数组
+ * @param string $layer 要调用的控制层名称
+ * @param bool $appendSuffix 是否添加类名后缀
+ * @return mixed
+ * @throws ClassNotFoundException
+ */
+ public function action($url, $vars = [], $layer = 'controller', $appendSuffix = false)
+ {
+ $info = pathinfo($url);
+ $action = $info['basename'];
+ $module = '.' != $info['dirname'] ? $info['dirname'] : $this->request->controller();
+ $class = $this->controller($module, $layer, $appendSuffix);
+
+ if (is_scalar($vars)) {
+ if (strpos($vars, '=')) {
+ parse_str($vars, $vars);
+ } else {
+ $vars = [$vars];
+ }
+ }
+
+ return $this->invokeMethod([$class, $action . $this->config('action_suffix')], $vars);
+ }
+
+ /**
+ * 解析应用类的类名
+ * @access public
+ * @param string $module 模块名
+ * @param string $layer 层名 controller model ...
+ * @param string $name 类名
+ * @param bool $appendSuffix
+ * @return string
+ */
+ public function parseClass($module, $layer, $name, $appendSuffix = false)
+ {
+ $name = str_replace(['/', '.'], '\\', $name);
+ $array = explode('\\', $name);
+ $class = Loader::parseName(array_pop($array), 1) . ($this->suffix || $appendSuffix ? ucfirst($layer) : '');
+ $path = $array ? implode('\\', $array) . '\\' : '';
+
+ return $this->namespace . '\\' . ($module ? $module . '\\' : '') . $layer . '\\' . $path . $class;
+ }
+
+ /**
+ * 获取框架版本
+ * @access public
+ * @return string
+ */
+ public function version()
+ {
+ return static::VERSION;
+ }
+
+ /**
+ * 是否为调试模式
+ * @access public
+ * @return bool
+ */
+ public function isDebug()
+ {
+ return $this->appDebug;
+ }
+
+ /**
+ * 获取模块路径
+ * @access public
+ * @return string
+ */
+ public function getModulePath()
+ {
+ return $this->modulePath;
+ }
+
+ /**
+ * 设置模块路径
+ * @access public
+ * @param string $path 路径
+ * @return void
+ */
+ public function setModulePath($path)
+ {
+ $this->modulePath = $path;
+ $this->env->set('module_path', $path);
+ }
+
+ /**
+ * 获取应用根目录
+ * @access public
+ * @return string
+ */
+ public function getRootPath()
+ {
+ return $this->rootPath;
+ }
+
+ /**
+ * 获取应用类库目录
+ * @access public
+ * @return string
+ */
+ public function getAppPath()
+ {
+ if (is_null($this->appPath)) {
+ $this->appPath = Loader::getRootPath() . 'application' . DIRECTORY_SEPARATOR;
+ }
+
+ return $this->appPath;
+ }
+
+ /**
+ * 获取应用运行时目录
+ * @access public
+ * @return string
+ */
+ public function getRuntimePath()
+ {
+ return $this->runtimePath;
+ }
+
+ /**
+ * 获取核心框架目录
+ * @access public
+ * @return string
+ */
+ public function getThinkPath()
+ {
+ return $this->thinkPath;
+ }
+
+ /**
+ * 获取路由目录
+ * @access public
+ * @return string
+ */
+ public function getRoutePath()
+ {
+ return $this->routePath;
+ }
+
+ /**
+ * 获取应用配置目录
+ * @access public
+ * @return string
+ */
+ public function getConfigPath()
+ {
+ return $this->configPath;
+ }
+
+ /**
+ * 获取配置后缀
+ * @access public
+ * @return string
+ */
+ public function getConfigExt()
+ {
+ return $this->configExt;
+ }
+
+ /**
+ * 获取应用类库命名空间
+ * @access public
+ * @return string
+ */
+ public function getNamespace()
+ {
+ return $this->namespace;
+ }
+
+ /**
+ * 设置应用类库命名空间
+ * @access public
+ * @param string $namespace 命名空间名称
+ * @return $this
+ */
+ public function setNamespace($namespace)
+ {
+ $this->namespace = $namespace;
+ return $this;
+ }
+
+ /**
+ * 是否启用类库后缀
+ * @access public
+ * @return bool
+ */
+ public function getSuffix()
+ {
+ return $this->suffix;
+ }
+
+ /**
+ * 获取应用开启时间
+ * @access public
+ * @return float
+ */
+ public function getBeginTime()
+ {
+ return $this->beginTime;
+ }
+
+ /**
+ * 获取应用初始内存占用
+ * @access public
+ * @return integer
+ */
+ public function getBeginMem()
+ {
+ return $this->beginMem;
+ }
+
+}
diff --git a/thinkphp/library/think/Build.php b/thinkphp/library/think/Build.php
new file mode 100644
index 0000000..7a531d7
--- /dev/null
+++ b/thinkphp/library/think/Build.php
@@ -0,0 +1,415 @@
+
+// +----------------------------------------------------------------------
+
+namespace think;
+
+class Build
+{
+ /**
+ * 应用对象
+ * @var App
+ */
+ protected $app;
+
+ /**
+ * 应用目录
+ * @var string
+ */
+ protected $basePath;
+
+ public function __construct(App $app)
+ {
+ $this->app = $app;
+ $this->basePath = $this->app->getAppPath();
+ }
+
+ /**
+ * 根据传入的build资料创建目录和文件
+ * @access public
+ * @param array $build build列表
+ * @param string $namespace 应用类库命名空间
+ * @param bool $suffix 类库后缀
+ * @return void
+ */
+ public function run(array $build = [], $namespace = 'app', $suffix = false)
+ {
+ // 锁定
+ $lockfile = $this->basePath . 'build.lock';
+
+ if (is_writable($lockfile)) {
+ return;
+ } elseif (!touch($lockfile)) {
+ throw new Exception('应用目录[' . $this->basePath . ']不可写,目录无法自动生成!
请手动生成项目目录~', 10006);
+ }
+
+ foreach ($build as $module => $list) {
+ if ('__dir__' == $module) {
+ // 创建目录列表
+ $this->buildDir($list);
+ } elseif ('__file__' == $module) {
+ // 创建文件列表
+ $this->buildFile($list);
+ } else {
+ // 创建模块
+ $this->module($module, $list, $namespace, $suffix);
+ }
+ }
+
+ // 解除锁定
+ unlink($lockfile);
+ }
+
+ /**
+ * 创建目录
+ * @access protected
+ * @param array $list 目录列表
+ * @return void
+ */
+ protected function buildDir($list)
+ {
+ foreach ($list as $dir) {
+ $this->checkDirBuild($this->basePath . $dir);
+ }
+ }
+
+ /**
+ * 创建文件
+ * @access protected
+ * @param array $list 文件列表
+ * @return void
+ */
+ protected function buildFile($list)
+ {
+ foreach ($list as $file) {
+ if (!is_dir($this->basePath . dirname($file))) {
+ // 创建目录
+ mkdir($this->basePath . dirname($file), 0755, true);
+ }
+
+ if (!is_file($this->basePath . $file)) {
+ file_put_contents($this->basePath . $file, 'php' == pathinfo($file, PATHINFO_EXTENSION) ? "basePath . $module)) {
+ // 创建模块目录
+ mkdir($this->basePath . $module);
+ }
+
+ if (basename($this->app->getRuntimePath()) != $module) {
+ // 创建配置文件和公共文件
+ $this->buildCommon($module);
+ // 创建模块的默认页面
+ $this->buildHello($module, $namespace, $suffix);
+ }
+
+ if (empty($list)) {
+ // 创建默认的模块目录和文件
+ $list = [
+ '__file__' => ['common.php'],
+ '__dir__' => ['controller', 'model', 'view', 'config'],
+ ];
+ }
+
+ // 创建子目录和文件
+ foreach ($list as $path => $file) {
+ $modulePath = $this->basePath . $module . DIRECTORY_SEPARATOR;
+ if ('__dir__' == $path) {
+ // 生成子目录
+ foreach ($file as $dir) {
+ $this->checkDirBuild($modulePath . $dir);
+ }
+ } elseif ('__file__' == $path) {
+ // 生成(空白)文件
+ foreach ($file as $name) {
+ if (!is_file($modulePath . $name)) {
+ file_put_contents($modulePath . $name, 'php' == pathinfo($name, PATHINFO_EXTENSION) ? "checkDirBuild(dirname($filename));
+ $content = '';
+ break;
+ default:
+ // 其他文件
+ $content = "app->getNameSpace();
+ $content = 'app->config('app.url_controller_layer');
+ }
+
+ if ($this->app->config('app.app_multi_module')) {
+ $modules = glob($this->basePath . '*', GLOB_ONLYDIR);
+
+ foreach ($modules as $module) {
+ $module = basename($module);
+
+ if (in_array($module, $this->app->config('app.deny_module_list'))) {
+ continue;
+ }
+
+ $path = $this->basePath . $module . DIRECTORY_SEPARATOR . $layer . DIRECTORY_SEPARATOR;
+ $content .= $this->buildDirRoute($path, $namespace, $module, $suffix, $layer);
+ }
+ } else {
+ $path = $this->basePath . $layer . DIRECTORY_SEPARATOR;
+ $content .= $this->buildDirRoute($path, $namespace, '', $suffix, $layer);
+ }
+
+ $filename = $this->app->getRuntimePath() . 'build_route.php';
+ file_put_contents($filename, $content);
+
+ return $filename;
+ }
+
+ /**
+ * 生成子目录控制器类的路由规则
+ * @access protected
+ * @param string $path 控制器目录
+ * @param string $namespace 应用命名空间
+ * @param string $module 模块
+ * @param bool $suffix 类库后缀
+ * @param string $layer 控制器层目录名
+ * @return string
+ */
+ protected function buildDirRoute($path, $namespace, $module, $suffix, $layer)
+ {
+ $content = '';
+ $controllers = glob($path . '*.php');
+
+ foreach ($controllers as $controller) {
+ $controller = basename($controller, '.php');
+
+ $class = new \ReflectionClass($namespace . '\\' . ($module ? $module . '\\' : '') . $layer . '\\' . $controller);
+
+ if (strpos($layer, '\\')) {
+ // 多级控制器
+ $level = str_replace(DIRECTORY_SEPARATOR, '.', substr($layer, 11));
+ $controller = $level . '.' . $controller;
+ $length = strlen(strstr($layer, '\\', true));
+ } else {
+ $length = strlen($layer);
+ }
+
+ if ($suffix) {
+ $controller = substr($controller, 0, -$length);
+ }
+
+ $content .= $this->getControllerRoute($class, $module, $controller);
+ }
+
+ $subDir = glob($path . '*', GLOB_ONLYDIR);
+
+ foreach ($subDir as $dir) {
+ $content .= $this->buildDirRoute($dir . DIRECTORY_SEPARATOR, $namespace, $module, $suffix, $layer . '\\' . basename($dir));
+ }
+
+ return $content;
+ }
+
+ /**
+ * 生成控制器类的路由规则
+ * @access protected
+ * @param string $class 控制器完整类名
+ * @param string $module 模块名
+ * @param string $controller 控制器名
+ * @return string
+ */
+ protected function getControllerRoute($class, $module, $controller)
+ {
+ $content = '';
+ $comment = $class->getDocComment();
+
+ if (false !== strpos($comment, '@route(')) {
+ $comment = $this->parseRouteComment($comment);
+ $route = ($module ? $module . '/' : '') . $controller;
+ $comment = preg_replace('/route\(\s?([\'\"][\-\_\/\:\<\>\?\$\[\]\w]+[\'\"])\s?\)/is', 'Route::resource(\1,\'' . $route . '\')', $comment);
+ $content .= PHP_EOL . $comment;
+ } elseif (false !== strpos($comment, '@alias(')) {
+ $comment = $this->parseRouteComment($comment, '@alias(');
+ $route = ($module ? $module . '/' : '') . $controller;
+ $comment = preg_replace('/alias\(\s?([\'\"][\-\_\/\w]+[\'\"])\s?\)/is', 'Route::alias(\1,\'' . $route . '\')', $comment);
+ $content .= PHP_EOL . $comment;
+ }
+
+ $methods = $class->getMethods(\ReflectionMethod::IS_PUBLIC);
+
+ foreach ($methods as $method) {
+ $comment = $this->getMethodRouteComment($module, $controller, $method);
+ if ($comment) {
+ $content .= PHP_EOL . $comment;
+ }
+ }
+
+ return $content;
+ }
+
+ /**
+ * 解析路由注释
+ * @access protected
+ * @param string $comment
+ * @param string $tag
+ * @return string
+ */
+ protected function parseRouteComment($comment, $tag = '@route(')
+ {
+ $comment = substr($comment, 3, -2);
+ $comment = explode(PHP_EOL, substr(strstr(trim($comment), $tag), 1));
+ $comment = array_map(function ($item) {return trim(trim($item), ' \t*');}, $comment);
+
+ if (count($comment) > 1) {
+ $key = array_search('', $comment);
+ $comment = array_slice($comment, 0, false === $key ? 1 : $key);
+ }
+
+ $comment = implode(PHP_EOL . "\t", $comment) . ';';
+
+ if (strpos($comment, '{')) {
+ $comment = preg_replace_callback('/\{\s?.*?\s?\}/s', function ($matches) {
+ return false !== strpos($matches[0], '"') ? '[' . substr(var_export(json_decode($matches[0], true), true), 7, -1) . ']' : $matches[0];
+ }, $comment);
+ }
+ return $comment;
+ }
+
+ /**
+ * 获取方法的路由注释
+ * @access protected
+ * @param string $module 模块
+ * @param string $controller 控制器名
+ * @param \ReflectMethod $reflectMethod
+ * @return string|void
+ */
+ protected function getMethodRouteComment($module, $controller, $reflectMethod)
+ {
+ $comment = $reflectMethod->getDocComment();
+
+ if (false !== strpos($comment, '@route(')) {
+ $comment = $this->parseRouteComment($comment);
+ $action = $reflectMethod->getName();
+
+ if ($suffix = $this->app->config('app.action_suffix')) {
+ $action = substr($action, 0, -strlen($suffix));
+ }
+
+ $route = ($module ? $module . '/' : '') . $controller . '/' . $action;
+ $comment = preg_replace('/route\s?\(\s?([\'\"][\-\_\/\:\<\>\?\$\[\]\w]+[\'\"])\s?\,?\s?[\'\"]?(\w+?)[\'\"]?\s?\)/is', 'Route::\2(\1,\'' . $route . '\')', $comment);
+ $comment = preg_replace('/route\s?\(\s?([\'\"][\-\_\/\:\<\>\?\$\[\]\w]+[\'\"])\s?\)/is', 'Route::rule(\1,\'' . $route . '\')', $comment);
+
+ return $comment;
+ }
+ }
+
+ /**
+ * 创建模块的欢迎页面
+ * @access protected
+ * @param string $module 模块名
+ * @param string $namespace 应用类库命名空间
+ * @param bool $suffix 类库后缀
+ * @return void
+ */
+ protected function buildHello($module, $namespace, $suffix = false)
+ {
+ $filename = $this->basePath . ($module ? $module . DIRECTORY_SEPARATOR : '') . 'controller' . DIRECTORY_SEPARATOR . 'Index' . ($suffix ? 'Controller' : '') . '.php';
+ if (!is_file($filename)) {
+ $content = file_get_contents($this->app->getThinkPath() . 'tpl' . DIRECTORY_SEPARATOR . 'default_index.tpl');
+ $content = str_replace(['{$app}', '{$module}', '{layer}', '{$suffix}'], [$namespace, $module ? $module . '\\' : '', 'controller', $suffix ? 'Controller' : ''], $content);
+ $this->checkDirBuild(dirname($filename));
+
+ file_put_contents($filename, $content);
+ }
+ }
+
+ /**
+ * 创建模块的公共文件
+ * @access protected
+ * @param string $module 模块名
+ * @return void
+ */
+ protected function buildCommon($module)
+ {
+ $filename = $this->app->getConfigPath() . ($module ? $module . DIRECTORY_SEPARATOR : '') . 'app.php';
+ $this->checkDirBuild(dirname($filename));
+
+ if (!is_file($filename)) {
+ file_put_contents($filename, "basePath . ($module ? $module . DIRECTORY_SEPARATOR : '') . 'common.php';
+
+ if (!is_file($filename)) {
+ file_put_contents($filename, "
+// +----------------------------------------------------------------------
+
+namespace think;
+
+use think\cache\Driver;
+
+/**
+ * Class Cache
+ *
+ * @package think
+ *
+ * @mixin Driver
+ * @mixin \think\cache\driver\File
+ */
+class Cache
+{
+ /**
+ * 缓存实例
+ * @var array
+ */
+ protected $instance = [];
+
+ /**
+ * 缓存配置
+ * @var array
+ */
+ protected $config = [];
+
+ /**
+ * 操作句柄
+ * @var object
+ */
+ protected $handler;
+
+ public function __construct(array $config = [])
+ {
+ $this->config = $config;
+ $this->init($config);
+ }
+
+ /**
+ * 连接缓存
+ * @access public
+ * @param array $options 配置数组
+ * @param bool|string $name 缓存连接标识 true 强制重新连接
+ * @return Driver
+ */
+ public function connect(array $options = [], $name = false)
+ {
+ if (false === $name) {
+ $name = md5(serialize($options));
+ }
+
+ if (true === $name || !isset($this->instance[$name])) {
+ $type = !empty($options['type']) ? $options['type'] : 'File';
+
+ if (true === $name) {
+ $name = md5(serialize($options));
+ }
+
+ $this->instance[$name] = Loader::factory($type, '\\think\\cache\\driver\\', $options);
+ }
+
+ return $this->instance[$name];
+ }
+
+ /**
+ * 自动初始化缓存
+ * @access public
+ * @param array $options 配置数组
+ * @param bool $force 强制更新
+ * @return Driver
+ */
+ public function init(array $options = [], $force = false)
+ {
+ if (is_null($this->handler) || $force) {
+
+ if ('complex' == $options['type']) {
+ $default = $options['default'];
+ $options = isset($options[$default['type']]) ? $options[$default['type']] : $default;
+ }
+
+ $this->handler = $this->connect($options);
+ }
+
+ return $this->handler;
+ }
+
+ public static function __make(Config $config)
+ {
+ return new static($config->pull('cache'));
+ }
+
+ public function getConfig()
+ {
+ return $this->config;
+ }
+
+ public function setConfig(array $config)
+ {
+ $this->config = array_merge($this->config, $config);
+ }
+
+ /**
+ * 切换缓存类型 需要配置 cache.type 为 complex
+ * @access public
+ * @param string $name 缓存标识
+ * @return Driver
+ */
+ public function store($name = '')
+ {
+ if ('' !== $name && 'complex' == $this->config['type']) {
+ return $this->connect($this->config[$name], strtolower($name));
+ }
+
+ return $this->init();
+ }
+
+ public function __call($method, $args)
+ {
+ return call_user_func_array([$this->init(), $method], $args);
+ }
+
+}
diff --git a/thinkphp/library/think/Collection.php b/thinkphp/library/think/Collection.php
new file mode 100644
index 0000000..d7454ec
--- /dev/null
+++ b/thinkphp/library/think/Collection.php
@@ -0,0 +1,552 @@
+
+// +----------------------------------------------------------------------
+
+namespace think;
+
+use ArrayAccess;
+use ArrayIterator;
+use Countable;
+use IteratorAggregate;
+use JsonSerializable;
+
+class Collection implements ArrayAccess, Countable, IteratorAggregate, JsonSerializable
+{
+ /**
+ * 数据集数据
+ * @var array
+ */
+ protected $items = [];
+
+ public function __construct($items = [])
+ {
+ $this->items = $this->convertToArray($items);
+ }
+
+ public static function make($items = [])
+ {
+ return new static($items);
+ }
+
+ /**
+ * 是否为空
+ * @access public
+ * @return bool
+ */
+ public function isEmpty()
+ {
+ return empty($this->items);
+ }
+
+ public function toArray()
+ {
+ return array_map(function ($value) {
+ return ($value instanceof Model || $value instanceof self) ? $value->toArray() : $value;
+ }, $this->items);
+ }
+
+ public function all()
+ {
+ return $this->items;
+ }
+
+ /**
+ * 合并数组
+ *
+ * @access public
+ * @param mixed $items
+ * @return static
+ */
+ public function merge($items)
+ {
+ return new static(array_merge($this->items, $this->convertToArray($items)));
+ }
+
+ /**
+ * 交换数组中的键和值
+ *
+ * @access public
+ * @return static
+ */
+ public function flip()
+ {
+ return new static(array_flip($this->items));
+ }
+
+ /**
+ * 按指定键整理数据
+ *
+ * @access public
+ * @param mixed $items 数据
+ * @param string $indexKey 键名
+ * @return array
+ */
+ public function dictionary($items = null, &$indexKey = null)
+ {
+ if ($items instanceof self || $items instanceof Paginator) {
+ $items = $items->all();
+ }
+
+ $items = is_null($items) ? $this->items : $items;
+
+ if ($items && empty($indexKey)) {
+ $indexKey = is_array($items[0]) ? 'id' : $items[0]->getPk();
+ }
+
+ if (isset($indexKey) && is_string($indexKey)) {
+ return array_column($items, null, $indexKey);
+ }
+
+ return $items;
+ }
+
+ /**
+ * 比较数组,返回差集
+ *
+ * @access public
+ * @param mixed $items 数据
+ * @param string $indexKey 指定比较的键名
+ * @return static
+ */
+ public function diff($items, $indexKey = null)
+ {
+ if ($this->isEmpty() || is_scalar($this->items[0])) {
+ return new static(array_diff($this->items, $this->convertToArray($items)));
+ }
+
+ $diff = [];
+ $dictionary = $this->dictionary($items, $indexKey);
+
+ if (is_string($indexKey)) {
+ foreach ($this->items as $item) {
+ if (!isset($dictionary[$item[$indexKey]])) {
+ $diff[] = $item;
+ }
+ }
+ }
+
+ return new static($diff);
+ }
+
+ /**
+ * 比较数组,返回交集
+ *
+ * @access public
+ * @param mixed $items 数据
+ * @param string $indexKey 指定比较的键名
+ * @return static
+ */
+ public function intersect($items, $indexKey = null)
+ {
+ if ($this->isEmpty() || is_scalar($this->items[0])) {
+ return new static(array_diff($this->items, $this->convertToArray($items)));
+ }
+
+ $intersect = [];
+ $dictionary = $this->dictionary($items, $indexKey);
+
+ if (is_string($indexKey)) {
+ foreach ($this->items as $item) {
+ if (isset($dictionary[$item[$indexKey]])) {
+ $intersect[] = $item;
+ }
+ }
+ }
+
+ return new static($intersect);
+ }
+
+ /**
+ * 返回数组中所有的键名
+ *
+ * @access public
+ * @return array
+ */
+ public function keys()
+ {
+ $current = current($this->items);
+
+ if (is_scalar($current)) {
+ $array = $this->items;
+ } elseif (is_array($current)) {
+ $array = $current;
+ } else {
+ $array = $current->toArray();
+ }
+
+ return array_keys($array);
+ }
+
+ /**
+ * 删除数组的最后一个元素(出栈)
+ *
+ * @access public
+ * @return mixed
+ */
+ public function pop()
+ {
+ return array_pop($this->items);
+ }
+
+ /**
+ * 通过使用用户自定义函数,以字符串返回数组
+ *
+ * @access public
+ * @param callable $callback
+ * @param mixed $initial
+ * @return mixed
+ */
+ public function reduce(callable $callback, $initial = null)
+ {
+ return array_reduce($this->items, $callback, $initial);
+ }
+
+ /**
+ * 以相反的顺序返回数组。
+ *
+ * @access public
+ * @return static
+ */
+ public function reverse()
+ {
+ return new static(array_reverse($this->items));
+ }
+
+ /**
+ * 删除数组中首个元素,并返回被删除元素的值
+ *
+ * @access public
+ * @return mixed
+ */
+ public function shift()
+ {
+ return array_shift($this->items);
+ }
+
+ /**
+ * 在数组结尾插入一个元素
+ * @access public
+ * @param mixed $value
+ * @param mixed $key
+ * @return void
+ */
+ public function push($value, $key = null)
+ {
+ if (is_null($key)) {
+ $this->items[] = $value;
+ } else {
+ $this->items[$key] = $value;
+ }
+ }
+
+ /**
+ * 把一个数组分割为新的数组块.
+ *
+ * @access public
+ * @param int $size
+ * @param bool $preserveKeys
+ * @return static
+ */
+ public function chunk($size, $preserveKeys = false)
+ {
+ $chunks = [];
+
+ foreach (array_chunk($this->items, $size, $preserveKeys) as $chunk) {
+ $chunks[] = new static($chunk);
+ }
+
+ return new static($chunks);
+ }
+
+ /**
+ * 在数组开头插入一个元素
+ * @access public
+ * @param mixed $value
+ * @param mixed $key
+ * @return void
+ */
+ public function unshift($value, $key = null)
+ {
+ if (is_null($key)) {
+ array_unshift($this->items, $value);
+ } else {
+ $this->items = [$key => $value] + $this->items;
+ }
+ }
+
+ /**
+ * 给每个元素执行个回调
+ *
+ * @access public
+ * @param callable $callback
+ * @return $this
+ */
+ public function each(callable $callback)
+ {
+ foreach ($this->items as $key => $item) {
+ $result = $callback($item, $key);
+
+ if (false === $result) {
+ break;
+ } elseif (!is_object($item)) {
+ $this->items[$key] = $result;
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * 用回调函数处理数组中的元素
+ * @access public
+ * @param callable|null $callback
+ * @return static
+ */
+ public function map(callable $callback)
+ {
+ return new static(array_map($callback, $this->items));
+ }
+
+ /**
+ * 用回调函数过滤数组中的元素
+ * @access public
+ * @param callable|null $callback
+ * @return static
+ */
+ public function filter(callable $callback = null)
+ {
+ if ($callback) {
+ return new static(array_filter($this->items, $callback));
+ }
+
+ return new static(array_filter($this->items));
+ }
+
+ /**
+ * 根据字段条件过滤数组中的元素
+ * @access public
+ * @param string $field 字段名
+ * @param mixed $operator 操作符
+ * @param mixed $value 数据
+ * @return static
+ */
+ public function where($field, $operator, $value = null)
+ {
+ if (is_null($value)) {
+ $value = $operator;
+ $operator = '=';
+ }
+
+ return $this->filter(function ($data) use ($field, $operator, $value) {
+ if (strpos($field, '.')) {
+ list($field, $relation) = explode('.', $field);
+
+ $result = isset($data[$field][$relation]) ? $data[$field][$relation] : null;
+ } else {
+ $result = isset($data[$field]) ? $data[$field] : null;
+ }
+
+ switch (strtolower($operator)) {
+ case '===':
+ return $result === $value;
+ case '!==':
+ return $result !== $value;
+ case '!=':
+ case '<>':
+ return $result != $value;
+ case '>':
+ return $result > $value;
+ case '>=':
+ return $result >= $value;
+ case '<':
+ return $result < $value;
+ case '<=':
+ return $result <= $value;
+ case 'like':
+ return is_string($result) && false !== strpos($result, $value);
+ case 'not like':
+ return is_string($result) && false === strpos($result, $value);
+ case 'in':
+ return is_scalar($result) && in_array($result, $value, true);
+ case 'not in':
+ return is_scalar($result) && !in_array($result, $value, true);
+ case 'between':
+ list($min, $max) = is_string($value) ? explode(',', $value) : $value;
+ return is_scalar($result) && $result >= $min && $result <= $max;
+ case 'not between':
+ list($min, $max) = is_string($value) ? explode(',', $value) : $value;
+ return is_scalar($result) && $result > $max || $result < $min;
+ case '==':
+ case '=':
+ default:
+ return $result == $value;
+ }
+ });
+ }
+
+ /**
+ * 返回数据中指定的一列
+ * @access public
+ * @param mixed $columnKey 键名
+ * @param mixed $indexKey 作为索引值的列
+ * @return array
+ */
+ public function column($columnKey, $indexKey = null)
+ {
+ return array_column($this->toArray(), $columnKey, $indexKey);
+ }
+
+ /**
+ * 对数组排序
+ *
+ * @access public
+ * @param callable|null $callback
+ * @return static
+ */
+ public function sort(callable $callback = null)
+ {
+ $items = $this->items;
+
+ $callback = $callback ?: function ($a, $b) {
+ return $a == $b ? 0 : (($a < $b) ? -1 : 1);
+
+ };
+
+ uasort($items, $callback);
+
+ return new static($items);
+ }
+
+ /**
+ * 指定字段排序
+ * @access public
+ * @param string $field 排序字段
+ * @param string $order 排序
+ * @param bool $intSort 是否为数字排序
+ * @return $this
+ */
+ public function order($field, $order = null, $intSort = true)
+ {
+ return $this->sort(function ($a, $b) use ($field, $order, $intSort) {
+ $fieldA = isset($a[$field]) ? $a[$field] : null;
+ $fieldB = isset($b[$field]) ? $b[$field] : null;
+
+ if ($intSort) {
+ return 'desc' == strtolower($order) ? $fieldB >= $fieldA : $fieldA >= $fieldB;
+ } else {
+ return 'desc' == strtolower($order) ? strcmp($fieldB, $fieldA) : strcmp($fieldA, $fieldB);
+ }
+ });
+ }
+
+ /**
+ * 将数组打乱
+ *
+ * @access public
+ * @return static
+ */
+ public function shuffle()
+ {
+ $items = $this->items;
+
+ shuffle($items);
+
+ return new static($items);
+ }
+
+ /**
+ * 截取数组
+ *
+ * @access public
+ * @param int $offset
+ * @param int $length
+ * @param bool $preserveKeys
+ * @return static
+ */
+ public function slice($offset, $length = null, $preserveKeys = false)
+ {
+ return new static(array_slice($this->items, $offset, $length, $preserveKeys));
+ }
+
+ // ArrayAccess
+ public function offsetExists($offset)
+ {
+ return array_key_exists($offset, $this->items);
+ }
+
+ public function offsetGet($offset)
+ {
+ return $this->items[$offset];
+ }
+
+ public function offsetSet($offset, $value)
+ {
+ if (is_null($offset)) {
+ $this->items[] = $value;
+ } else {
+ $this->items[$offset] = $value;
+ }
+ }
+
+ public function offsetUnset($offset)
+ {
+ unset($this->items[$offset]);
+ }
+
+ //Countable
+ public function count()
+ {
+ return count($this->items);
+ }
+
+ //IteratorAggregate
+ public function getIterator()
+ {
+ return new ArrayIterator($this->items);
+ }
+
+ //JsonSerializable
+ public function jsonSerialize()
+ {
+ return $this->toArray();
+ }
+
+ /**
+ * 转换当前数据集为JSON字符串
+ * @access public
+ * @param integer $options json参数
+ * @return string
+ */
+ public function toJson($options = JSON_UNESCAPED_UNICODE)
+ {
+ return json_encode($this->toArray(), $options);
+ }
+
+ public function __toString()
+ {
+ return $this->toJson();
+ }
+
+ /**
+ * 转换成数组
+ *
+ * @access public
+ * @param mixed $items
+ * @return array
+ */
+ protected function convertToArray($items)
+ {
+ if ($items instanceof self) {
+ return $items->all();
+ }
+
+ return (array) $items;
+ }
+}
diff --git a/thinkphp/library/think/Config.php b/thinkphp/library/think/Config.php
new file mode 100644
index 0000000..bec6222
--- /dev/null
+++ b/thinkphp/library/think/Config.php
@@ -0,0 +1,398 @@
+
+// +----------------------------------------------------------------------
+
+namespace think;
+
+use Yaconf;
+
+class Config implements \ArrayAccess
+{
+ /**
+ * 配置参数
+ * @var array
+ */
+ protected $config = [];
+
+ /**
+ * 配置前缀
+ * @var string
+ */
+ protected $prefix = 'app';
+
+ /**
+ * 配置文件目录
+ * @var string
+ */
+ protected $path;
+
+ /**
+ * 配置文件后缀
+ * @var string
+ */
+ protected $ext;
+
+ /**
+ * 是否支持Yaconf
+ * @var bool
+ */
+ protected $yaconf;
+
+ /**
+ * 构造方法
+ * @access public
+ */
+ public function __construct($path = '', $ext = '.php')
+ {
+ $this->path = $path;
+ $this->ext = $ext;
+ $this->yaconf = class_exists('Yaconf');
+ }
+
+ public static function __make(App $app)
+ {
+ $path = $app->getConfigPath();
+ $ext = $app->getConfigExt();
+ return new static($path, $ext);
+ }
+
+ /**
+ * 设置开启Yaconf
+ * @access public
+ * @param bool|string $yaconf 是否使用Yaconf
+ * @return void
+ */
+ public function setYaconf($yaconf)
+ {
+ if ($this->yaconf) {
+ $this->yaconf = $yaconf;
+ }
+ }
+
+ /**
+ * 设置配置参数默认前缀
+ * @access public
+ * @param string $prefix 前缀
+ * @return void
+ */
+ public function setDefaultPrefix($prefix)
+ {
+ $this->prefix = $prefix;
+ }
+
+ /**
+ * 解析配置文件或内容
+ * @access public
+ * @param string $config 配置文件路径或内容
+ * @param string $type 配置解析类型
+ * @param string $name 配置名(如设置即表示二级配置)
+ * @return mixed
+ */
+ public function parse($config, $type = '', $name = '')
+ {
+ if (empty($type)) {
+ $type = pathinfo($config, PATHINFO_EXTENSION);
+ }
+
+ $object = Loader::factory($type, '\\think\\config\\driver\\', $config);
+
+ return $this->set($object->parse(), $name);
+ }
+
+ /**
+ * 加载配置文件(多种格式)
+ * @access public
+ * @param string $file 配置文件名
+ * @param string $name 一级配置名
+ * @return mixed
+ */
+ public function load($file, $name = '')
+ {
+ if (is_file($file)) {
+ $filename = $file;
+ } elseif (is_file($this->path . $file . $this->ext)) {
+ $filename = $this->path . $file . $this->ext;
+ }
+
+ if (isset($filename)) {
+ return $this->loadFile($filename, $name);
+ } elseif ($this->yaconf && Yaconf::has($file)) {
+ return $this->set(Yaconf::get($file), $name);
+ }
+
+ return $this->config;
+ }
+
+ /**
+ * 获取实际的yaconf配置参数
+ * @access protected
+ * @param string $name 配置参数名
+ * @return string
+ */
+ protected function getYaconfName($name)
+ {
+ if ($this->yaconf && is_string($this->yaconf)) {
+ return $this->yaconf . '.' . $name;
+ }
+
+ return $name;
+ }
+
+ /**
+ * 获取yaconf配置
+ * @access public
+ * @param string $name 配置参数名
+ * @param mixed $default 默认值
+ * @return mixed
+ */
+ public function yaconf($name, $default = null)
+ {
+ if ($this->yaconf) {
+ $yaconfName = $this->getYaconfName($name);
+
+ if (Yaconf::has($yaconfName)) {
+ return Yaconf::get($yaconfName);
+ }
+ }
+
+ return $default;
+ }
+
+ protected function loadFile($file, $name)
+ {
+ $name = strtolower($name);
+ $type = pathinfo($file, PATHINFO_EXTENSION);
+
+ if ('php' == $type) {
+ return $this->set(include $file, $name);
+ } elseif ('yaml' == $type && function_exists('yaml_parse_file')) {
+ return $this->set(yaml_parse_file($file), $name);
+ }
+
+ return $this->parse($file, $type, $name);
+ }
+
+ /**
+ * 检测配置是否存在
+ * @access public
+ * @param string $name 配置参数名(支持多级配置 .号分割)
+ * @return bool
+ */
+ public function has($name)
+ {
+ if (false === strpos($name, '.')) {
+ $name = $this->prefix . '.' . $name;
+ }
+
+ return !is_null($this->get($name));
+ }
+
+ /**
+ * 获取一级配置
+ * @access public
+ * @param string $name 一级配置名
+ * @return array
+ */
+ public function pull($name)
+ {
+ $name = strtolower($name);
+
+ if ($this->yaconf) {
+ $yaconfName = $this->getYaconfName($name);
+
+ if (Yaconf::has($yaconfName)) {
+ $config = Yaconf::get($yaconfName);
+ return isset($this->config[$name]) ? array_merge($this->config[$name], $config) : $config;
+ }
+ }
+
+ return isset($this->config[$name]) ? $this->config[$name] : [];
+ }
+
+ /**
+ * 获取配置参数 为空则获取所有配置
+ * @access public
+ * @param string $name 配置参数名(支持多级配置 .号分割)
+ * @param mixed $default 默认值
+ * @return mixed
+ */
+ public function get($name = null, $default = null)
+ {
+ if ($name && false === strpos($name, '.')) {
+ $name = $this->prefix . '.' . $name;
+ }
+
+ // 无参数时获取所有
+ if (empty($name)) {
+ return $this->config;
+ }
+
+ if ('.' == substr($name, -1)) {
+ return $this->pull(substr($name, 0, -1));
+ }
+
+ if ($this->yaconf) {
+ $yaconfName = $this->getYaconfName($name);
+
+ if (Yaconf::has($yaconfName)) {
+ return Yaconf::get($yaconfName);
+ }
+ }
+
+ $name = explode('.', $name);
+ $name[0] = strtolower($name[0]);
+ $config = $this->config;
+
+ // 按.拆分成多维数组进行判断
+ foreach ($name as $val) {
+ if (isset($config[$val])) {
+ $config = $config[$val];
+ } else {
+ return $default;
+ }
+ }
+
+ return $config;
+ }
+
+ /**
+ * 设置配置参数 name为数组则为批量设置
+ * @access public
+ * @param string|array $name 配置参数名(支持三级配置 .号分割)
+ * @param mixed $value 配置值
+ * @return mixed
+ */
+ public function set($name, $value = null)
+ {
+ if (is_string($name)) {
+ if (false === strpos($name, '.')) {
+ $name = $this->prefix . '.' . $name;
+ }
+
+ $name = explode('.', $name, 3);
+
+ if (count($name) == 2) {
+ $this->config[strtolower($name[0])][$name[1]] = $value;
+ } else {
+ $this->config[strtolower($name[0])][$name[1]][$name[2]] = $value;
+ }
+
+ return $value;
+ } elseif (is_array($name)) {
+ // 批量设置
+ if (!empty($value)) {
+ if (isset($this->config[$value])) {
+ $result = array_merge($this->config[$value], $name);
+ } else {
+ $result = $name;
+ }
+
+ $this->config[$value] = $result;
+ } else {
+ $result = $this->config = array_merge($this->config, $name);
+ }
+ } else {
+ // 为空直接返回 已有配置
+ $result = $this->config;
+ }
+
+ return $result;
+ }
+
+ /**
+ * 移除配置
+ * @access public
+ * @param string $name 配置参数名(支持三级配置 .号分割)
+ * @return void
+ */
+ public function remove($name)
+ {
+ if (false === strpos($name, '.')) {
+ $name = $this->prefix . '.' . $name;
+ }
+
+ $name = explode('.', $name, 3);
+
+ if (count($name) == 2) {
+ unset($this->config[strtolower($name[0])][$name[1]]);
+ } else {
+ unset($this->config[strtolower($name[0])][$name[1]][$name[2]]);
+ }
+ }
+
+ /**
+ * 重置配置参数
+ * @access public
+ * @param string $prefix 配置前缀名
+ * @return void
+ */
+ public function reset($prefix = '')
+ {
+ if ('' === $prefix) {
+ $this->config = [];
+ } else {
+ $this->config[$prefix] = [];
+ }
+ }
+
+ /**
+ * 设置配置
+ * @access public
+ * @param string $name 参数名
+ * @param mixed $value 值
+ */
+ public function __set($name, $value)
+ {
+ return $this->set($name, $value);
+ }
+
+ /**
+ * 获取配置参数
+ * @access public
+ * @param string $name 参数名
+ * @return mixed
+ */
+ public function __get($name)
+ {
+ return $this->get($name);
+ }
+
+ /**
+ * 检测是否存在参数
+ * @access public
+ * @param string $name 参数名
+ * @return bool
+ */
+ public function __isset($name)
+ {
+ return $this->has($name);
+ }
+
+ // ArrayAccess
+ public function offsetSet($name, $value)
+ {
+ $this->set($name, $value);
+ }
+
+ public function offsetExists($name)
+ {
+ return $this->has($name);
+ }
+
+ public function offsetUnset($name)
+ {
+ $this->remove($name);
+ }
+
+ public function offsetGet($name)
+ {
+ return $this->get($name);
+ }
+}
diff --git a/thinkphp/library/think/Console.php b/thinkphp/library/think/Console.php
new file mode 100644
index 0000000..22f3e2c
--- /dev/null
+++ b/thinkphp/library/think/Console.php
@@ -0,0 +1,829 @@
+
+// +----------------------------------------------------------------------
+
+namespace think;
+
+use think\console\Command;
+use think\console\command\Help as HelpCommand;
+use think\console\Input;
+use think\console\input\Argument as InputArgument;
+use think\console\input\Definition as InputDefinition;
+use think\console\input\Option as InputOption;
+use think\console\Output;
+use think\console\output\driver\Buffer;
+
+class Console
+{
+
+ private $name;
+ private $version;
+
+ /** @var Command[] */
+ private $commands = [];
+
+ private $wantHelps = false;
+
+ private $catchExceptions = true;
+ private $autoExit = true;
+ private $definition;
+ private $defaultCommand;
+
+ private static $defaultCommands = [
+ 'help' => "think\\console\\command\\Help",
+ 'list' => "think\\console\\command\\Lists",
+ 'build' => "think\\console\\command\\Build",
+ 'clear' => "think\\console\\command\\Clear",
+ 'make:command' => "think\\console\\command\\make\\Command",
+ 'make:controller' => "think\\console\\command\\make\\Controller",
+ 'make:model' => "think\\console\\command\\make\\Model",
+ 'make:middleware' => "think\\console\\command\\make\\Middleware",
+ 'make:validate' => "think\\console\\command\\make\\Validate",
+ 'optimize:autoload' => "think\\console\\command\\optimize\\Autoload",
+ 'optimize:config' => "think\\console\\command\\optimize\\Config",
+ 'optimize:schema' => "think\\console\\command\\optimize\\Schema",
+ 'optimize:route' => "think\\console\\command\\optimize\\Route",
+ 'run' => "think\\console\\command\\RunServer",
+ 'version' => "think\\console\\command\\Version",
+ 'route:list' => "think\\console\\command\\RouteList",
+ ];
+
+ /**
+ * Console constructor.
+ * @access public
+ * @param string $name 名称
+ * @param string $version 版本
+ * @param null|string $user 执行用户
+ */
+ public function __construct($name = 'UNKNOWN', $version = 'UNKNOWN', $user = null)
+ {
+ $this->name = $name;
+ $this->version = $version;
+
+ if ($user) {
+ $this->setUser($user);
+ }
+
+ $this->defaultCommand = 'list';
+ $this->definition = $this->getDefaultInputDefinition();
+ }
+
+ /**
+ * 设置执行用户
+ * @param $user
+ */
+ public function setUser($user)
+ {
+ if (DIRECTORY_SEPARATOR == '\\') {
+ return;
+ }
+
+ $user = posix_getpwnam($user);
+ if ($user) {
+ posix_setuid($user['uid']);
+ posix_setgid($user['gid']);
+ }
+ }
+
+ /**
+ * 初始化 Console
+ * @access public
+ * @param bool $run 是否运行 Console
+ * @return int|Console
+ */
+ public static function init($run = true)
+ {
+ static $console;
+
+ if (!$console) {
+ $config = Container::get('config')->pull('console');
+ $console = new self($config['name'], $config['version'], $config['user']);
+
+ $commands = $console->getDefinedCommands($config);
+
+ // 添加指令集
+ $console->addCommands($commands);
+ }
+
+ if ($run) {
+ // 运行
+ return $console->run();
+ } else {
+ return $console;
+ }
+ }
+
+ /**
+ * @access public
+ * @param array $config
+ * @return array
+ */
+ public function getDefinedCommands(array $config = [])
+ {
+ $commands = self::$defaultCommands;
+
+ if (!empty($config['auto_path']) && is_dir($config['auto_path'])) {
+ // 自动加载指令类
+ $files = scandir($config['auto_path']);
+
+ if (count($files) > 2) {
+ $beforeClass = get_declared_classes();
+
+ foreach ($files as $file) {
+ if (pathinfo($file, PATHINFO_EXTENSION) == 'php') {
+ include $config['auto_path'] . $file;
+ }
+ }
+
+ $afterClass = get_declared_classes();
+ $commands = array_merge($commands, array_diff($afterClass, $beforeClass));
+ }
+ }
+
+ $file = Container::get('env')->get('app_path') . 'command.php';
+
+ if (is_file($file)) {
+ $appCommands = include $file;
+
+ if (is_array($appCommands)) {
+ $commands = array_merge($commands, $appCommands);
+ }
+ }
+
+ return $commands;
+ }
+
+ /**
+ * @access public
+ * @param string $command
+ * @param array $parameters
+ * @param string $driver
+ * @return Output|Buffer
+ */
+ public static function call($command, array $parameters = [], $driver = 'buffer')
+ {
+ $console = self::init(false);
+
+ array_unshift($parameters, $command);
+
+ $input = new Input($parameters);
+ $output = new Output($driver);
+
+ $console->setCatchExceptions(false);
+ $console->find($command)->run($input, $output);
+
+ return $output;
+ }
+
+ /**
+ * 执行当前的指令
+ * @access public
+ * @return int
+ * @throws \Exception
+ * @api
+ */
+ public function run()
+ {
+ $input = new Input();
+ $output = new Output();
+
+ $this->configureIO($input, $output);
+
+ try {
+ $exitCode = $this->doRun($input, $output);
+ } catch (\Exception $e) {
+ if (!$this->catchExceptions) {
+ throw $e;
+ }
+
+ $output->renderException($e);
+
+ $exitCode = $e->getCode();
+ if (is_numeric($exitCode)) {
+ $exitCode = (int) $exitCode;
+ if (0 === $exitCode) {
+ $exitCode = 1;
+ }
+ } else {
+ $exitCode = 1;
+ }
+ }
+
+ if ($this->autoExit) {
+ if ($exitCode > 255) {
+ $exitCode = 255;
+ }
+
+ exit($exitCode);
+ }
+
+ return $exitCode;
+ }
+
+ /**
+ * 执行指令
+ * @access public
+ * @param Input $input
+ * @param Output $output
+ * @return int
+ */
+ public function doRun(Input $input, Output $output)
+ {
+ if (true === $input->hasParameterOption(['--version', '-V'])) {
+ $output->writeln($this->getLongVersion());
+
+ return 0;
+ }
+
+ $name = $this->getCommandName($input);
+
+ if (true === $input->hasParameterOption(['--help', '-h'])) {
+ if (!$name) {
+ $name = 'help';
+ $input = new Input(['help']);
+ } else {
+ $this->wantHelps = true;
+ }
+ }
+
+ if (!$name) {
+ $name = $this->defaultCommand;
+ $input = new Input([$this->defaultCommand]);
+ }
+
+ $command = $this->find($name);
+
+ $exitCode = $this->doRunCommand($command, $input, $output);
+
+ return $exitCode;
+ }
+
+ /**
+ * 设置输入参数定义
+ * @access public
+ * @param InputDefinition $definition
+ */
+ public function setDefinition(InputDefinition $definition)
+ {
+ $this->definition = $definition;
+ }
+
+ /**
+ * 获取输入参数定义
+ * @access public
+ * @return InputDefinition The InputDefinition instance
+ */
+ public function getDefinition()
+ {
+ return $this->definition;
+ }
+
+ /**
+ * Gets the help message.
+ * @access public
+ * @return string A help message.
+ */
+ public function getHelp()
+ {
+ return $this->getLongVersion();
+ }
+
+ /**
+ * 是否捕获异常
+ * @access public
+ * @param bool $boolean
+ * @api
+ */
+ public function setCatchExceptions($boolean)
+ {
+ $this->catchExceptions = (bool) $boolean;
+ }
+
+ /**
+ * 是否自动退出
+ * @access public
+ * @param bool $boolean
+ * @api
+ */
+ public function setAutoExit($boolean)
+ {
+ $this->autoExit = (bool) $boolean;
+ }
+
+ /**
+ * 获取名称
+ * @access public
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * 设置名称
+ * @access public
+ * @param string $name
+ */
+ public function setName($name)
+ {
+ $this->name = $name;
+ }
+
+ /**
+ * 获取版本
+ * @access public
+ * @return string
+ * @api
+ */
+ public function getVersion()
+ {
+ return $this->version;
+ }
+
+ /**
+ * 设置版本
+ * @access public
+ * @param string $version
+ */
+ public function setVersion($version)
+ {
+ $this->version = $version;
+ }
+
+ /**
+ * 获取完整的版本号
+ * @access public
+ * @return string
+ */
+ public function getLongVersion()
+ {
+ if ('UNKNOWN' !== $this->getName() && 'UNKNOWN' !== $this->getVersion()) {
+ return sprintf('
' . $label . $output . ''; + } + if ($echo) { + echo($output); + return; + } + return $output; + } + + public function inject(Response $response, &$content) + { + $config = $this->config; + $type = isset($config['type']) ? $config['type'] : 'Html'; + + unset($config['type']); + + $trace = Loader::factory($type, '\\think\\debug\\', $config); + + if ($response instanceof Redirect) { + //TODO 记录 + } else { + $output = $trace->output($response, $this->app['log']->getLog()); + if (is_string($output)) { + // trace调试信息注入 + $pos = strripos($content, '