From 92f91c5794c9706cd6ada7e7f87386bd474a14f2 Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: Sat, 2 Jun 2018 19:42:03 +0800
Subject: [PATCH 01/30] =?UTF-8?q?=E5=90=84=E4=B8=AA=E6=A8=A1=E5=BC=8F?=
=?UTF-8?q?=E5=90=AF=E5=8A=A8=E5=88=86=E7=A6=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 13 ++++++++++++
bin/exception/HttpdHandle.php | 25 ++++++++++++++++++++++++
src/application/controller/main/Home.php | 10 ++++++++--
src/runtime/log/2018-06-02.log | 18 +++++++++++++++++
4 files changed, 64 insertions(+), 2 deletions(-)
create mode 100644 bin/exception/HttpdHandle.php
create mode 100644 src/runtime/log/2018-06-02.log
diff --git a/README.md b/README.md
index a7dcc8d..41c02ba 100755
--- a/README.md
+++ b/README.md
@@ -26,6 +26,19 @@ bin\
php httpd start //启动
php httpd stop //停止
+ _ _ _
+| | | | _ ___ | | ___
+| | ___ | | / / / _ \| |_ / _ \
+| | | \ \| |/ / | |_| || _ \ | |_| |
+| |_| |\ V |\ \ | .___/| | | || .___/
+|_____| \ _' \_\ | | | | | || |
+
+[2018年06月01日 15:43:12] Server Name: link-httpd
+[2018年06月01日 15:43:12] PHP Version: 7.1.7
+[2018年06月01日 15:43:12] Swoole Version: 2.1.3
+[2018年06月01日 15:43:12] Listen Address: 127.0.0.1
+[2018年06月01日 15:43:12] Listen Port: 9508
+
第一种方式:使用linkphp提倡的以常驻内存形式启动方式,前端可以配合nginx负载均衡使用
第二种方式:传统的LNMP/LAMP方式启动,则将根目录定义到src/web目录下
diff --git a/bin/exception/HttpdHandle.php b/bin/exception/HttpdHandle.php
new file mode 100644
index 0000000..b8d03c6
--- /dev/null
+++ b/bin/exception/HttpdHandle.php
@@ -0,0 +1,25 @@
+ $error->getFile(),
+ 'line' => $error->getLine(),
+ 'error_type' => $error->getErrorType(),
+ 'message' => $error->getMessage(),
+ 'datetime' => $error->getTimestamp(),
+ 'trace' => $error->getTrace()
+ ];
+ extract($data);
+ include($error->getErrorView());
+ }
+
+}
\ No newline at end of file
diff --git a/src/application/controller/main/Home.php b/src/application/controller/main/Home.php
index 5553975..c1e9ed9 100755
--- a/src/application/controller/main/Home.php
+++ b/src/application/controller/main/Home.php
@@ -18,17 +18,23 @@ class Home extends Controller
public function main()
{
// return 'linkphp start';
- return ['code' => 1, 'msg' => 'linkphp start'];
+// return ['code' => 1, 'msg' => 'linkphp start'];
// Application::view('main/home/main',[
// 'linkphp' => 'linkphp'
// ]);die;
- dump(app()->getContainerInstance());die;
+// dump(app()->getContainerInstance());die;
// dump(Config::get(''));die;
// dump(Db::table('lp_download')->sum('id'));die;
// dump(Db::table('lp_download')->count('id'));die;
// dump(Db::select('select * from lp_download a
//left join lp_down_item b on a.id = b.down_id
//left join lp_user c on a.u_id = c.id where a.id = ?',[1])->get());die;
+ return Db::table('lp_download a')
+ ->join('left join lp_down_item b on a.id = b.down_id')
+// ->join('left join lp_user c on a.u_id = c.id')
+ ->leftJoin('lp_user c on a.u_id = c.id')
+ ->where('a.id>1')
+ ->select();
dump(Db::table('lp_download a')
->join('left join lp_down_item b on a.id = b.down_id')
// ->join('left join lp_user c on a.u_id = c.id')
diff --git a/src/runtime/log/2018-06-02.log b/src/runtime/log/2018-06-02.log
new file mode 100644
index 0000000..48f97df
--- /dev/null
+++ b/src/runtime/log/2018-06-02.log
@@ -0,0 +1,18 @@
+[2018年06月02日T07:45:43+00:00]
+run NOTICE:
+message: Use of undefined constant g - assumed 'g'
+file: /Users/liujun/workspace/php/linkphp/src/application/controller/main/Home.php
+line: 20
+
+[2018年06月02日T07:45:43+00:00]
+run Exception:
+message: 无法加载模块
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php
+line: 30
+
+[2018年06月02日T07:46:15+00:00]
+run Exception:
+message: 无法加载模块
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php
+line: 30
+
From e6e1d7e1680cc95e885ec489367a442fe8328ab4 Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: Tue, 5 Jun 2018 01:13:50 +0800
Subject: [PATCH 02/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0phprpc=E6=94=AF?=
=?UTF-8?q?=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
bin/middleware/BinTest.php | 16 ++++++++
bin/phprpc.php | 41 +++++++++++++++++++++
bin/phprpc/Kernel.php | 34 +++++++++++++++++
conf/app.php | 6 +++
conf/map.php | 3 ++
conf/phprpc.php | 29 +++++++++++++++
conf/view.php | 10 +++++
src/application/controller/main/Home.php | 4 ++
src/application/middleware/AppTest.php | 16 ++++++++
src/application/provider/ErrorProvider.php | 2 +-
src/application/provider/RouterProvider.php | 2 +-
{conf => src}/route.php | 0
12 files changed, 161 insertions(+), 2 deletions(-)
create mode 100644 bin/middleware/BinTest.php
create mode 100644 bin/phprpc.php
create mode 100644 bin/phprpc/Kernel.php
create mode 100644 conf/app.php
create mode 100644 conf/phprpc.php
create mode 100644 conf/view.php
create mode 100644 src/application/middleware/AppTest.php
rename {conf => src}/route.php (100%)
diff --git a/bin/middleware/BinTest.php b/bin/middleware/BinTest.php
new file mode 100644
index 0000000..fdbe2cd
--- /dev/null
+++ b/bin/middleware/BinTest.php
@@ -0,0 +1,16 @@
+
+// +----------------------------------------------------------------------
+// | 命令行入口文件
+// +----------------------------------------------------------------------
+
+//目录基础常量的定义
+define('ROOT_PATH', dirname(__DIR__) . '/');
+//加载自动加载方法
+require(ROOT_PATH . 'vendor/linkphp/loader/src/Loader.php');
+//加载LinkPHP框架启动文件
+$app = require_once(ROOT_PATH . 'src/bootstrap.php');
+
+$app->event(
+ 'error',
+ \app\provider\ErrorProvider::class
+);
+
+$app->event(
+ 'console',
+ \bin\provider\DaemonProvider::class
+);
+
+$app->event(
+ 'router',
+ \app\provider\RouterProvider::class
+);
+
+$kernel = $app->make(bin\http\Kernel::class);
+
+$kernel->use(LOAD_PATH . 'phprpc.php');
+//这是命令行执行入口文件
\ No newline at end of file
diff --git a/bin/phprpc/Kernel.php b/bin/phprpc/Kernel.php
new file mode 100644
index 0000000..ca47582
--- /dev/null
+++ b/bin/phprpc/Kernel.php
@@ -0,0 +1,34 @@
+_app->event('error');
+ // TODO: Implement use() method.
+ $this->_app->make(\linkphp\console\Console::class)
+ ->setDaemon(true)
+ ->setDaemonConfig($config);
+ /**
+ * 设置应用启动中间件并监听执行
+ */
+ app()->hook('appMiddleware');
+ $this->_app->event('console');
+ // TODO: Implement response() method.
+ return $this;
+ }
+
+ public function complete()
+ {
+ $httpRequest = $this->_app->make(\linkphp\http\HttpRequest::class);
+ return $httpRequest->setData($this->data)->send(true);
+ // TODO: Implement complete() method.
+ }
+
+}
\ No newline at end of file
diff --git a/conf/app.php b/conf/app.php
new file mode 100644
index 0000000..bd96677
--- /dev/null
+++ b/conf/app.php
@@ -0,0 +1,6 @@
+ true, //是否打开调试功能
+];
\ No newline at end of file
diff --git a/conf/map.php b/conf/map.php
index a4337a3..e6e8a92 100755
--- a/conf/map.php
+++ b/conf/map.php
@@ -24,6 +24,9 @@
'linkphp\\' => [
ROOT_PATH . 'vendor/linkphp/framework/src/linkphp'
],
+ 'phprpc\\' => [
+ ROOT_PATH . 'vendor/phprpc/src'
+ ],
],
//psr0命名空间
'autoload_namespace_psr0' => [
diff --git a/conf/phprpc.php b/conf/phprpc.php
new file mode 100644
index 0000000..2c4d616
--- /dev/null
+++ b/conf/phprpc.php
@@ -0,0 +1,29 @@
+ 'phprpc\\server\\PhpRpcServer',
+ 'server' => [
+ // 类路径
+ 'class' => 'phprpc\swoole\PhpRpcServer',
+ // 主机
+ 'host' => '127.0.0.1',
+ // 端口
+ 'port' => 8868,
+ // 运行时的各项参数:https://wiki.swoole.com/wiki/page/274.html
+ 'setting' => [
+ // 连接处理线程数
+ 'reactor_num' => 1, //reactor thread num
+ 'worker_num' => 1, //worker process num
+ 'backlog' => 128, //listen backlog
+ 'max_request' => 1,
+ 'dispatch_mode' => 1,
+ // PID 文件
+ 'pid_file' => RUNTIME_PATH . 'run/phprpc.pid',
+ // 日志文件路径
+ 'log_file' => RUNTIME_PATH . 'tmp/phprpc.log',
+ // 子进程运行用户
+ /* 'user' => 'www', */
+ ]
+ ]
+];
\ No newline at end of file
diff --git a/conf/view.php b/conf/view.php
new file mode 100644
index 0000000..083e76d
--- /dev/null
+++ b/conf/view.php
@@ -0,0 +1,10 @@
+ 'default',
+ 'default_temp_type' => '1', //默认模板引擎,0=>LinkPHP默认原生PHP,1=>Smarty模板引擎,2=>Links模板引擎
+ 'default_theme_suffix' => '.html', //默认视图文件后缀
+ 'temp_cache' => false, //是否开启模板缓存
+ 'set_left_limiter' => '{', //设置模板引擎左侧解析标签
+ 'set_right_limiter' => '}', //设置模板引擎右侧解析标签
+];
\ No newline at end of file
diff --git a/src/application/controller/main/Home.php b/src/application/controller/main/Home.php
index c1e9ed9..0896cea 100755
--- a/src/application/controller/main/Home.php
+++ b/src/application/controller/main/Home.php
@@ -7,6 +7,8 @@
use Db;
use Console;
use Config;
+use phprpc\PhpRpcClient;
+
class Home extends Controller
{
@@ -17,6 +19,8 @@ class Home extends Controller
public function main()
{
+ dump(new PhpRpcClient());die;
+ dump(Config::get('app.app_debug'));
// return 'linkphp start';
// return ['code' => 1, 'msg' => 'linkphp start'];
// Application::view('main/home/main',[
diff --git a/src/application/middleware/AppTest.php b/src/application/middleware/AppTest.php
new file mode 100644
index 0000000..24cbdad
--- /dev/null
+++ b/src/application/middleware/AppTest.php
@@ -0,0 +1,16 @@
+setErrorView(EXTRA_PATH . 'tpl/error.html')
->setDebug(true)
- ->setErrHandle('app\\exception\\exception\\View')
+ ->setErrHandle('app\\exception\\Handle')
)->complete();
app()->containerInstance(
'linkphp\error\Error',
diff --git a/src/application/provider/RouterProvider.php b/src/application/provider/RouterProvider.php
index f3cc7c0..f1e8818 100644
--- a/src/application/provider/RouterProvider.php
+++ b/src/application/provider/RouterProvider.php
@@ -14,7 +14,7 @@ public function update(EventDefinition $definition)
{
$router = Application::make(\linkphp\router\Router::class);
$router->init()
- ->import(require LOAD_PATH . 'route.php')
+ ->import(require ROOT_PATH . 'src/route.php')
->setUrlModel('1')
->setDefaultPlatform('main')
->setDefaultController('Home')
diff --git a/conf/route.php b/src/route.php
similarity index 100%
rename from conf/route.php
rename to src/route.php
From d1ed6bae52ae0be7386cc3ee76f62b5acd112098 Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: Tue, 5 Jun 2018 19:20:38 +0800
Subject: [PATCH 03/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0phprpc=E6=94=AF?=
=?UTF-8?q?=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
bin/httpd | 2 +-
bin/{phprpc.php => phprpc} | 2 +-
bin/{phprpc => rpc}/Kernel.php | 0
composer.json | 3 ++-
conf/{ => bin}/httpd.php | 0
conf/{ => bin}/phprpc.php | 5 +++++
conf/rpc/customer/providers.php | 7 +++++++
conf/rpc/customer/services.php | 7 +++++++
conf/rpc/provider/providers.php | 7 +++++++
conf/rpc/provider/services.php | 7 +++++++
10 files changed, 37 insertions(+), 3 deletions(-)
rename bin/{phprpc.php => phprpc} (96%)
rename bin/{phprpc => rpc}/Kernel.php (100%)
rename conf/{ => bin}/httpd.php (100%)
rename conf/{ => bin}/phprpc.php (81%)
create mode 100644 conf/rpc/customer/providers.php
create mode 100644 conf/rpc/customer/services.php
create mode 100644 conf/rpc/provider/providers.php
create mode 100644 conf/rpc/provider/services.php
diff --git a/bin/httpd b/bin/httpd
index b727d08..d3a219e 100755
--- a/bin/httpd
+++ b/bin/httpd
@@ -37,5 +37,5 @@ $app->event(
$kernel = $app->make(bin\http\Kernel::class);
-$kernel->use(LOAD_PATH . 'httpd.php');
+$kernel->use(LOAD_PATH . 'bin/httpd.php');
//这是命令行执行入口文件
\ No newline at end of file
diff --git a/bin/phprpc.php b/bin/phprpc
similarity index 96%
rename from bin/phprpc.php
rename to bin/phprpc
index 7f76830..f3a4620 100644
--- a/bin/phprpc.php
+++ b/bin/phprpc
@@ -37,5 +37,5 @@
$kernel = $app->make(bin\http\Kernel::class);
-$kernel->use(LOAD_PATH . 'phprpc.php');
+$kernel->use(LOAD_PATH . 'bin/phprpc.php');
//这是命令行执行入口文件
\ No newline at end of file
diff --git a/bin/phprpc/Kernel.php b/bin/rpc/Kernel.php
similarity index 100%
rename from bin/phprpc/Kernel.php
rename to bin/rpc/Kernel.php
diff --git a/composer.json b/composer.json
index 5bb1400..4cf130c 100755
--- a/composer.json
+++ b/composer.json
@@ -43,6 +43,7 @@
"liugene/links":"dev-master",
"linkphp/loader":"dev-master",
"linkphp/process":"dev-master",
- "linkphp/swoole":"dev-master"
+ "linkphp/swoole":"dev-master",
+ "linkphp/phprpc":"dev-master"
}
}
diff --git a/conf/httpd.php b/conf/bin/httpd.php
similarity index 100%
rename from conf/httpd.php
rename to conf/bin/httpd.php
diff --git a/conf/phprpc.php b/conf/bin/phprpc.php
similarity index 81%
rename from conf/phprpc.php
rename to conf/bin/phprpc.php
index 2c4d616..99f7b5c 100644
--- a/conf/phprpc.php
+++ b/conf/bin/phprpc.php
@@ -17,6 +17,11 @@
'worker_num' => 1, //worker process num
'backlog' => 128, //listen backlog
'max_request' => 1,
+ 'open_length_check' => true,
+ 'package_length_type' => 'N',
+ 'package_body_offset' => 0,
+ 'package_length_offset' => 4,
+ 'package_max_length' => 2000000,
'dispatch_mode' => 1,
// PID 文件
'pid_file' => RUNTIME_PATH . 'run/phprpc.pid',
diff --git a/conf/rpc/customer/providers.php b/conf/rpc/customer/providers.php
new file mode 100644
index 0000000..2981f11
--- /dev/null
+++ b/conf/rpc/customer/providers.php
@@ -0,0 +1,7 @@
+
Date: Tue, 5 Jun 2018 19:43:40 +0800
Subject: [PATCH 04/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0phprpc=E6=94=AF?=
=?UTF-8?q?=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/README.md b/README.md
index 41c02ba..126434c 100755
--- a/README.md
+++ b/README.md
@@ -65,6 +65,28 @@ server {
```
+## **PhpRpc服务端启动(常驻内存模式)**
+
+```php
+
+php phprpc start //启动
+php phprpc stop //停止
+
+ _
+ ___ | | ___ ___ ___ ___
+/ _ \| |_ / _ \ / _ \ / _ \ / __ \
+| |_| || _ \ | |_| | | |_| | | |_| | | |
+| .___/| | | || .___/ | .\ \. | .___/ \ .__
+| | | | | || | | | \ \| | \___/
+
+[2018年06月01日 15:43:12] Server Name: phprpc
+[2018年06月01日 15:43:12] PHP Version: 7.1.7
+[2018年06月01日 15:43:12] Swoole Version: 2.1.3
+[2018年06月01日 15:43:12] Listen Address: 127.0.0.1
+[2018年06月01日 15:43:12] Listen Port: 9518
+
+```
+
## **使用交流**
LinkPHP开发动态:www.linkphp.cn
From 7a1d7a0aa0fb56e4a98f377cf9ea9dc19631ee58 Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: Wed, 6 Jun 2018 21:03:30 +0800
Subject: [PATCH 05/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B3=A8=E5=86=8C?=
=?UTF-8?q?=E4=B8=AD=E5=BF=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 22 ++++++++++++++++++
bin/phprpc_center | 41 +++++++++++++++++++++++++++++++++
composer.json | 2 +-
conf/bin/phprpc_center.php | 34 +++++++++++++++++++++++++++
conf/rpc/customer/center.php | 3 +++
conf/rpc/customer/providers.php | 18 ++++++++++-----
conf/rpc/customer/services.php | 12 +++++-----
conf/rpc/provider/center.php | 3 +++
conf/rpc/provider/providers.php | 26 ++++++++++++++++-----
9 files changed, 142 insertions(+), 19 deletions(-)
create mode 100644 bin/phprpc_center
create mode 100644 conf/bin/phprpc_center.php
create mode 100644 conf/rpc/customer/center.php
create mode 100644 conf/rpc/provider/center.php
diff --git a/README.md b/README.md
index 126434c..59e8ce2 100755
--- a/README.md
+++ b/README.md
@@ -87,6 +87,28 @@ php phprpc stop //停止
```
+## **PhpRpc注册中心启动(常驻内存模式)**
+
+```php
+
+php phprpc_center start //启动
+php phprpc_center stop //停止
+
+ _
+ ___ | | ___ ___ ___ ___
+/ _ \| |_ / _ \ / _ \ / _ \ / __ \
+| |_| || _ \ | |_| | | |_| | | |_| | | |
+| .___/| | | || .___/ | .\ \. | .___/ \ .__
+| | | | | || | | | \ \| | \___/
+
+[2018年06月01日 15:43:12] Server Name: phprpc-center
+[2018年06月01日 15:43:12] PHP Version: 7.1.7
+[2018年06月01日 15:43:12] Swoole Version: 2.1.3
+[2018年06月01日 15:43:12] Listen Address: 127.0.0.1
+[2018年06月01日 15:43:12] Listen Port: 9520
+
+```
+
## **使用交流**
LinkPHP开发动态:www.linkphp.cn
diff --git a/bin/phprpc_center b/bin/phprpc_center
new file mode 100644
index 0000000..8b2e7f2
--- /dev/null
+++ b/bin/phprpc_center
@@ -0,0 +1,41 @@
+#!/usr/bin/env php
+
+// +----------------------------------------------------------------------
+// | 命令行入口文件
+// +----------------------------------------------------------------------
+
+//目录基础常量的定义
+define('ROOT_PATH', dirname(__DIR__) . '/');
+//加载自动加载方法
+require(ROOT_PATH . 'vendor/linkphp/loader/src/Loader.php');
+//加载LinkPHP框架启动文件
+$app = require_once(ROOT_PATH . 'src/bootstrap.php');
+
+$app->event(
+ 'error',
+ \app\provider\ErrorProvider::class
+);
+
+$app->event(
+ 'console',
+ \bin\provider\DaemonProvider::class
+);
+
+$app->event(
+ 'router',
+ \app\provider\RouterProvider::class
+);
+
+$kernel = $app->make(bin\http\Kernel::class);
+
+$kernel->use(LOAD_PATH . 'bin/phprpc_center.php');
+//这是命令行执行入口文件
\ No newline at end of file
diff --git a/composer.json b/composer.json
index 4cf130c..2c82f45 100755
--- a/composer.json
+++ b/composer.json
@@ -44,6 +44,6 @@
"linkphp/loader":"dev-master",
"linkphp/process":"dev-master",
"linkphp/swoole":"dev-master",
- "linkphp/phprpc":"dev-master"
+ "phprpc/phprpc":"dev-master"
}
}
diff --git a/conf/bin/phprpc_center.php b/conf/bin/phprpc_center.php
new file mode 100644
index 0000000..1d1db9f
--- /dev/null
+++ b/conf/bin/phprpc_center.php
@@ -0,0 +1,34 @@
+ 'phprpc\\server\\PhpRpcCenterServer',
+ 'server' => [
+ // 类路径
+ 'class' => 'phprpc\swoole\PhpRpcCenterServer',
+ // 主机
+ 'host' => '127.0.0.1',
+ // 端口
+ 'port' => 8869,
+ // 运行时的各项参数:https://wiki.swoole.com/wiki/page/274.html
+ 'setting' => [
+ // 连接处理线程数
+ 'reactor_num' => 1, //reactor thread num
+ 'worker_num' => 1, //worker process num
+ 'backlog' => 128, //listen backlog
+ 'max_request' => 1,
+ 'open_length_check' => true,
+ 'package_length_type' => 'N',
+ 'package_body_offset' => 0,
+ 'package_length_offset' => 4,
+ 'package_max_length' => 2000000,
+ 'dispatch_mode' => 1,
+ // PID 文件
+ 'pid_file' => RUNTIME_PATH . 'run/phprpc_center.pid',
+ // 日志文件路径
+ 'log_file' => RUNTIME_PATH . 'tmp/phprpc_center.log',
+ // 子进程运行用户
+ /* 'user' => 'www', */
+ ]
+ ]
+];
\ No newline at end of file
diff --git a/conf/rpc/customer/center.php b/conf/rpc/customer/center.php
new file mode 100644
index 0000000..b993871
--- /dev/null
+++ b/conf/rpc/customer/center.php
@@ -0,0 +1,3 @@
+ 'msm-center', //服务名称
+ 'ip' => "0.0.0.0",
+ 'port' => 9600,
+ 'notify_port' => 9601,
+ 'services' => [
+ 'MessageService' => [
+
+ ],
+ ]
+];
\ No newline at end of file
diff --git a/conf/rpc/customer/services.php b/conf/rpc/customer/services.php
index 2981f11..48c7b38 100644
--- a/conf/rpc/customer/services.php
+++ b/conf/rpc/customer/services.php
@@ -1,7 +1,7 @@
'user-center', //服务名称
+ 'ip' => "0.0.0.0",
+ 'port' => 9512,
+ 'services' => [
+ 'UserService' => [
+ // 其他业务参数
+// 'version' => 'xxx',
+// 'group' => 'xxx',
+// ...
+ ],
+ 'StudentUserService' => [
+ // 其他业务参数
+// 'version' => 'xxx',
+// 'group' => 'xxx',
+// ...
+ ],
+ ]
+];
\ No newline at end of file
From faf522bf279b3d88cb5d8fa425d9d20dd272cbc6 Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: Sat, 9 Jun 2018 17:21:12 +0800
Subject: [PATCH 06/30] =?UTF-8?q?=E8=B7=AF=E7=94=B1=E9=87=8D=E6=9E=84?=
=?UTF-8?q?=E6=94=AF=E6=8C=81=E6=9B=B4=E5=A4=9A=E7=9A=84=E4=BD=BF=E7=94=A8?=
=?UTF-8?q?=E5=9C=BA=E6=99=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 8 +++----
bin/exception/HttpdHandle.php | 1 +
bin/httpd | 2 +-
bin/phprpc | 2 +-
bin/provider/ErrorProvider.php | 3 ++-
conf/bin/httpd.php | 4 +++-
conf/bin/phprpc_center.php | 2 ++
src/addons/test/PluginTest.php | 29 ++++++++++++++++++++++++
src/addons/test/addons.php | 5 ++++
src/application/Kernel.php | 11 +++++----
src/application/controller/main/Home.php | 28 +++++++++++++++++++----
src/route.php | 4 +++-
12 files changed, 80 insertions(+), 19 deletions(-)
create mode 100644 src/addons/test/PluginTest.php
create mode 100644 src/addons/test/addons.php
diff --git a/README.md b/README.md
index 59e8ce2..03989a7 100755
--- a/README.md
+++ b/README.md
@@ -495,12 +495,10 @@ Application::middleware('beginMiddleware',function (Closure $v) {
use linkphp\Application;
//路由使用
-//在configure目录下route.php路由配置文件中进行配置使用
+//在src目录下route.php路由配置文件中进行配置使用
return [
- '/main/home/main' => function(\linkphp\router\Router $router){
- return '/main/home/main';
- },
+ 'index/:id' => '/main/home/main',
];
//键名为当前请求的路径
@@ -509,7 +507,7 @@ return [
//闭包使用方法
-Application::router('index/getUser',function(){
+Router::get('index/:id',function(){
return 1;
});
diff --git a/bin/exception/HttpdHandle.php b/bin/exception/HttpdHandle.php
index b8d03c6..53231ef 100644
--- a/bin/exception/HttpdHandle.php
+++ b/bin/exception/HttpdHandle.php
@@ -19,6 +19,7 @@ public function handle(Error $error)
'trace' => $error->getTrace()
];
extract($data);
+// app()->get(\bin\http\Kernel::class)->setData();
include($error->getErrorView());
}
diff --git a/bin/httpd b/bin/httpd
index d3a219e..4f59ad2 100755
--- a/bin/httpd
+++ b/bin/httpd
@@ -22,7 +22,7 @@ $app = require_once(ROOT_PATH . 'src/bootstrap.php');
$app->event(
'error',
- \app\provider\ErrorProvider::class
+ \bin\provider\ErrorProvider::class
);
$app->event(
diff --git a/bin/phprpc b/bin/phprpc
index f3a4620..d6ecd4e 100644
--- a/bin/phprpc
+++ b/bin/phprpc
@@ -22,7 +22,7 @@ $app = require_once(ROOT_PATH . 'src/bootstrap.php');
$app->event(
'error',
- \app\provider\ErrorProvider::class
+ \bin\provider\ErrorProvider::class
);
$app->event(
diff --git a/bin/provider/ErrorProvider.php b/bin/provider/ErrorProvider.php
index 6159a51..1e9b060 100644
--- a/bin/provider/ErrorProvider.php
+++ b/bin/provider/ErrorProvider.php
@@ -12,8 +12,9 @@ public function update(EventDefinition $definition)
{
Error::register(
Error::instance()
+ ->setErrorView(EXTRA_PATH . 'tpl/error.html')
->setDebug(true)
- ->setErrHandle('linkphp\\error\\exception\\Console')
+ ->setErrHandle('bin\\exception\\HttpdHandle')
)->complete();
return $definition;
// TODO: Implement update() method.
diff --git a/conf/bin/httpd.php b/conf/bin/httpd.php
index 9639dae..2bd681d 100644
--- a/conf/bin/httpd.php
+++ b/conf/bin/httpd.php
@@ -3,9 +3,11 @@
return [
// HttpServer
'daemon' => 'linkphp\\console\\daemon\\HttpServer',
+ 'enable_static_handler' => true,
+ 'document_root' => ROOT_PATH . 'src/web',
'server' => [
// 类路径
- 'class' => 'linkphp\swoole\HttpServer',
+ 'class' => 'linkphp\swoole\http\HttpdServer',
// 主机
'host' => '127.0.0.1',
// 端口
diff --git a/conf/bin/phprpc_center.php b/conf/bin/phprpc_center.php
index 1d1db9f..2b115b6 100644
--- a/conf/bin/phprpc_center.php
+++ b/conf/bin/phprpc_center.php
@@ -3,6 +3,8 @@
return [
// HttpServer
'daemon' => 'phprpc\\server\\PhpRpcCenterServer',
+ 'enable_static_handler' => true,
+ 'document_root' => VENDOR_PATH . 'phprpc/src/center/web',
'server' => [
// 类路径
'class' => 'phprpc\swoole\PhpRpcCenterServer',
diff --git a/src/addons/test/PluginTest.php b/src/addons/test/PluginTest.php
new file mode 100644
index 0000000..1397281
--- /dev/null
+++ b/src/addons/test/PluginTest.php
@@ -0,0 +1,29 @@
+ 'Test',
+ 'title' => '测试插件',
+ 'description' => '用于linkphp的插件扩展演示',
+ 'status' => 1,
+ 'author' => 'byron liugene',
+ 'version' => '0.1'
+ ];
+
+ public function install()
+ {
+ // TODO: Implement install() method.
+ }
+
+ public function uninstall()
+ {
+ // TODO: Implement uninstall() method.
+ }
+
+}
\ No newline at end of file
diff --git a/src/addons/test/addons.php b/src/addons/test/addons.php
new file mode 100644
index 0000000..25058db
--- /dev/null
+++ b/src/addons/test/addons.php
@@ -0,0 +1,5 @@
+_app->hook('appMiddleware');
$this->_app->get(\linkphp\router\Router::class)
->setPath(
- $this->_app->input('server.PATH_INFO')
- )->setGetParam($this->_app->input('get.'))
+ $this->_app->input('server.PATH_INFO'))
+ ->setGetParam(
+ $this->_app->input('get.'))
+ ->setMethod(
+ $this->_request->getRequestMethod()
+ )
->parser()
->dispatch();
return $this;
@@ -30,9 +34,8 @@ public function use($config = null)
public function complete()
{
$this->_app->hook('destructMiddleware');
- $httpRequest = $this->_app->make('linkphp\http\HttpRequest');
- $httpRequest->setData($this->data)->send();
+ $this->_request->setData($this->data)->send();
}
}
\ No newline at end of file
diff --git a/src/application/controller/main/Home.php b/src/application/controller/main/Home.php
index 0896cea..7a32d2f 100755
--- a/src/application/controller/main/Home.php
+++ b/src/application/controller/main/Home.php
@@ -7,7 +7,9 @@
use Db;
use Console;
use Config;
+use linkphp\Exception;
use phprpc\PhpRpcClient;
+use Router;
class Home extends Controller
{
@@ -17,15 +19,31 @@ class Home extends Controller
// dump($controller);
// }
+ public function main1()
+ {
+ return Application::view('main/home/main',[
+ 'linkphp' => 'linkphp'
+ ]);
+ }
+
public function main()
{
- dump(new PhpRpcClient());die;
- dump(Config::get('app.app_debug'));
+ dump(app()->input('get.'));die;
+ Router::get('/index/index/index', '/index/api/index');
+ Router::post('/index/index/index', '/index/api/index');
+ Router::delete('/index/index/index', '/index/api/index');
+ Router::patch('/index/index/index', '/index/api/index');
+ Router::put('/index/index/index', '/index/api/index');
+// throw new Exception('test');
+// dump(new PhpRpcClient());die;
+// dump(Config::get('app.app_debug'));
// return 'linkphp start';
// return ['code' => 1, 'msg' => 'linkphp start'];
-// Application::view('main/home/main',[
-// 'linkphp' => 'linkphp'
-// ]);die;
+// $filename = ROOT_PATH . 'src/resource/view/main/home/main.html';
+// return file_get_contents($filename);
+ Application::view('main/home/main',[
+ 'linkphp' => 'linkphp'
+ ]);
// dump(app()->getContainerInstance());die;
// dump(Config::get(''));die;
// dump(Db::table('lp_download')->sum('id'));die;
diff --git a/src/route.php b/src/route.php
index a5aeafa..7eb2e82 100755
--- a/src/route.php
+++ b/src/route.php
@@ -1,5 +1,7 @@
[],
+// ':id/:test' => ['/main/home/main',['method' => 'get']],
];
\ No newline at end of file
From 9aa40fbaf0abadca3f72cf9f3dc074539729e052 Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: 2018年6月10日 11:57:04 +0800
Subject: [PATCH 07/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=91=BD=E5=90=8D?=
=?UTF-8?q?=E7=A9=BA=E9=97=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
bin/phprpc_center.php | 7 +++++++
1 file changed, 7 insertions(+)
create mode 100644 bin/phprpc_center.php
diff --git a/bin/phprpc_center.php b/bin/phprpc_center.php
new file mode 100644
index 0000000..3b1aed8
--- /dev/null
+++ b/bin/phprpc_center.php
@@ -0,0 +1,7 @@
+
Date: 2018年6月10日 12:42:17 +0800
Subject: [PATCH 08/30] =?UTF-8?q?=E8=B7=AF=E7=94=B1=E9=87=8D=E6=9E=84?=
=?UTF-8?q?=E6=94=AF=E6=8C=81=E6=9B=B4=E5=A4=9A=E7=9A=84=E4=BD=BF=E7=94=A8?=
=?UTF-8?q?=E5=9C=BA=E6=99=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 20 +++++++++----------
bin/command/Test.php | 2 +-
bin/command/WebSocket.php | 2 +-
bin/console/Kernel.php | 2 +-
bin/http/Kernel.php | 2 +-
bin/phprpc_center.php | 7 -------
bin/provider/ConsoleProvider.php | 4 ++--
bin/provider/DaemonProvider.php | 4 ++--
bin/rpc/Kernel.php | 2 +-
conf/map.php | 22 ++++++++++-----------
src/application/Kernel.php | 3 ++-
src/application/command/Test.php | 2 +-
src/application/controller/main/Home.php | 6 +++---
src/application/middleware/AppTest.php | 5 ++---
src/application/provider/RouterProvider.php | 4 +---
src/bootstrap.php | 4 ++--
src/route.php | 1 +
17 files changed, 42 insertions(+), 50 deletions(-)
delete mode 100644 bin/phprpc_center.php
diff --git a/README.md b/README.md
index 03989a7..586729d 100755
--- a/README.md
+++ b/README.md
@@ -136,7 +136,7 @@ LinkPHP开发动态:www.linkphp.cn
```php
-use linkphp\Application;
+use framework\Application;
//接收两个参数,第一个参数为标签,第二个参数可以一组类的数组也可以为类名
@@ -191,7 +191,7 @@ return [
```php
use linkphp\db\Db;
-use linkphp\Application;
+use framework\Application;
//助手函数链式操作方法
db()->table('')->where('')->select();
@@ -258,7 +258,7 @@ return [
#### restful使用说明
```php
-use linkphp\Application;
+use framework\Application;
//使用linkphp开发api应用
@@ -301,7 +301,7 @@ request()->isPatch();
namespace app\controller\main;
use linkphp\http\HttpRequest;
-use linkphp\Application;
+use framework\Application;
class Home
{
@@ -356,7 +356,7 @@ Application::bind(
```php
-use linkphp\Application;
+use framework\Application;
//获取缓存
cache('test');
@@ -373,7 +373,7 @@ Application::cache('test','test');
```php
-use linkphp\Application;
+use framework\Application;
//input参数接收操作
@@ -426,7 +426,7 @@ request()->input('get.',function($value){
```php
-use linkphp\Application;
+use framework\Application;
//中间件使用
//框架中实现了6个中间件
@@ -492,7 +492,7 @@ Application::middleware('beginMiddleware',function (Closure $v) {
```php
-use linkphp\Application;
+use framework\Application;
//路由使用
//在src目录下route.php路由配置文件中进行配置使用
@@ -517,7 +517,7 @@ Router::get('index/:id',function(){
```php
-use linkphp\Application;
+use framework\Application;
//view层使用
Application::view('main/home/main',[
@@ -551,7 +551,7 @@ php cli +命令名
namespace app\command\main;
-use linkphp\Application;
+use framework\Application;
use linkphp\console\Command;
class Test extends Command
diff --git a/bin/command/Test.php b/bin/command/Test.php
index 589882e..e2116f7 100644
--- a/bin/command/Test.php
+++ b/bin/command/Test.php
@@ -2,7 +2,7 @@
namespace bin\command;
-use linkphp\Application;
+use framework\Application;
use linkphp\console\Command;
class Test extends Command
diff --git a/bin/command/WebSocket.php b/bin/command/WebSocket.php
index 9c7d95a..18b3819 100644
--- a/bin/command/WebSocket.php
+++ b/bin/command/WebSocket.php
@@ -4,7 +4,7 @@
use linkphp\process\Process;
use swoole_websocket_server;
-use linkphp\Application;
+use framework\Application;
use linkphp\console\Command;
use linkphp\process\drives\Swoole;
diff --git a/bin/console/Kernel.php b/bin/console/Kernel.php
index 3b2ecdc..07cb837 100644
--- a/bin/console/Kernel.php
+++ b/bin/console/Kernel.php
@@ -2,7 +2,7 @@
namespace bin\console;
-use linkphp\Kernel as ConsoleKernel;
+use framework\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
diff --git a/bin/http/Kernel.php b/bin/http/Kernel.php
index 0babe7f..19cea57 100644
--- a/bin/http/Kernel.php
+++ b/bin/http/Kernel.php
@@ -2,7 +2,7 @@
namespace bin\http;
-use linkphp\Kernel as ConsoleKernel;
+use framework\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
diff --git a/bin/phprpc_center.php b/bin/phprpc_center.php
deleted file mode 100644
index 3b1aed8..0000000
--- a/bin/phprpc_center.php
+++ /dev/null
@@ -1,7 +0,0 @@
- [
ROOT_PATH . 'bin'
],
- 'linkphp\\' => [
- ROOT_PATH . 'vendor/linkphp/framework/src/linkphp'
+ 'framework\\' => [
+ ROOT_PATH . 'vendor/linkphp/framework/src'
],
'phprpc\\' => [
ROOT_PATH . 'vendor/phprpc/src'
@@ -41,14 +41,14 @@
],
'class_autoload_map' => [
//'类名' => '类文件地址'
- 'Db' => ROOT_PATH . 'vendor/linkphp/framework/src/linkphp/facade/Db.php',
- 'Console' => ROOT_PATH . 'vendor/linkphp/framework/src/linkphp/facade/Console.php',
- 'Component' => ROOT_PATH . 'vendor/linkphp/framework/src/linkphp/facade/Component.php',
- 'Definition' => ROOT_PATH . 'vendor/linkphp/framework/src/linkphp/facade/Definition.php',
- 'Event' => ROOT_PATH . 'vendor/linkphp/framework/src/linkphp/facade/Event.php',
- 'HttpRequest' => ROOT_PATH . 'vendor/linkphp/framework/src/linkphp/facade/HttpRequest.php',
- 'Config' => ROOT_PATH . 'vendor/linkphp/framework/src/linkphp/facade/Config.php',
- 'Router' => ROOT_PATH . 'vendor/linkphp/framework/src/linkphp/facade/Router.php',
- 'Error' => ROOT_PATH . 'vendor/linkphp/framework/src/linkphp/facade/Error.php',
+ 'Db' => ROOT_PATH . 'vendor/linkphp/framework/src/facade/Db.php',
+ 'Console' => ROOT_PATH . 'vendor/linkphp/framework/src/facade/Console.php',
+ 'Component' => ROOT_PATH . 'vendor/linkphp/framework/src/facade/Component.php',
+ 'Definition' => ROOT_PATH . 'vendor/linkphp/framework/src/facade/Definition.php',
+ 'Event' => ROOT_PATH . 'vendor/linkphp/framework/src/facade/Event.php',
+ 'HttpRequest' => ROOT_PATH . 'vendor/linkphp/framework/src/facade/HttpRequest.php',
+ 'Config' => ROOT_PATH . 'vendor/linkphp/framework/src/facade/Config.php',
+ 'Router' => ROOT_PATH . 'vendor/linkphp/framework/src/facade/Router.php',
+ 'Error' => ROOT_PATH . 'vendor/linkphp/framework/src/facade/Error.php',
],
];
\ No newline at end of file
diff --git a/src/application/Kernel.php b/src/application/Kernel.php
index 0772229..3e3d00b 100644
--- a/src/application/Kernel.php
+++ b/src/application/Kernel.php
@@ -2,7 +2,7 @@
namespace app;
-use linkphp\Kernel as RouterKernel;
+use framework\Kernel as RouterKernel;
class Kernel extends RouterKernel
{
@@ -17,6 +17,7 @@ public function use($config = null)
/**
* 设置应用启动中间件并监听执行
*/
+
$this->_app->hook('appMiddleware');
$this->_app->get(\linkphp\router\Router::class)
->setPath(
diff --git a/src/application/command/Test.php b/src/application/command/Test.php
index a77a362..582b22d 100644
--- a/src/application/command/Test.php
+++ b/src/application/command/Test.php
@@ -2,7 +2,7 @@
namespace app\command;
-use linkphp\Application;
+use framework\Application;
use linkphp\console\Command;
class Test extends Command
diff --git a/src/application/controller/main/Home.php b/src/application/controller/main/Home.php
index 7a32d2f..eb0aa40 100755
--- a/src/application/controller/main/Home.php
+++ b/src/application/controller/main/Home.php
@@ -1,13 +1,13 @@
setPlatform('')
->setController('')
->setAction('')
- ->setDir(APPLICATION_PATH)
->setNamespace(APP_NAMESPACE_NAME);
return $definition;
// TODO: Implement update() method.
diff --git a/src/bootstrap.php b/src/bootstrap.php
index 3223538..3442086 100644
--- a/src/bootstrap.php
+++ b/src/bootstrap.php
@@ -24,7 +24,7 @@
->setExt('.php')
)->complete();
-$app = new \linkphp\Application();
+$app = new \framework\Application();
$app->event(
'system',
@@ -41,7 +41,7 @@
);
$app->containerInstance(
- \linkphp\Application::class,
+ \framework\Application::class,
$app
);
diff --git a/src/route.php b/src/route.php
index 7eb2e82..a444738 100755
--- a/src/route.php
+++ b/src/route.php
@@ -1,6 +1,7 @@
['/main/home/main',['method' => 'get']],
From c0b57882bb336a7fd0e56edbe319bd5addb305fe Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: 2018年6月12日 01:12:55 +0800
Subject: [PATCH 09/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=AA=8C=E8=AF=81?=
=?UTF-8?q?=E5=99=A8=E6=94=AF=E6=8C=81=EF=BC=8Ccookie=E6=93=8D=E4=BD=9C,?=
=?UTF-8?q?=E5=AE=8C=E5=96=84session=E5=AD=98=E5=82=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 17 +++++++++++++++++
bin/provider/ConsoleProvider.php | 4 ----
bin/provider/DaemonProvider.php | 4 ----
composer.json | 6 +++---
conf/map.php | 5 +++++
conf/session.php | 23 +++++++++++++++++++++++
conf/view.php | 5 ++++-
src/application/controller/main/Home.php | 16 ++++++++++++++++
8 files changed, 68 insertions(+), 12 deletions(-)
create mode 100644 conf/session.php
diff --git a/README.md b/README.md
index 586729d..7ec44ac 100755
--- a/README.md
+++ b/README.md
@@ -534,6 +534,23 @@ view('main/home/main',['linkphp' => 'linkphp']);
```
+#### 验证器使用
+
+```php
+
+Validator::data('w')
+ ->withValidator('url', function ($validator, $input){
+ $validator->addValidator($input,['rule' => [
+ 'class' => 'url', 'param' => []
+ ], 'errorMessage' => '非法URL地址'
+ ]);
+ });
+ if(!Validator::check()){
+ dump(Validator::geterror());die;
+ }
+
+```
+
#### 命令行使用说明
```php
diff --git a/bin/provider/ConsoleProvider.php b/bin/provider/ConsoleProvider.php
index 5fcfb2f..19e1b1a 100644
--- a/bin/provider/ConsoleProvider.php
+++ b/bin/provider/ConsoleProvider.php
@@ -11,10 +11,6 @@ class ConsoleProvider implements EventServerProvider
{
public function update(EventDefinition $definition)
{
- Application::httpRequest()
- ->setCmdParam(
- Application::input('server.argv')
- );
Application::make(\linkphp\console\Console::class)
->import(
require LOAD_PATH . 'command.php'
diff --git a/bin/provider/DaemonProvider.php b/bin/provider/DaemonProvider.php
index b8f527d..6a53713 100644
--- a/bin/provider/DaemonProvider.php
+++ b/bin/provider/DaemonProvider.php
@@ -12,10 +12,6 @@ class DaemonProvider implements EventServerProvider
public function update(EventDefinition $definition)
{
- Application::httpRequest()
- ->setCmdParam(
- Application::input('server.argv')
- );
Application::make(\linkphp\console\Console::class)->init();
return $definition;
// TODO: Implement update() method.
diff --git a/composer.json b/composer.json
index 2c82f45..09aea96 100755
--- a/composer.json
+++ b/composer.json
@@ -35,8 +35,7 @@
"linkphp/console":"dev-master",
"linkphp/http":"dev-master",
"linkphp/session":"dev-master",
- "linkphp/filter":"dev-master",
- "linkphp/form":"dev-master",
+ "linkphp/validator":"dev-master",
"linkphp/di":"dev-master",
"linkphp/middleware":"dev-master",
"linkphp/template":"dev-master",
@@ -44,6 +43,7 @@
"linkphp/loader":"dev-master",
"linkphp/process":"dev-master",
"linkphp/swoole":"dev-master",
- "phprpc/phprpc":"dev-master"
+ "phprpc/phprpc":"dev-master",
+ "linkphp/cookie":"dev-master"
}
}
diff --git a/conf/map.php b/conf/map.php
index bb43691..c15efa6 100755
--- a/conf/map.php
+++ b/conf/map.php
@@ -27,6 +27,9 @@
'phprpc\\' => [
ROOT_PATH . 'vendor/phprpc/src'
],
+ 'linkphp\\validator' => [
+ ROOT_PATH . 'vendor/linkphp/validator/src'
+ ],
],
//psr0命名空间
'autoload_namespace_psr0' => [
@@ -50,5 +53,7 @@
'Config' => ROOT_PATH . 'vendor/linkphp/framework/src/facade/Config.php',
'Router' => ROOT_PATH . 'vendor/linkphp/framework/src/facade/Router.php',
'Error' => ROOT_PATH . 'vendor/linkphp/framework/src/facade/Error.php',
+ 'Session' => ROOT_PATH . 'vendor/linkphp/framework/src/facade/Session.php',
+ 'Validator' => ROOT_PATH . 'vendor/linkphp/framework/src/facade/Validator.php',
],
];
\ No newline at end of file
diff --git a/conf/session.php b/conf/session.php
new file mode 100644
index 0000000..7585b48
--- /dev/null
+++ b/conf/session.php
@@ -0,0 +1,23 @@
+ '',
+ // SESSION_ID的提交变量,解决flash上传跨域
+ 'var_session_id' => '',
+ // SESSION 前缀
+ 'prefix' => 'zq',
+ // 驱动方式 支持redis memcache memcached
+ 'type' => '',
+ // 是否自动开启 SESSION
+ 'auto_start' => true,
+ 'session_on' => true,
+ //redis
+ 'host' => '127.0.0.1', // redis主机
+ 'port' => 6379, // redis端口
+ 'password' => '', // 密码
+ 'select' => 0, // 操作库
+ 'expire' => 3600, // 有效期(秒)
+ 'timeout' => 0, // 超时时间(秒)
+ 'persistent' => true, // 是否长连接
+ 'session_name' => '', // sessionkey前缀
+];
\ No newline at end of file
diff --git a/conf/view.php b/conf/view.php
index 083e76d..708efbf 100644
--- a/conf/view.php
+++ b/conf/view.php
@@ -2,9 +2,12 @@
return [//默认视图文件配置
'default_temp_theme' => 'default',
- 'default_temp_type' => '1', //默认模板引擎,0=>LinkPHP默认原生PHP,1=>Smarty模板引擎,2=>Links模板引擎
'default_theme_suffix' => '.html', //默认视图文件后缀
'temp_cache' => false, //是否开启模板缓存
'set_left_limiter' => '{', //设置模板引擎左侧解析标签
'set_right_limiter' => '}', //设置模板引擎右侧解析标签
+ 'view_replace_str' => [],
+
+ 'storage_drive' => 'File',
+ 'cache_time' => '1800'
];
\ No newline at end of file
diff --git a/src/application/controller/main/Home.php b/src/application/controller/main/Home.php
index eb0aa40..745096b 100755
--- a/src/application/controller/main/Home.php
+++ b/src/application/controller/main/Home.php
@@ -10,6 +10,7 @@
use framework\Exception;
use phprpc\PhpRpcClient;
use Router;
+use Validator;
class Home extends Controller
{
@@ -28,6 +29,21 @@ public function main1()
public function main()
{
+ dump(app()->input('get.'));
+ Validator::data('www.linkphp.com/1/100') //需要验证的数据集合
+ ->withValidator('url', function ($validator, $input){ //使用验证器闭包
+ $validator->addValidator($input,[//添加验证器规则信息
+ 'rule' => [
+ 'class' => 'url', 'param' => []
+ ], 'errorMessage' => '非法URL地址'
+ ]);
+ });
+ //检测数据
+ if(!Validator::check()){
+ //出错获取错误信息
+ dump(Validator::geterror());die;
+ }
+ dump(true);die;
dump(app()->input('get.'));die;
Router::get('/index/index/index', '/index/api/index');
Router::post('/index/index/index', '/index/api/index');
From c559f78fcd1ee31199e9dd9cc7c9b38c860e4f66 Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: 2018年6月12日 17:58:40 +0800
Subject: [PATCH 10/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=AA=8C=E8=AF=81?=
=?UTF-8?q?=E5=99=A8=E6=94=AF=E6=8C=81=EF=BC=8Ccookie=E6=93=8D=E4=BD=9C,?=
=?UTF-8?q?=E5=AE=8C=E5=96=84session=E5=AD=98=E5=82=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 +-
src/application/controller/main/Home.php | 23 ++++++++++++++---------
2 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/README.md b/README.md
index 7ec44ac..a3a68bd 100755
--- a/README.md
+++ b/README.md
@@ -132,7 +132,7 @@ LinkPHP开发动态:www.linkphp.cn
## **使用方法**
-####事件使用
+#### 事件使用
```php
diff --git a/src/application/controller/main/Home.php b/src/application/controller/main/Home.php
index 745096b..6387b2a 100755
--- a/src/application/controller/main/Home.php
+++ b/src/application/controller/main/Home.php
@@ -8,6 +8,7 @@
use Console;
use Config;
use framework\Exception;
+use linkphp\http\HttpRequest;
use phprpc\PhpRpcClient;
use Router;
use Validator;
@@ -15,21 +16,25 @@
class Home extends Controller
{
-// public function __construct(Controller $controller)
-// {
-// dump($controller);
-// }
+ public function __construct(Controller $controller, HttpRequest $httpRequest)
+ {
+ parent::__construct($httpRequest);
+ dump($controller);
+ }
+
+ public function main(HttpRequest $httpRequest)
+ {
+ dump($httpRequest);
+ dump(app()->input('get.'));
+ }
public function main1()
{
return Application::view('main/home/main',[
'linkphp' => 'linkphp'
]);
- }
-
- public function main()
- {
- dump(app()->input('get.'));
+// dump($httpRequest);
+// dump(app()->input('get.'));
Validator::data('www.linkphp.com/1/100') //需要验证的数据集合
->withValidator('url', function ($validator, $input){ //使用验证器闭包
$validator->addValidator($input,[//添加验证器规则信息
From 626b5f6f1a0f35ea5e35ca2bc9b0387d98673cdb Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: 2018年6月13日 16:12:28 +0800
Subject: [PATCH 11/30] =?UTF-8?q?=E9=97=AD=E5=8C=85=E8=B7=AF=E7=94=B1?=
=?UTF-8?q?=E5=AE=9E=E7=8E=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
conf/map.php | 3 +++
src/addons/test/controller/Test.php | 17 +++++++++++++++++
src/addons/test/resource/view/index.html | 10 ++++++++++
src/application/Kernel.php | 2 +-
.../main => http/controller}/Event.php | 2 +-
.../main => http/controller}/First.php | 2 +-
.../main => http/controller}/Home.php | 4 ++--
.../main => http/controller}/Index.php | 2 +-
.../main => http/controller}/Test.php | 2 +-
src/application/provider/RouterProvider.php | 3 ---
src/route.php | 11 +++++++++--
11 files changed, 46 insertions(+), 12 deletions(-)
create mode 100644 src/addons/test/controller/Test.php
create mode 100644 src/addons/test/resource/view/index.html
rename src/application/{controller/main => http/controller}/Event.php (96%)
rename src/application/{controller/main => http/controller}/First.php (82%)
rename src/application/{controller/main => http/controller}/Home.php (98%)
rename src/application/{controller/main => http/controller}/Index.php (82%)
rename src/application/{controller/main => http/controller}/Test.php (82%)
diff --git a/conf/map.php b/conf/map.php
index c15efa6..984e07c 100755
--- a/conf/map.php
+++ b/conf/map.php
@@ -18,6 +18,9 @@
'app\\' => [
ROOT_PATH . 'src/application'
],
+ 'addons\\' => [
+ ROOT_PATH . 'src/addons'
+ ],
'bin\\' => [
ROOT_PATH . 'bin'
],
diff --git a/src/addons/test/controller/Test.php b/src/addons/test/controller/Test.php
new file mode 100644
index 0000000..4bb810d
--- /dev/null
+++ b/src/addons/test/controller/Test.php
@@ -0,0 +1,17 @@
+
+
+
+
+ Title
+
+
+
+
+
\ No newline at end of file
diff --git a/src/application/Kernel.php b/src/application/Kernel.php
index 3e3d00b..e213de6 100644
--- a/src/application/Kernel.php
+++ b/src/application/Kernel.php
@@ -21,7 +21,7 @@ public function use($config = null)
$this->_app->hook('appMiddleware');
$this->_app->get(\linkphp\router\Router::class)
->setPath(
- $this->_app->input('server.PATH_INFO'))
+ $this->_app->input('server.REQUEST_URI'))
->setGetParam(
$this->_app->input('get.'))
->setMethod(
diff --git a/src/application/controller/main/Event.php b/src/application/http/controller/Event.php
similarity index 96%
rename from src/application/controller/main/Event.php
rename to src/application/http/controller/Event.php
index fc868c9..a1c91f9 100644
--- a/src/application/controller/main/Event.php
+++ b/src/application/http/controller/Event.php
@@ -11,7 +11,7 @@
// +----------------------------------------------------------------------
// | 配置类
// +----------------------------------------------------------------------
-namespace app\controller\main;
+namespace app\http\controller;
use linkphp\event\EventDefinition;
use linkphp\event\EventServerProvider;
diff --git a/src/application/controller/main/First.php b/src/application/http/controller/First.php
similarity index 82%
rename from src/application/controller/main/First.php
rename to src/application/http/controller/First.php
index c7e86ca..457305a 100644
--- a/src/application/controller/main/First.php
+++ b/src/application/http/controller/First.php
@@ -1,6 +1,6 @@
input('get.'));
+ return app()->input('get.');
}
public function main1()
diff --git a/src/application/controller/main/Index.php b/src/application/http/controller/Index.php
similarity index 82%
rename from src/application/controller/main/Index.php
rename to src/application/http/controller/Index.php
index b49fe99..8f488a8 100644
--- a/src/application/controller/main/Index.php
+++ b/src/application/http/controller/Index.php
@@ -1,6 +1,6 @@
setVarController('c')
->setVarAction('a')
->setRouterOn('true')
- ->setPlatform('')
- ->setController('')
- ->setAction('')
->setNamespace(APP_NAMESPACE_NAME);
return $definition;
// TODO: Implement update() method.
diff --git a/src/route.php b/src/route.php
index a444738..833eaa3 100755
--- a/src/route.php
+++ b/src/route.php
@@ -1,7 +1,14 @@
['/main/home/main',['method' => 'get']],
From cb54ada7ae52e791fa9888fe571f264e10bf9150 Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: 2018年6月13日 16:15:01 +0800
Subject: [PATCH 12/30] =?UTF-8?q?=E9=97=AD=E5=8C=85=E8=B7=AF=E7=94=B1?=
=?UTF-8?q?=E5=AE=9E=E7=8E=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index a3a68bd..ca9900b 100755
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@
#### LinkPHP (临克) 是面向对象的轻量级常驻内存型PHP API开发框架 。
-## **http服务器启动(常驻内存模式)**
+## **http服务器启动(常驻内存模式) [需要swoole扩展]**
进入
From e5d247ff1748b2fb8863703243afa6e12699be0a Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: 2018年6月15日 15:58:17 +0800
Subject: [PATCH 13/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=88=86=E9=A1=B5?=
=?UTF-8?q?=E5=99=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 30 +++++++++-
composer.json | 5 +-
conf/map.php | 12 ----
conf/page.php | 7 +++
src/addons/test/PluginTest.php | 5 ++
src/application/http/controller/Home.php | 73 +++++++++++++-----------
src/route.php | 13 +++--
7 files changed, 89 insertions(+), 56 deletions(-)
create mode 100644 conf/page.php
diff --git a/README.md b/README.md
index ca9900b..abb1c59 100755
--- a/README.md
+++ b/README.md
@@ -497,8 +497,11 @@ use framework\Application;
//在src目录下route.php路由配置文件中进行配置使用
+//Router::get(':id/:test', '/addons/test/Test@main');
+Router::get('/', '/http/home/main');
+
return [
- 'index/:id' => '/main/home/main',
+// ':id/:test' => ['/main/home/main',['method' => 'get']],
];
//键名为当前请求的路径
@@ -507,8 +510,12 @@ return [
//闭包使用方法
-Router::get('index/:id',function(){
- return 1;
+use linkphp\http\HttpRequest;
+
+Router::get(':id/:test', function(HttpRequest $httpRequest,$id){
+ dump($id);
+ dump($httpRequest);
+ return '闭包路由';
});
```
@@ -551,6 +558,23 @@ Validator::data('w')
```
+#### 分页器使用
+
+```php
+
+use linkphp\page\Paginator;
+
+//查出待分页的总数
+$count = Db::table('lp_user')->count('id');
+//实例化分页器传入总数以及每页数量
+$page = new Paginator($count,2);
+//获取limit参数
+$data = Db::table('lp_user')->limit($page->limit())->select();
+//渲染分页条
+$page->render();
+
+```
+
#### 命令行使用说明
```php
diff --git a/composer.json b/composer.json
index 09aea96..a5b4d71 100755
--- a/composer.json
+++ b/composer.json
@@ -43,7 +43,8 @@
"linkphp/loader":"dev-master",
"linkphp/process":"dev-master",
"linkphp/swoole":"dev-master",
- "phprpc/phprpc":"dev-master",
- "linkphp/cookie":"dev-master"
+ "linkphp/cookie":"dev-master",
+ "linkphp/addons":"dev-master",
+ "phprpc/phprpc":"dev-master"
}
}
diff --git a/conf/map.php b/conf/map.php
index 984e07c..a74b49d 100755
--- a/conf/map.php
+++ b/conf/map.php
@@ -18,21 +18,9 @@
'app\\' => [
ROOT_PATH . 'src/application'
],
- 'addons\\' => [
- ROOT_PATH . 'src/addons'
- ],
'bin\\' => [
ROOT_PATH . 'bin'
],
- 'framework\\' => [
- ROOT_PATH . 'vendor/linkphp/framework/src'
- ],
- 'phprpc\\' => [
- ROOT_PATH . 'vendor/phprpc/src'
- ],
- 'linkphp\\validator' => [
- ROOT_PATH . 'vendor/linkphp/validator/src'
- ],
],
//psr0命名空间
'autoload_namespace_psr0' => [
diff --git a/conf/page.php b/conf/page.php
new file mode 100644
index 0000000..c009a73
--- /dev/null
+++ b/conf/page.php
@@ -0,0 +1,7 @@
+ 'Style',
+ 'var_page' => 'page',
+ 'list_rows' => 15,
+];
\ No newline at end of file
diff --git a/src/addons/test/PluginTest.php b/src/addons/test/PluginTest.php
index 1397281..caebae7 100644
--- a/src/addons/test/PluginTest.php
+++ b/src/addons/test/PluginTest.php
@@ -16,6 +16,11 @@ class PluginTest extends Addons
'version' => '0.1'
];
+ public function execute()
+ {
+ return $this->info;
+ }
+
public function install()
{
// TODO: Implement install() method.
diff --git a/src/application/http/controller/Home.php b/src/application/http/controller/Home.php
index bfe8677..78b9162 100755
--- a/src/application/http/controller/Home.php
+++ b/src/application/http/controller/Home.php
@@ -12,49 +12,56 @@
use phprpc\PhpRpcClient;
use Router;
use Validator;
+use linkphp\page\Paginator;
class Home extends Controller
{
- public function __construct(Controller $controller, HttpRequest $httpRequest)
- {
- parent::__construct($httpRequest);
- dump($controller);
- }
+// public function __construct(Controller $controller, HttpRequest $httpRequest)
+// {
+// parent::__construct($httpRequest);
+// dump($controller);
+// }
- public function main(HttpRequest $httpRequest)
+ public function main1(HttpRequest $httpRequest)
{
dump($httpRequest);
+ return Application::view('main/home/main',[
+ 'linkphp' => 'linkphp'
+ ]);
return app()->input('get.');
}
- public function main1()
+ public function main()
{
- return Application::view('main/home/main',[
- 'linkphp' => 'linkphp'
- ]);
+ $count = Db::table('lp_user')->count('id');
+ $page = new Paginator($count,2);
+ $data = Db::table('lp_user')->limit($page->limit())->select();
+ $page->render();
+ dump($page->render());die;
+ return Db::select(['select * from lp_user where id> ? and id < ?',[1,3]])->get();
// dump($httpRequest);
// dump(app()->input('get.'));
- Validator::data('www.linkphp.com/1/100') //需要验证的数据集合
- ->withValidator('url', function ($validator, $input){ //使用验证器闭包
- $validator->addValidator($input,[//添加验证器规则信息
- 'rule' => [
- 'class' => 'url', 'param' => []
- ], 'errorMessage' => '非法URL地址'
- ]);
- });
- //检测数据
- if(!Validator::check()){
- //出错获取错误信息
- dump(Validator::geterror());die;
- }
- dump(true);die;
- dump(app()->input('get.'));die;
- Router::get('/index/index/index', '/index/api/index');
- Router::post('/index/index/index', '/index/api/index');
- Router::delete('/index/index/index', '/index/api/index');
- Router::patch('/index/index/index', '/index/api/index');
- Router::put('/index/index/index', '/index/api/index');
+// Validator::data('www.linkphp.com/1/100') //需要验证的数据集合
+// ->withValidator('url', function ($validator, $input){ //使用验证器闭包
+// $validator->addValidator($input,[//添加验证器规则信息
+// 'rule' => [
+// 'class' => 'url', 'param' => []
+// ], 'errorMessage' => '非法URL地址'
+// ]);
+// });
+// //检测数据
+// if(!Validator::check()){
+// //出错获取错误信息
+// dump(Validator::geterror());die;
+// }
+// dump(true);die;
+// dump(app()->input('get.'));die;
+// Router::get('/index/index/index', '/index/api/index');
+// Router::post('/index/index/index', '/index/api/index');
+// Router::delete('/index/index/index', '/index/api/index');
+// Router::patch('/index/index/index', '/index/api/index');
+// Router::put('/index/index/index', '/index/api/index');
// throw new Exception('test');
// dump(new PhpRpcClient());die;
// dump(Config::get('app.app_debug'));
@@ -62,9 +69,9 @@ public function main1()
// return ['code' => 1, 'msg' => 'linkphp start'];
// $filename = ROOT_PATH . 'src/resource/view/main/home/main.html';
// return file_get_contents($filename);
- Application::view('main/home/main',[
- 'linkphp' => 'linkphp'
- ]);
+// Application::view('main/home/main',[
+// 'linkphp' => 'linkphp'
+// ]);
// dump(app()->getContainerInstance());die;
// dump(Config::get(''));die;
// dump(Db::table('lp_download')->sum('id'));die;
diff --git a/src/route.php b/src/route.php
index 833eaa3..8eb5787 100755
--- a/src/route.php
+++ b/src/route.php
@@ -2,14 +2,15 @@
use linkphp\http\HttpRequest;
-Router::get(':id/:test', function(HttpRequest $httpRequest,$id){
- dump($id);
- dump($httpRequest);
- return '闭包路由';
+Router::get(':id/:test', function($id, $test, HttpRequest $httpRequest){
+// dump($id);
+// dump($httpRequest);
+ return "闭包路由,不走实例控制器,直接闭包返回的结果。接收到的参数id:" . $id . ",test:".$test;
});
-//Router::get(':id/:test', '/addons/test/Test@main');
+//Router::get('addons', '/addons/test/Test@main');
+Router::get('addons/:plugin', '/linkphp/addons/Bootstrap@boot', [], ['plugin' => '/[\s\S]*/']);
Router::get('/', '/http/home/main');
return [
-// ':id/:test' => ['/main/home/main',['method' => 'get']],
+// ':id/:test' => ['/http/home/main',['method' => 'get']],
];
\ No newline at end of file
From f76bd767cccc69d01a30fe43bf8c77aaf43393d6 Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: 2018年6月15日 21:42:27 +0800
Subject: [PATCH 14/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=B7=AF=E7=94=B1?=
=?UTF-8?q?=E4=B8=AD=E9=97=B4=E4=BB=B6=E4=BB=A5=E5=8F=8A=E5=8D=95=E8=B7=AF?=
=?UTF-8?q?=E7=94=B1=E8=BF=87=E6=BB=A4=E5=99=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
conf/configure.php | 3 ---
src/route.php | 10 +++++++++-
2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/conf/configure.php b/conf/configure.php
index 4f60a30..8bc93f9 100755
--- a/conf/configure.php
+++ b/conf/configure.php
@@ -38,9 +38,6 @@
//系统安全配置
'token_turn_on' => false, //是否打开表单令牌验证
- //系统引擎配置
- 'session_on' => true, //是否开启SESSION机制
-
//系统常用路径设置
'log_path' => CACHE_PATH . 'log/', //系统日志存储路径
diff --git a/src/route.php b/src/route.php
index 8eb5787..d212ba3 100755
--- a/src/route.php
+++ b/src/route.php
@@ -2,6 +2,14 @@
use linkphp\http\HttpRequest;
+//路由中间件
+$event = [
+ \linkphp\router\middleware\TestProvider::class
+];
+
+//设置路由中间件
+app()->event('routerMiddleware', $event);
+
Router::get(':id/:test', function($id, $test, HttpRequest $httpRequest){
// dump($id);
// dump($httpRequest);
@@ -9,7 +17,7 @@
});
//Router::get('addons', '/addons/test/Test@main');
Router::get('addons/:plugin', '/linkphp/addons/Bootstrap@boot', [], ['plugin' => '/[\s\S]*/']);
-Router::get('/', '/http/home/main');
+Router::get('/', '/http/home/main', ['filter' => \linkphp\router\filter\Test::class]);
return [
// ':id/:test' => ['/http/home/main',['method' => 'get']],
From d4c3a203caaac67d6e9ac7a27c031224aa3ee75d Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: 2018年6月18日 10:09:28 +0800
Subject: [PATCH 15/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=B7=AF=E7=94=B1?=
=?UTF-8?q?=E4=B8=AD=E9=97=B4=E4=BB=B6=E4=BB=A5=E5=8F=8A=E5=8D=95=E8=B7=AF?=
=?UTF-8?q?=E7=94=B1=E8=BF=87=E6=BB=A4=E5=99=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
bin/provider/ConsoleProvider.php | 4 +-
bin/provider/DaemonProvider.php | 3 +-
bin/provider/ErrorProvider.php | 10 +++--
conf/map.php | 2 +-
conf/view.php | 3 +-
src/application/http/controller/Home.php | 35 +++++++++++++++++-
src/application/provider/ErrorProvider.php | 8 ++--
src/application/provider/RouterProvider.php | 3 +-
src/application/provider/TemplateProvider.php | 24 ++++++++++++
src/bootstrap.php | 1 +
{conf => src}/common.php | 0
src/route.php | 6 +++
.../7103d428727f75b257e4e8f21b673bfc.c.php | Bin 503 -> 2052 bytes
13 files changed, 82 insertions(+), 17 deletions(-)
create mode 100644 src/application/provider/TemplateProvider.php
rename {conf => src}/common.php (100%)
diff --git a/bin/provider/ConsoleProvider.php b/bin/provider/ConsoleProvider.php
index 19e1b1a..11c1d53 100644
--- a/bin/provider/ConsoleProvider.php
+++ b/bin/provider/ConsoleProvider.php
@@ -4,14 +4,12 @@
use linkphp\event\EventDefinition;
use linkphp\event\EventServerProvider;
-use framework\Exception;
-use framework\Application;
class ConsoleProvider implements EventServerProvider
{
public function update(EventDefinition $definition)
{
- Application::make(\linkphp\console\Console::class)
+ app()->make(\linkphp\console\Console::class)
->import(
require LOAD_PATH . 'command.php'
)->init();
diff --git a/bin/provider/DaemonProvider.php b/bin/provider/DaemonProvider.php
index 6a53713..ddfa449 100644
--- a/bin/provider/DaemonProvider.php
+++ b/bin/provider/DaemonProvider.php
@@ -5,14 +5,13 @@
use linkphp\event\EventDefinition;
use linkphp\event\EventServerProvider;
use framework\Exception;
-use framework\Application;
class DaemonProvider implements EventServerProvider
{
public function update(EventDefinition $definition)
{
- Application::make(\linkphp\console\Console::class)->init();
+ app()->make(\linkphp\console\Console::class)->init();
return $definition;
// TODO: Implement update() method.
}
diff --git a/bin/provider/ErrorProvider.php b/bin/provider/ErrorProvider.php
index 1e9b060..078afbe 100644
--- a/bin/provider/ErrorProvider.php
+++ b/bin/provider/ErrorProvider.php
@@ -10,12 +10,16 @@ class ErrorProvider implements EventServerProvider
{
public function update(EventDefinition $definition)
{
- Error::register(
- Error::instance()
- ->setErrorView(EXTRA_PATH . 'tpl/error.html')
+ $error = new Error();
+ $error->register(
+ $error->setErrorView(EXTRA_PATH . 'tpl/error.html')
->setDebug(true)
->setErrHandle('bin\\exception\\HttpdHandle')
)->complete();
+ app()->containerInstance(
+ 'linkphp\error\Error',
+ $error
+ );
return $definition;
// TODO: Implement update() method.
}
diff --git a/conf/map.php b/conf/map.php
index a74b49d..1755ea8 100755
--- a/conf/map.php
+++ b/conf/map.php
@@ -30,7 +30,7 @@
'autoload_namespace_file' => [
//'文件名' => '映射路径地址'
'defined' => ROOT_PATH . 'vendor/linkphp/framework/src/define.php',
- 'app_func' => ROOT_PATH . 'conf/common.php',
+ 'app_func' => ROOT_PATH . 'src/common.php',
'framework_func' => ROOT_PATH . 'vendor/linkphp/framework/src/helper.php'
],
'class_autoload_map' => [
diff --git a/conf/view.php b/conf/view.php
index 708efbf..44836ac 100644
--- a/conf/view.php
+++ b/conf/view.php
@@ -9,5 +9,6 @@
'view_replace_str' => [],
'storage_drive' => 'File',
- 'cache_time' => '1800'
+ 'cache_time' => '1800',
+ 'tpl_replace_string' => []
];
\ No newline at end of file
diff --git a/src/application/http/controller/Home.php b/src/application/http/controller/Home.php
index 78b9162..03a4b9b 100755
--- a/src/application/http/controller/Home.php
+++ b/src/application/http/controller/Home.php
@@ -34,11 +34,44 @@ public function main1(HttpRequest $httpRequest)
public function main()
{
+ function xrange ()
+ {
+ while (1) {
+ $a = (yield '11'); //yield 表达式
+ echo $a;
+ }
+ }
+ $a = xrange();//返回一个生成器
+ echo $a->current();//返回当前产生的值
+ echo '
';
+ $a->send('33');//向生成器中传入一个值,并且当做 yield 表达式的结果,然后继续执行生成器。
+ echo '
';
+ echo $a->current();
+ echo '
';
+ $a->send('22');
+ echo '
';
+ echo $a->current();
+ die;
+ function xrange($start, $limit) {
+ if ($start < $limit) { + for ($i = $start; $i <= $limit; ++$i) { + yield $i; + } + } + } + foreach (xrange(1, 9) as $number) { + echo "$number "; + } + die; +// dump($gen);die; $count = Db::table('lp_user')->count('id');
$page = new Paginator($count,2);
$data = Db::table('lp_user')->limit($page->limit())->select();
$page->render();
- dump($page->render());die;
+ foreach ($data as $row) {
+ var_dump($row);
+ }
+// dump($data);die;
return Db::select(['select * from lp_user where id> ? and id < ?',[1,3]])->get();
// dump($httpRequest);
// dump(app()->input('get.'));
diff --git a/src/application/provider/ErrorProvider.php b/src/application/provider/ErrorProvider.php
index 10b2ce8..c42460a 100644
--- a/src/application/provider/ErrorProvider.php
+++ b/src/application/provider/ErrorProvider.php
@@ -10,15 +10,15 @@ class ErrorProvider implements EventServerProvider
{
public function update(EventDefinition $definition)
{
- Error::register(
- Error::instance()
- ->setErrorView(EXTRA_PATH . 'tpl/error.html')
+ $error = new Error();
+ $error->register(
+ $error->setErrorView(EXTRA_PATH . 'tpl/error.html')
->setDebug(true)
->setErrHandle('app\\exception\\Handle')
)->complete();
app()->containerInstance(
'linkphp\error\Error',
- Error::instance()
+ $error
);
return $definition;
// TODO: Implement update() method.
diff --git a/src/application/provider/RouterProvider.php b/src/application/provider/RouterProvider.php
index a58410e..57b9cab 100644
--- a/src/application/provider/RouterProvider.php
+++ b/src/application/provider/RouterProvider.php
@@ -4,14 +4,13 @@
use linkphp\event\EventDefinition;
use linkphp\event\EventServerProvider;
-use framework\Application;
class RouterProvider implements EventServerProvider
{
public function update(EventDefinition $definition)
{
- $router = Application::make(\linkphp\router\Router::class);
+ $router = app()->make(\linkphp\router\Router::class);
$router->init()
->import(require ROOT_PATH . 'src/route.php')
->setUrlModel('1')
diff --git a/src/application/provider/TemplateProvider.php b/src/application/provider/TemplateProvider.php
new file mode 100644
index 0000000..e6a0960
--- /dev/null
+++ b/src/application/provider/TemplateProvider.php
@@ -0,0 +1,24 @@
+get(\linkphp\http\HttpRequest::class),[]);
+ $view->engine();
+ $view->config(require ROOT_PATH . 'conf/view.php');
+ app()->containerInstance(
+ 'linkphp\template\View',
+ $view
+ );
+ return $eventDefinition;
+ }
+
+}
\ No newline at end of file
diff --git a/src/bootstrap.php b/src/bootstrap.php
index 3442086..f5cc3e3 100644
--- a/src/bootstrap.php
+++ b/src/bootstrap.php
@@ -32,6 +32,7 @@
\linkphp\event\provider\ConfigProvider::class,
\linkphp\event\provider\MiddleProvider::class,
\linkphp\event\provider\DatabaseProvider::class,
+ \app\provider\TemplateProvider::class,
]
);
diff --git a/conf/common.php b/src/common.php
similarity index 100%
rename from conf/common.php
rename to src/common.php
diff --git a/src/route.php b/src/route.php
index d212ba3..7f48982 100755
--- a/src/route.php
+++ b/src/route.php
@@ -10,6 +10,12 @@
//设置路由中间件
app()->event('routerMiddleware', $event);
+//Router::get('/', function(HttpRequest $httpRequest){
+// view('main/home/main',[
+// 'linkphp' => 'linkphp'
+// ]);
+//});
+
Router::get(':id/:test', function($id, $test, HttpRequest $httpRequest){
// dump($id);
// dump($httpRequest);
diff --git a/src/runtime/temp/temp_c/7103d428727f75b257e4e8f21b673bfc.c.php b/src/runtime/temp/temp_c/7103d428727f75b257e4e8f21b673bfc.c.php
index 959fd7947dea55e8d7eba4e3817165a9e345fd40..97ec3ac24718ca235d1163dd2ccea0cac4dd615f 100644
GIT binary patch
literal 2052
zcmeHIU2obj6y_a2;+c{n#jVC?Pq6o`cUz1`u(<=4^q$h{qwzrmj-+}+}b^gu;Z4etjBFjrPA4?%MfgP^pM$B!)D$ro{NZ5H^5tAnjN5=owKXcn;)Zr
zaenh{cwBWt8As}exPM&z;KU@k5lT5fq+hvM^g*LDJe2oyVn#XYGf7Kns=b&Cd76>z
zvs?y;U1pdYo`lELXG%W^zqNTN@-KO!kp><|dqbi%1${qkcz0^xgywvfnz=P9{C;5Yjmku
zuXD0m9pW{0NXIN_9kU3EB-AykTeegY9aP-)^|KyoyR|8n$J#zE>w^{b)UaMFzBQ=g
zNYC@WdmHDrx#09;@a)r(G~D5GbPPZ}~P
z7XU*qD%cYqR5*APXw8(}3F(DTKn2rvxlk~9{8gq?Jq-wm;UuaipHNwl0|Co&MNB-I
zjR3d;^hzKg8pjxiwz?Y%SNntvDb|g-%?)utS%z{o#Le;`5KDErkm*P_9lmvF?Kj*D
z!86f9S`ZJ-=tdOaC1N27o&mJYR{9sg)OsqW;d8))27o}>o|_Up&?7gK+H`963MW&>
zlF3=hr{wynSm^w55uZzsQAv3!A6JUva9FguwVI}e0&*U0GmAtEq{zYkx&aQ7DIB~~
zhSfy~fnOA1xjxpZ*qZUcG)~}c|1B>w|Jw2#{Z~p}I5XDf*Mq8W`rjM)e{Y7r0gA$$
Ai~s-t
delta 9
QcmZn>_|CkUm+dnUO#lD@
From d5a12ed5af46845868634b6284d20768b274e54d Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: 2018年6月18日 10:34:28 +0800
Subject: [PATCH 16/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0qq?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/README.md b/README.md
index abb1c59..a3c3a3c 100755
--- a/README.md
+++ b/README.md
@@ -10,6 +10,8 @@
```
+QQ: 750688237 有兴趣的可以一起探讨,项目还需要完善
+
#### LinkPHP (临克) 是面向对象的轻量级常驻内存型PHP API开发框架 。
From 202e7daeec37ef6432b5d79f3a82c7dc18e4fbb2 Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: 2018年6月19日 09:50:03 +0800
Subject: [PATCH 17/30] =?UTF-8?q?=E6=8F=90=E4=BA=A4alpha=E7=89=88=E6=9C=AC?=
=?UTF-8?q?=EF=BC=8C=E5=AF=B9cache=EF=BC=8Cconfig=EF=BC=8Ccookie=EF=BC=8Cv?=
=?UTF-8?q?erify=EF=BC=8Cupload=E8=BF=9B=E8=A1=8C=E6=94=B9=E5=96=84?=
=?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
composer.json | 4 +-
conf/app.php | 6 -
conf/build.php | 3 -
conf/cache.php | 13 ++
conf/configure.php | 16 --
conf/cookie.php | 9 +
conf/main/configure.php | 21 --
conf/page.php | 7 -
conf/session.php | 20 +-
src/addons/test/PluginTest.php | 34 ---
src/addons/test/addons.php | 5 -
src/addons/test/controller/Test.php | 17 --
src/addons/test/resource/view/index.html | 10 -
src/application/http/controller/Event.php | 27 ---
src/application/http/controller/First.php | 14 --
src/application/http/controller/Home.php | 198 +-----------------
src/application/http/controller/Index.php | 14 --
src/application/http/controller/Test.php | 14 --
src/route.php | 2 +-
.../098f6bcd4621d373cade4e832627b4f6.php | 5 +-
20 files changed, 41 insertions(+), 398 deletions(-)
delete mode 100644 conf/app.php
delete mode 100644 conf/build.php
create mode 100644 conf/cache.php
create mode 100644 conf/cookie.php
delete mode 100755 conf/main/configure.php
delete mode 100644 conf/page.php
delete mode 100644 src/addons/test/PluginTest.php
delete mode 100644 src/addons/test/addons.php
delete mode 100644 src/addons/test/controller/Test.php
delete mode 100644 src/addons/test/resource/view/index.html
delete mode 100644 src/application/http/controller/Event.php
delete mode 100644 src/application/http/controller/First.php
delete mode 100644 src/application/http/controller/Index.php
delete mode 100644 src/application/http/controller/Test.php
diff --git a/composer.json b/composer.json
index a5b4d71..4d9db68 100755
--- a/composer.json
+++ b/composer.json
@@ -17,7 +17,7 @@
}
},
"require":{
- "php": "^5.4 || ^7.0",
+ "php": "^5.5 || ^7.0",
"linkphp/framework":"dev-master",
"linkphp/db":"dev-master",
"linkphp/cache":"dev-master",
@@ -26,7 +26,6 @@
"linkphp/page":"dev-master",
"linkphp/upload":"dev-master",
"linkphp/verify":"dev-master",
- "linkphp/image":"dev-master",
"linkphp/curl":"dev-master",
"linkphp/router":"dev-master",
"linkphp/event":"dev-master",
@@ -44,7 +43,6 @@
"linkphp/process":"dev-master",
"linkphp/swoole":"dev-master",
"linkphp/cookie":"dev-master",
- "linkphp/addons":"dev-master",
"phprpc/phprpc":"dev-master"
}
}
diff --git a/conf/app.php b/conf/app.php
deleted file mode 100644
index bd96677..0000000
--- a/conf/app.php
+++ /dev/null
@@ -1,6 +0,0 @@
- true, //是否打开调试功能
-];
\ No newline at end of file
diff --git a/conf/build.php b/conf/build.php
deleted file mode 100644
index 0b67a5f..0000000
--- a/conf/build.php
+++ /dev/null
@@ -1,3 +0,0 @@
- 'File',
+ // 缓存保存目录
+ 'path' => RUNTIME_PATH . 'temp/temp_cache/',
+ // 缓存前缀
+ 'prefix' => '',
+ // 缓存有效期 0表示永久缓存
+ 'expire' => 0,
+ 'ext' => '.php'
+];
\ No newline at end of file
diff --git a/conf/configure.php b/conf/configure.php
index 8bc93f9..a906656 100755
--- a/conf/configure.php
+++ b/conf/configure.php
@@ -16,22 +16,6 @@
return [
//'配置项' => '配置值',
- //默认视图文件配置
- 'default_temp_theme' => 'default',
- 'default_temp_type' => '1', //默认模板引擎,0=>LinkPHP默认原生PHP,1=>Smarty模板引擎,2=>Links模板引擎
- 'default_theme_suffix' => '.html', //默认视图文件后缀
- 'temp_cache' => false, //是否开启模板缓存
- 'set_left_limiter' => '{', //设置模板引擎左侧解析标签
- 'set_right_limiter' => '}', //设置模板引擎右侧解析标签
-
-
- //扩展配置开关
- 'extend_model_config' => false,
-
- //系统语言包设置
- 'default_language' => 'cn', //设置系统语言'cn'简体中文,'tw'繁体中文,'en'英语。默认中文
-
-
//站点调试
'app_debug' => true, //是否打开调试功能
diff --git a/conf/cookie.php b/conf/cookie.php
new file mode 100644
index 0000000..6f1e8a7
--- /dev/null
+++ b/conf/cookie.php
@@ -0,0 +1,9 @@
+ '',
+ 'domain' => '',
+ 'secure' => '',
+ 'httponly' => '',
+ 'expire' => ''
+];
\ No newline at end of file
diff --git a/conf/main/configure.php b/conf/main/configure.php
deleted file mode 100755
index 2ae6908..0000000
--- a/conf/main/configure.php
+++ /dev/null
@@ -1,21 +0,0 @@
- '配置值',
- 'HOST' => '测试Index配置',
- //'DEFAULT_THEME_SUFFIX' => 'html',
-);
diff --git a/conf/page.php b/conf/page.php
deleted file mode 100644
index c009a73..0000000
--- a/conf/page.php
+++ /dev/null
@@ -1,7 +0,0 @@
- 'Style',
- 'var_page' => 'page',
- 'list_rows' => 15,
-];
\ No newline at end of file
diff --git a/conf/session.php b/conf/session.php
index 7585b48..8410ac7 100644
--- a/conf/session.php
+++ b/conf/session.php
@@ -9,15 +9,15 @@
// 驱动方式 支持redis memcache memcached
'type' => '',
// 是否自动开启 SESSION
- 'auto_start' => true,
'session_on' => true,
- //redis
- 'host' => '127.0.0.1', // redis主机
- 'port' => 6379, // redis端口
- 'password' => '', // 密码
- 'select' => 0, // 操作库
- 'expire' => 3600, // 有效期(秒)
- 'timeout' => 0, // 超时时间(秒)
- 'persistent' => true, // 是否长连接
- 'session_name' => '', // sessionkey前缀
+ // session 保存时间
+ 'expire' => 86400,
+ // session 保存路径
+ 'path' => '/',
+ // session 有效域名
+ 'domain' => 'zuanqun.com',
+ // session 启用安全传输
+ 'secure' => false,
+ // httponly设置
+ 'httponly' => '',
];
\ No newline at end of file
diff --git a/src/addons/test/PluginTest.php b/src/addons/test/PluginTest.php
deleted file mode 100644
index caebae7..0000000
--- a/src/addons/test/PluginTest.php
+++ /dev/null
@@ -1,34 +0,0 @@
- 'Test',
- 'title' => '测试插件',
- 'description' => '用于linkphp的插件扩展演示',
- 'status' => 1,
- 'author' => 'byron liugene',
- 'version' => '0.1'
- ];
-
- public function execute()
- {
- return $this->info;
- }
-
- public function install()
- {
- // TODO: Implement install() method.
- }
-
- public function uninstall()
- {
- // TODO: Implement uninstall() method.
- }
-
-}
\ No newline at end of file
diff --git a/src/addons/test/addons.php b/src/addons/test/addons.php
deleted file mode 100644
index 25058db..0000000
--- a/src/addons/test/addons.php
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
- Title
-
-
-
-
-
\ No newline at end of file
diff --git a/src/application/http/controller/Event.php b/src/application/http/controller/Event.php
deleted file mode 100644
index a1c91f9..0000000
--- a/src/application/http/controller/Event.php
+++ /dev/null
@@ -1,27 +0,0 @@
-
-// +----------------------------------------------------------------------
-// | 配置类
-// +----------------------------------------------------------------------
-namespace app\http\controller;
-
-use linkphp\event\EventDefinition;
-use linkphp\event\EventServerProvider;
-
-class Event implements EventServerProvider
-{
- public function update(EventDefinition $definition)
- {
- dump(2);
- return $definition;
- // TODO: Implement update() method.
- }
-}
\ No newline at end of file
diff --git a/src/application/http/controller/First.php b/src/application/http/controller/First.php
deleted file mode 100644
index 457305a..0000000
--- a/src/application/http/controller/First.php
+++ /dev/null
@@ -1,14 +0,0 @@
- 'linkphp'
- ]);
- return app()->input('get.');
+ return ['code' => 200, 'msg' => 'linkphp 创建成功!'];
}
- public function main()
- {
- function xrange ()
- {
- while (1) {
- $a = (yield '11'); //yield 表达式
- echo $a;
- }
- }
- $a = xrange();//返回一个生成器
- echo $a->current();//返回当前产生的值
- echo '
';
- $a->send('33');//向生成器中传入一个值,并且当做 yield 表达式的结果,然后继续执行生成器。
- echo '
';
- echo $a->current();
- echo '
';
- $a->send('22');
- echo '
';
- echo $a->current();
- die;
- function xrange($start, $limit) {
- if ($start < $limit) { - for ($i = $start; $i <= $limit; ++$i) { - yield $i; - } - } - } - foreach (xrange(1, 9) as $number) { - echo "$number "; - } - die; -// dump($gen);die; - $count = Db::table('lp_user')->count('id');
- $page = new Paginator($count,2);
- $data = Db::table('lp_user')->limit($page->limit())->select();
- $page->render();
- foreach ($data as $row) {
- var_dump($row);
- }
-// dump($data);die;
- return Db::select(['select * from lp_user where id> ? and id < ?',[1,3]])->get();
-// dump($httpRequest);
-// dump(app()->input('get.'));
-// Validator::data('www.linkphp.com/1/100') //需要验证的数据集合
-// ->withValidator('url', function ($validator, $input){ //使用验证器闭包
-// $validator->addValidator($input,[//添加验证器规则信息
-// 'rule' => [
-// 'class' => 'url', 'param' => []
-// ], 'errorMessage' => '非法URL地址'
-// ]);
-// });
-// //检测数据
-// if(!Validator::check()){
-// //出错获取错误信息
-// dump(Validator::geterror());die;
-// }
-// dump(true);die;
-// dump(app()->input('get.'));die;
-// Router::get('/index/index/index', '/index/api/index');
-// Router::post('/index/index/index', '/index/api/index');
-// Router::delete('/index/index/index', '/index/api/index');
-// Router::patch('/index/index/index', '/index/api/index');
-// Router::put('/index/index/index', '/index/api/index');
-// throw new Exception('test');
-// dump(new PhpRpcClient());die;
-// dump(Config::get('app.app_debug'));
-// return 'linkphp start';
-// return ['code' => 1, 'msg' => 'linkphp start'];
-// $filename = ROOT_PATH . 'src/resource/view/main/home/main.html';
-// return file_get_contents($filename);
-// Application::view('main/home/main',[
-// 'linkphp' => 'linkphp'
-// ]);
-// dump(app()->getContainerInstance());die;
-// dump(Config::get(''));die;
-// dump(Db::table('lp_download')->sum('id'));die;
-// dump(Db::table('lp_download')->count('id'));die;
-// dump(Db::select('select * from lp_download a
-//left join lp_down_item b on a.id = b.down_id
-//left join lp_user c on a.u_id = c.id where a.id = ?',[1])->get());die;
- return Db::table('lp_download a')
- ->join('left join lp_down_item b on a.id = b.down_id')
-// ->join('left join lp_user c on a.u_id = c.id')
- ->leftJoin('lp_user c on a.u_id = c.id')
- ->where('a.id>1')
- ->select();
- dump(Db::table('lp_download a')
- ->join('left join lp_down_item b on a.id = b.down_id')
-// ->join('left join lp_user c on a.u_id = c.id')
- ->leftJoin('lp_user c on a.u_id = c.id')
- ->where('a.id>1')
- ->select());
- dump(Db::table('lp_download')->getLastSql());die;
-// dump(Db::select('select * from lp_user where id = ?',[1])->get());die;
-// dump(Db::table('lp_user')->where('id=3')->delete());die;
-// dump(Db::table('lp_user')->where('id = 1')->setInc('pass_word'));die;
-// dump(Db::table('lp_user')->where('id=1')->update(
-// ['user_name' => 'bananabook','pass_word' => '123']
-// ));
-// dump(Db::getTable());die;
- dump(Db::table('lp_user')->field('id')->where('id = 1')->find());
- dump(Db::table('lp_user')->field('id')->where('id = 1')->select());die;
-// dump(Application::db()->select('select id from lp_forum '));die;
-// dump(Application::db()->table('lp_forum')->field('id')->select());die;
- return ['code' => 1,'msg' => 'test'];
- dump(confirm_zeeyer_compiled('zeeyer'));die;
- dump($this->view('main/home/main',['linkphp' => 'linkphp']));die;
- dump(request());
- dump(db());die;
- dump(Application::db());die;
- dump(Application::cache('test'));die;
- dump(Application::cache('test','test'));die;
- Application::view('main/home/main',[
- 'linkphp' => 'linkphp'
- ]);die;
- dump(Db::table('zq_user')->where('id=11')->update());die;
- dump(Db::table('zq_user')->where('id=11')->delete());die;
- dump(Db::table('zq_user')->insertAll([['id' => 1,'test' => 'test'],['id' => 1,'test' => 'test']]));die;
- dump(Db::insert('insert into zq_user id values 1'));die;
- dump(Db::table('zq_user')->insert(['id' => 1]));die;
- dump(Db::table('zq_user')->field('id')->where('id = 11')->select());die;
- dump(Db::table('zq_user')->getLastSql());die;
- dump(Db::select('select * from zq_user'));
- Application::event(
- 'test',
- [
- \app\controller\main\Event::class,
- \app\controller\main\Event::class,
- \app\controller\main\Event::class
- ]
- );
- Application::event('test');
- Application::router('index/getUser',function(){
- return 1;
- });
- dump(Application::config()->getLoadPath());
- Application::middleware('beginMiddleware',function (Closure $v) {
- $v();
- echo 3;
- return $v;
- });
- Application::middleware('beginMiddleware',function (Closure $v) {
- $v();
- echo 4;
- return $v;
- });
- Application::middleware('beginMiddleware',function (Closure $v) {
- $v();
- echo 5;
- return $v;
- });
- Application::middleware('beginMiddleware',function (Closure $v) {
- $v();
- echo 6;
- return $v;
- });
- Application::middleware('beginMiddleware',function (Closure $v) {
- $v();
- echo 7;
- return $v;
- });
- Application::middleware('beginMiddleware');die;
-// Application::input('get.in',function($value){
-// //闭包实现
-// //这里写具体的过滤方法
-// //自定义
-// //记得返回处理好的
-// return $value;
-// });
-// dump(Application::httpRequest()->isGet());
- }
}
\ No newline at end of file
diff --git a/src/application/http/controller/Index.php b/src/application/http/controller/Index.php
deleted file mode 100644
index 8f488a8..0000000
--- a/src/application/http/controller/Index.php
+++ /dev/null
@@ -1,14 +0,0 @@
- '/[\s\S]*/']);
-Router::get('/', '/http/home/main', ['filter' => \linkphp\router\filter\Test::class]);
+Router::get('/', '/http/home/main');
return [
// ':id/:test' => ['/http/home/main',['method' => 'get']],
diff --git a/src/runtime/temp/temp_cache/098f6bcd4621d373cade4e832627b4f6.php b/src/runtime/temp/temp_cache/098f6bcd4621d373cade4e832627b4f6.php
index 815286c..2967e1e 100644
--- a/src/runtime/temp/temp_cache/098f6bcd4621d373cade4e832627b4f6.php
+++ b/src/runtime/temp/temp_cache/098f6bcd4621d373cade4e832627b4f6.php
@@ -1 +1,4 @@
-s:4:"test";
\ No newline at end of file
+
+test
\ No newline at end of file
From 07163a97591d100e65a8b01667ab8567195691c0 Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: 2018年6月19日 14:48:31 +0800
Subject: [PATCH 18/30] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E5=A4=84BUG,h?=
=?UTF-8?q?ttpd=E7=8E=AF=E5=A2=83=E4=B8=8B=E8=A7=86=E5=9B=BE=E8=BE=93?=
=?UTF-8?q?=E5=87=BA=E9=94=99=E8=AF=AF=E5=B7=B2=E7=BB=8F=E4=BF=AE=E5=A4=8D?=
=?UTF-8?q?,composer=E9=87=8C=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/application/provider/RouterProvider.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/application/provider/RouterProvider.php b/src/application/provider/RouterProvider.php
index 57b9cab..dfb24a4 100644
--- a/src/application/provider/RouterProvider.php
+++ b/src/application/provider/RouterProvider.php
@@ -14,7 +14,7 @@ public function update(EventDefinition $definition)
$router->init()
->import(require ROOT_PATH . 'src/route.php')
->setUrlModel('1')
- ->setDefaultPlatform('main')
+ ->setDefaultPlatform('http')
->setDefaultController('Home')
->setDefaultAction('main')
->setVarPlatform('m')
From fcc6826609efcd29c46f6bae37ab4858a223191e Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: 2018年6月23日 17:17:40 +0800
Subject: [PATCH 19/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=83=AD=E6=9B=B4?=
=?UTF-8?q?=E6=96=B0=EF=BC=8C=E4=BB=A5=E5=8F=8Awebsocket=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
bin/exception/HttpdHandle.php | 19 ++++++++-----------
bin/link | 33 +++++++++++++++++++++++++++++++++
bin/link.sh | 3 +++
bin/ws | 33 +++++++++++++++++++++++++++++++++
conf/bin/httpd.php | 2 +-
conf/bin/reload.php | 19 +++++++++++++++++++
conf/bin/ws.php | 30 ++++++++++++++++++++++++++++++
src/application/ws/Handle.php | 30 ++++++++++++++++++++++++++++++
8 files changed, 157 insertions(+), 12 deletions(-)
create mode 100644 bin/link
create mode 100755 bin/link.sh
create mode 100644 bin/ws
create mode 100644 conf/bin/reload.php
create mode 100644 conf/bin/ws.php
create mode 100644 src/application/ws/Handle.php
diff --git a/bin/exception/HttpdHandle.php b/bin/exception/HttpdHandle.php
index 53231ef..21e5c54 100644
--- a/bin/exception/HttpdHandle.php
+++ b/bin/exception/HttpdHandle.php
@@ -10,17 +10,14 @@ class HttpdHandle extends ErrorHandle
public function handle(Error $error)
{
- $data = [
- 'file' => $error->getFile(),
- 'line' => $error->getLine(),
- 'error_type' => $error->getErrorType(),
- 'message' => $error->getMessage(),
- 'datetime' => $error->getTimestamp(),
- 'trace' => $error->getTrace()
- ];
- extract($data);
-// app()->get(\bin\http\Kernel::class)->setData();
- include($error->getErrorView());
+ $error_info = "run {$error->getErrorType()}: \n";
+ $error_info .= "message: {$error->getMessage()} \n";
+ $error_info .= "file: {$error->getFile()} \n";
+ $error_info .= "line: {$error->getLine()} \n";
+ $error_info .= "datetime: {$error->getTimestamp()} \n";
+ $error_info .= "trace: {$error->getTrace()} \n";
+
+ echo $error_info;
}
}
\ No newline at end of file
diff --git a/bin/link b/bin/link
new file mode 100644
index 0000000..4164b11
--- /dev/null
+++ b/bin/link
@@ -0,0 +1,33 @@
+#!/usr/bin/env php
+event(
+ 'error',
+ \bin\provider\ErrorProvider::class
+);
+
+$app->event(
+ 'console',
+ \bin\provider\ConsoleProvider::class
+);
+
+$kernel = $app->make(bin\console\Kernel::class);
+
+$kernel->daemon(function () use($app){
+ // TODO: Implement request() method.
+ $app->event('error');
+ // TODO: Implement use() method.
+ $app->make(\linkphp\console\Console::class)
+ ->setDaemon(true)
+ ->setDaemonConfig(LOAD_PATH . 'bin/reload.php');
+ $app->event('console');
+});
+
+//这是命令行执行入口文件
\ No newline at end of file
diff --git a/bin/link.sh b/bin/link.sh
new file mode 100755
index 0000000..0e53890
--- /dev/null
+++ b/bin/link.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+echo "Hello World !"
\ No newline at end of file
diff --git a/bin/ws b/bin/ws
new file mode 100644
index 0000000..1d003f7
--- /dev/null
+++ b/bin/ws
@@ -0,0 +1,33 @@
+#!/usr/bin/env php
+event(
+ 'error',
+ \bin\provider\ErrorProvider::class
+);
+
+$app->event(
+ 'console',
+ \bin\provider\ConsoleProvider::class
+);
+
+$kernel = $app->make(bin\console\Kernel::class);
+
+$kernel->daemon(function () use($app){
+ // TODO: Implement request() method.
+ $app->event('error');
+ // TODO: Implement use() method.
+ $app->make(\linkphp\console\Console::class)
+ ->setDaemon(true)
+ ->setDaemonConfig(LOAD_PATH . 'bin/ws.php');
+ $app->event('console');
+});
+
+//这是命令行执行入口文件
\ No newline at end of file
diff --git a/conf/bin/httpd.php b/conf/bin/httpd.php
index 2bd681d..4438cdd 100644
--- a/conf/bin/httpd.php
+++ b/conf/bin/httpd.php
@@ -23,7 +23,7 @@
// PID 文件
'pid_file' => RUNTIME_PATH . 'run/link-httpd.pid',
// 日志文件路径
- 'log_file' => RUNTIME_PATH . 'tmp/link-httpd.log',
+ 'log_file' => RUNTIME_PATH . 'log/link-httpd.log',
// 子进程运行用户
/* 'user' => 'www', */
]
diff --git a/conf/bin/reload.php b/conf/bin/reload.php
new file mode 100644
index 0000000..2eb7c8c
--- /dev/null
+++ b/conf/bin/reload.php
@@ -0,0 +1,19 @@
+ 'linkphp\\console\\daemon\\HotReload',
+ 'server' => [
+ // 类路径
+ 'class' => 'linkphp\swoole\Reload',
+ // 运行时的各项参数:https://wiki.swoole.com/wiki/page/274.html
+ 'setting' => [
+ // PID 文件
+ 'pid_file' => RUNTIME_PATH . 'run/hot-reload.pid',
+ // 日志文件路径
+ 'log_file' => RUNTIME_PATH . 'tmp/hot-reload.log',
+ // 子进程运行用户
+ /* 'user' => 'www', */
+ ]
+ ]
+];
\ No newline at end of file
diff --git a/conf/bin/ws.php b/conf/bin/ws.php
new file mode 100644
index 0000000..fd0f779
--- /dev/null
+++ b/conf/bin/ws.php
@@ -0,0 +1,30 @@
+ 'linkphp\\console\\daemon\\WS',
+ 'ws' => 'app\\ws\\Handle',
+ 'server' => [
+ // 类路径
+ 'class' => 'linkphp\swoole\http\WebSocketServer',
+ // 主机
+ 'host' => '127.0.0.1',
+ // 端口
+ 'port' => 9510,
+ // 运行时的各项参数:https://wiki.swoole.com/wiki/page/274.html
+ 'setting' => [
+ // 连接处理线程数
+ 'reactor_num' => 1, //reactor thread num
+ 'worker_num' => 1, //worker process num
+ 'backlog' => 128, //listen backlog
+ 'max_request' => 1,
+ 'dispatch_mode' => 1,
+ // PID 文件
+ 'pid_file' => RUNTIME_PATH . 'run/ws.pid',
+ // 日志文件路径
+ 'log_file' => RUNTIME_PATH . 'log/ws.log',
+ // 子进程运行用户
+ /* 'user' => 'www', */
+ ]
+ ]
+];
\ No newline at end of file
diff --git a/src/application/ws/Handle.php b/src/application/ws/Handle.php
new file mode 100644
index 0000000..57f729d
--- /dev/null
+++ b/src/application/ws/Handle.php
@@ -0,0 +1,30 @@
+fd}\n";
+ }
+
+ public function message(swoole_server $server, swoole_websocket_frame $frame)
+ {
+ echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
+ $server->push($frame->fd, "this is server");
+ }
+
+ public function close($ser, $fd)
+ {
+ echo "client {$fd} closed\n";
+ }
+
+}
\ No newline at end of file
From 79898308052c478679a13dc3960d375bdb4b77e5 Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: 2018年6月26日 21:48:14 +0800
Subject: [PATCH 20/30] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=80=E4=B8=AA?=
=?UTF-8?q?=E8=81=8A=E5=A4=A9=E5=AE=A4=E6=A1=88=E4=BE=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
bin/ws | 5 ++
conf/bin/ws.php | 3 +-
conf/view.php | 4 +-
src/application/http/controller/Home.php | 2 +-
.../ws/{ => controller}/Handle.php | 15 ++++-
src/resource/view/ws/chat.html | 63 +++++++++++++++++++
src/route.php | 1 +
7 files changed, 86 insertions(+), 7 deletions(-)
rename src/application/ws/{ => controller}/Handle.php (64%)
create mode 100644 src/resource/view/ws/chat.html
diff --git a/bin/ws b/bin/ws
index 1d003f7..90143d8 100644
--- a/bin/ws
+++ b/bin/ws
@@ -18,6 +18,11 @@ $app->event(
\bin\provider\ConsoleProvider::class
);
+$app->event(
+ 'router',
+ \app\provider\RouterProvider::class
+);
+
$kernel = $app->make(bin\console\Kernel::class);
$kernel->daemon(function () use($app){
diff --git a/conf/bin/ws.php b/conf/bin/ws.php
index fd0f779..8d319cf 100644
--- a/conf/bin/ws.php
+++ b/conf/bin/ws.php
@@ -3,10 +3,9 @@
return [
// HttpServer
'daemon' => 'linkphp\\console\\daemon\\WS',
- 'ws' => 'app\\ws\\Handle',
'server' => [
// 类路径
- 'class' => 'linkphp\swoole\http\WebSocketServer',
+ 'class' => 'linkphp\swoole\websocket\WebSocketServer',
// 主机
'host' => '127.0.0.1',
// 端口
diff --git a/conf/view.php b/conf/view.php
index 44836ac..4ef99c1 100644
--- a/conf/view.php
+++ b/conf/view.php
@@ -4,8 +4,8 @@
'default_temp_theme' => 'default',
'default_theme_suffix' => '.html', //默认视图文件后缀
'temp_cache' => false, //是否开启模板缓存
- 'set_left_limiter' => '{', //设置模板引擎左侧解析标签
- 'set_right_limiter' => '}', //设置模板引擎右侧解析标签
+ 'set_left_limiter' => '<{', //设置模板引擎左侧解析标签 + 'set_right_limiter' => '}>', //设置模板引擎右侧解析标签
'view_replace_str' => [],
'storage_drive' => 'File',
diff --git a/src/application/http/controller/Home.php b/src/application/http/controller/Home.php
index a32b2dc..95fb4bb 100755
--- a/src/application/http/controller/Home.php
+++ b/src/application/http/controller/Home.php
@@ -2,10 +2,10 @@
namespace app\http\controller;
use framework\Controller;
+use linkphp\http\HttpRequest;
class Home extends Controller
{
-
public function main()
{
return ['code' => 200, 'msg' => 'linkphp 创建成功!'];
diff --git a/src/application/ws/Handle.php b/src/application/ws/controller/Handle.php
similarity index 64%
rename from src/application/ws/Handle.php
rename to src/application/ws/controller/Handle.php
index 57f729d..066e0c7 100644
--- a/src/application/ws/Handle.php
+++ b/src/application/ws/controller/Handle.php
@@ -1,8 +1,9 @@
fd}\n";
+ }
+
public function open(swoole_websocket_server $svr, swoole_http_request $req)
{
- echo "server: handshake success with fd{$req->fd}\n";
+ echo "server: open success with fd{$req->fd}\n";
}
public function message(swoole_server $server, swoole_websocket_frame $frame)
diff --git a/src/resource/view/ws/chat.html b/src/resource/view/ws/chat.html
new file mode 100644
index 0000000..2da8075
--- /dev/null
+++ b/src/resource/view/ws/chat.html
@@ -0,0 +1,63 @@
+
+
+
+
+ Websocket
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/route.php b/src/route.php
index 735978c..cff4f80 100755
--- a/src/route.php
+++ b/src/route.php
@@ -21,6 +21,7 @@
// dump($httpRequest);
return "闭包路由,不走实例控制器,直接闭包返回的结果。接收到的参数id:" . $id . ",test:".$test;
});
+Router::ws('chat','/app/ws/Handle#ws');
//Router::get('addons', '/addons/test/Test@main');
Router::get('addons/:plugin', '/linkphp/addons/Bootstrap@boot', [], ['plugin' => '/[\s\S]*/']);
Router::get('/', '/http/home/main');
From 33daee60204c89537f1f8a1d6f369ff313ed3eae Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: 2018年6月26日 22:18:11 +0800
Subject: [PATCH 21/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0websocket=E4=BD=BF?=
=?UTF-8?q?=E7=94=A8=E6=96=B9=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 54 insertions(+)
diff --git a/README.md b/README.md
index a3c3a3c..0ffe12e 100755
--- a/README.md
+++ b/README.md
@@ -67,6 +67,60 @@ server {
```
+## **WebSocket服务端启动(常驻内存模式)**
+
+```php
+
+首先注册一个websocket路由
+
+Router::ws('chat','/app/ws/Handle#ws');
+
+在Handle控制器继承WebSocketInterface接口实现接口中的方法
+
+use linkphp\swoole\websocket\WebSocketInterface;
+use swoole_http_response;
+use swoole_websocket_server;
+use swoole_http_request;
+use swoole_server;
+use swoole_websocket_frame;
+
+class Handle implements WebSocketInterface
+{
+
+ public function HandShake(swoole_http_request $request, swoole_http_response $response)
+ {
+ echo "server: handshake success with fd{$request->fd}\n";
+ }
+
+ public function open(swoole_websocket_server $svr, swoole_http_request $req)
+ {
+ echo "server: open success with fd{$req->fd}\n";
+ }
+
+ public function message(swoole_server $server, swoole_websocket_frame $frame)
+ {
+ echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
+ $server->push($frame->fd, "this is server");
+ }
+
+ public function close($ser, $fd)
+ {
+ echo "client {$fd} closed\n";
+ }
+
+}
+
+然后进入bin目录
+
+php ws start //启动
+php ws stop //停止
+
+websocket相关配置在conf/bin/ws.php内
+
+之后客户端发起 ws://127.0.0.1:9510/chat 连接将会触发注册的websocket路由
+
+```
+
## **PhpRpc服务端启动(常驻内存模式)**
```php
From 192bb53baa70468f305a81678f57549ed49e15c4 Mon Sep 17 00:00:00 2001
From: liugene <750688237@qq.com>
Date: 2018年8月26日 16:31:05 +0800
Subject: [PATCH 22/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=85=8D=E7=BD=AE?=
=?UTF-8?q?=E9=A1=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.DS_Store | Bin 6148 -> 8196 bytes
conf/configure.php | 4 +
src/runtime/log/2018-06-07.log | 324 ++++++++++++++++++
src/runtime/log/link-httpd.log | 4 +
src/runtime/log/ws.log | 304 ++++++++++++++++
.../6ed681c687cefbc5ee108f320eee1f65.c.php | 17 -
.../7103d428727f75b257e4e8f21b673bfc.c.php | Bin 2052 -> 234 bytes
.../8488f1b8fa698b4a0857d8ffce7aee70.c.php | 64 ++++
swoole-ide-helper.phar | Bin 0 -> 53143 bytes
9 files changed, 700 insertions(+), 17 deletions(-)
create mode 100644 src/runtime/log/2018-06-07.log
create mode 100644 src/runtime/log/link-httpd.log
create mode 100644 src/runtime/log/ws.log
delete mode 100644 src/runtime/temp/temp_c/6ed681c687cefbc5ee108f320eee1f65.c.php
create mode 100644 src/runtime/temp/temp_c/8488f1b8fa698b4a0857d8ffce7aee70.c.php
create mode 100644 swoole-ide-helper.phar
diff --git a/.DS_Store b/.DS_Store
index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..1f22e06ffefc7856068d80d3e257863144bc3df1 100644
GIT binary patch
literal 8196
zcmeHM&ubGw6n>MWbrTT-N}G$g7qN#>lD0MnQP!A(0WHPV3jUzYW@ECj*$K&}L1QEr
z#hYFP_2j{e7mxl2MFhcP{|5g74}2ドルMopHO9AJ )n
zoR#A8w?G^$jO&$MTD4qi;cVaS`j%pP*n5Kv+qc!F9G?!9=pU{QbkP%_tLQG{VT)
zurR246)1S{P|k-uLoS+6XeVd1dMY|cB&YKF`%j-`F3f6-lk?g|H%P)w*nlfgf*Xj-
z&;(n~Fi`A`q*w>qP#v-Qh;vP_l2`GgfL3t`{G)4V-rjs3We!&$GgAJsSLg!su!m2U
zhtC&?ZDZwYiM%+j^o+1SEOCf?gaCgoY1tS
zmfT5a`u)|l3t4?7mmg&HexZ=d>TByOgF#YTJeR*z-fcd5++W(nEswf3!
zuRxrK%&_zS#`N1ドルvrkM#R0=2sW~Km1l+02Q!~OdeF&dejwRNn!SXp6qLylq-mp=sH
fVEBh2_H{I6K8C;{M;yVTJ_H0Zs75I;Qw9D4^`w5aE@Piqz_pm2gF}!R
pBnTAa1`@77thzDrJM(0I8AV3M$)+;eJWLRCKt?lcj^~-f3;-dB4=?}#
diff --git a/conf/configure.php b/conf/configure.php
index a906656..8897a0b 100755
--- a/conf/configure.php
+++ b/conf/configure.php
@@ -25,5 +25,9 @@
//系统常用路径设置
'log_path' => CACHE_PATH . 'log/', //系统日志存储路径
+ 'default_return_type' => 'view',
+
+ 'dispatch_error_tmpl' => 'tpl/dispatch_jump',
+
];
diff --git a/src/runtime/log/2018-06-07.log b/src/runtime/log/2018-06-07.log
new file mode 100644
index 0000000..9516739
--- /dev/null
+++ b/src/runtime/log/2018-06-07.log
@@ -0,0 +1,324 @@
+[2018年06月07日T10:10:34+00:00]
+run Fatal Error:
+message: Uncaught Exception: 无法加载模块 in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php:30
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Router.php(138): linkphp\router\Dispatch->dispatch(Object(linkphp\router\Router))
+#1 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(79): linkphp\router\Router->dispatch()
+#2 [internal function]: linkphp\swoole\http\HttpdServer->linkphp\swoole\http\{closure}()
+#3 /Users/liujun/workspace/php/linkphp/vendor/linkphp/framework/src/linkphp/Kernel.php(32): call_user_func(Object(Closure))
+#4 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(85): linkphp\Kernel->then(Object(Closure))
+#5 {main}
+ thrown
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php
+line: 30
+
+[2018年06月07日T10:19:26+00:00]
+run Fatal Error:
+message: Uncaught Exception: 无法加载模块 in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php:31
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Router.php(138): linkphp\router\Dispatch->dispatch(Object(linkphp\router\Router))
+#1 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(79): linkphp\router\Router->dispatch()
+#2 [internal function]: linkphp\swoole\http\HttpdServer->linkphp\swoole\http\{closure}()
+#3 /Users/liujun/workspace/php/linkphp/vendor/linkphp/framework/src/linkphp/Kernel.php(32): call_user_func(Object(Closure))
+#4 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(85): linkphp\Kernel->then(Object(Closure))
+#5 {main}
+ thrown
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php
+line: 31
+
+[2018年06月07日T10:20:52+00:00]
+run Fatal Error:
+message: Uncaught Exception: 无法加载模块 in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php:31
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Router.php(138): linkphp\router\Dispatch->dispatch(Object(linkphp\router\Router))
+#1 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(79): linkphp\router\Router->dispatch()
+#2 [internal function]: linkphp\swoole\http\HttpdServer->linkphp\swoole\http\{closure}()
+#3 /Users/liujun/workspace/php/linkphp/vendor/linkphp/framework/src/linkphp/Kernel.php(32): call_user_func(Object(Closure))
+#4 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(85): linkphp\Kernel->then(Object(Closure))
+#5 {main}
+ thrown
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php
+line: 31
+
+[2018年06月07日T10:22:52+00:00]
+run Fatal Error:
+message: Uncaught Exception: 无法加载模块 in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php:31
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Router.php(138): linkphp\router\Dispatch->dispatch(Object(linkphp\router\Router))
+#1 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(79): linkphp\router\Router->dispatch()
+#2 [internal function]: linkphp\swoole\http\HttpdServer->linkphp\swoole\http\{closure}()
+#3 /Users/liujun/workspace/php/linkphp/vendor/linkphp/framework/src/linkphp/Kernel.php(32): call_user_func(Object(Closure))
+#4 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(85): linkphp\Kernel->then(Object(Closure))
+#5 {main}
+ thrown
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php
+line: 31
+
+[2018年06月07日T10:23:39+00:00]
+run Fatal Error:
+message: Uncaught Exception: 无法加载模块 in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php:31
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Router.php(138): linkphp\router\Dispatch->dispatch(Object(linkphp\router\Router))
+#1 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(79): linkphp\router\Router->dispatch()
+#2 [internal function]: linkphp\swoole\http\HttpdServer->linkphp\swoole\http\{closure}()
+#3 /Users/liujun/workspace/php/linkphp/vendor/linkphp/framework/src/linkphp/Kernel.php(32): call_user_func(Object(Closure))
+#4 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(85): linkphp\Kernel->then(Object(Closure))
+#5 {main}
+ thrown
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php
+line: 31
+
+[2018年06月07日T10:24:20+00:00]
+run Fatal Error:
+message: Uncaught Exception: 无法加载模块 in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php:31
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Router.php(138): linkphp\router\Dispatch->dispatch(Object(linkphp\router\Router))
+#1 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(79): linkphp\router\Router->dispatch()
+#2 [internal function]: linkphp\swoole\http\HttpdServer->linkphp\swoole\http\{closure}()
+#3 /Users/liujun/workspace/php/linkphp/vendor/linkphp/framework/src/linkphp/Kernel.php(32): call_user_func(Object(Closure))
+#4 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(85): linkphp\Kernel->then(Object(Closure))
+#5 {main}
+ thrown
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php
+line: 31
+
+[2018年06月07日T11:02:23+00:00]
+run Fatal Error:
+message: Uncaught Exception: 无法加载模块 in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php:31
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Router.php(138): linkphp\router\Dispatch->dispatch(Object(linkphp\router\Router))
+#1 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(79): linkphp\router\Router->dispatch()
+#2 [internal function]: linkphp\swoole\http\HttpdServer->linkphp\swoole\http\{closure}()
+#3 /Users/liujun/workspace/php/linkphp/vendor/linkphp/framework/src/linkphp/Kernel.php(32): call_user_func(Object(Closure))
+#4 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(85): linkphp\Kernel->then(Object(Closure))
+#5 {main}
+ thrown
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php
+line: 31
+
+[2018年06月07日T11:07:36+00:00]
+run Fatal Error:
+message: Uncaught Exception: 无法加载模块 in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php:31
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Router.php(138): linkphp\router\Dispatch->dispatch(Object(linkphp\router\Router))
+#1 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(79): linkphp\router\Router->dispatch()
+#2 [internal function]: linkphp\swoole\http\HttpdServer->linkphp\swoole\http\{closure}()
+#3 /Users/liujun/workspace/php/linkphp/vendor/linkphp/framework/src/linkphp/Kernel.php(32): call_user_func(Object(Closure))
+#4 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(85): linkphp\Kernel->then(Object(Closure))
+#5 {main}
+ thrown
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php
+line: 31
+
+[2018年06月07日T11:08:09+00:00]
+run NOTICE:
+message: Undefined index: default_theme_suffix
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/config/src/Config.php
+line: 127
+
+[2018年06月07日T11:08:09+00:00]
+run WARNING:
+message: file_get_contents(/Users/liujun/workspace/php/linkphp/src/resource/view/main/home/main): failed to open stream: No such file or directory
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/template/src/view/engine/Link.php
+line: 49
+
+[2018年06月07日T11:08:09+00:00]
+run NOTICE:
+message: Undefined index: set_left_limiter
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/config/src/Config.php
+line: 127
+
+[2018年06月07日T11:08:09+00:00]
+run NOTICE:
+message: Undefined index: set_right_limiter
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/config/src/Config.php
+line: 127
+
+[2018年06月07日T11:08:09+00:00]
+run Fatal Error:
+message: Uncaught Exception: 无法加载模块 in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php:31
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Router.php(138): linkphp\router\Dispatch->dispatch(Object(linkphp\router\Router))
+#1 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(79): linkphp\router\Router->dispatch()
+#2 [internal function]: linkphp\swoole\http\HttpdServer->linkphp\swoole\http\{closure}()
+#3 /Users/liujun/workspace/php/linkphp/vendor/linkphp/framework/src/linkphp/Kernel.php(32): call_user_func(Object(Closure))
+#4 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(85): linkphp\Kernel->then(Object(Closure))
+#5 {main}
+ thrown
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php
+line: 31
+
+[2018年06月07日T11:08:17+00:00]
+run NOTICE:
+message: Undefined index: default_theme_suffix
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/config/src/Config.php
+line: 127
+
+[2018年06月07日T11:08:17+00:00]
+run WARNING:
+message: file_get_contents(/Users/liujun/workspace/php/linkphp/src/resource/view/main/home/main): failed to open stream: No such file or directory
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/template/src/view/engine/Link.php
+line: 49
+
+[2018年06月07日T11:08:17+00:00]
+run NOTICE:
+message: Undefined index: set_left_limiter
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/config/src/Config.php
+line: 127
+
+[2018年06月07日T11:08:17+00:00]
+run NOTICE:
+message: Undefined index: set_right_limiter
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/config/src/Config.php
+line: 127
+
+[2018年06月07日T11:08:17+00:00]
+run Fatal Error:
+message: Uncaught Exception: 无法加载模块 in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php:31
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Router.php(138): linkphp\router\Dispatch->dispatch(Object(linkphp\router\Router))
+#1 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(79): linkphp\router\Router->dispatch()
+#2 [internal function]: linkphp\swoole\http\HttpdServer->linkphp\swoole\http\{closure}()
+#3 /Users/liujun/workspace/php/linkphp/vendor/linkphp/framework/src/linkphp/Kernel.php(32): call_user_func(Object(Closure))
+#4 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(85): linkphp\Kernel->then(Object(Closure))
+#5 {main}
+ thrown
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php
+line: 31
+
+[2018年06月07日T11:10:21+00:00]
+run Fatal Error:
+message: Uncaught Exception: 无法加载模块 in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php:31
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Router.php(138): linkphp\router\Dispatch->dispatch(Object(linkphp\router\Router))
+#1 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(79): linkphp\router\Router->dispatch()
+#2 [internal function]: linkphp\swoole\http\HttpdServer->linkphp\swoole\http\{closure}()
+#3 /Users/liujun/workspace/php/linkphp/vendor/linkphp/framework/src/linkphp/Kernel.php(32): call_user_func(Object(Closure))
+#4 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(85): linkphp\Kernel->then(Object(Closure))
+#5 {main}
+ thrown
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php
+line: 31
+
+[2018年06月07日T11:10:56+00:00]
+run Fatal Error:
+message: Uncaught Exception: 无法加载模块 in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php:31
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Router.php(138): linkphp\router\Dispatch->dispatch(Object(linkphp\router\Router))
+#1 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(79): linkphp\router\Router->dispatch()
+#2 [internal function]: linkphp\swoole\http\HttpdServer->linkphp\swoole\http\{closure}()
+#3 /Users/liujun/workspace/php/linkphp/vendor/linkphp/framework/src/linkphp/Kernel.php(32): call_user_func(Object(Closure))
+#4 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php(85): linkphp\Kernel->then(Object(Closure))
+#5 {main}
+ thrown
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Dispatch.php
+line: 31
+
+[2018年06月07日T11:22:44+00:00]
+run NOTICE:
+message: Undefined index: query_uri
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php
+line: 61
+
+[2018年06月07日T11:22:44+00:00]
+run NOTICE:
+message: Undefined index: query_uri
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php
+line: 61
+
+[2018年06月07日T11:24:51+00:00]
+run NOTICE:
+message: Undefined index: query_uri
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php
+line: 61
+
+[2018年06月07日T11:24:51+00:00]
+run NOTICE:
+message: Undefined index: query_uri
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php
+line: 61
+
+[2018年06月07日T11:25:28+00:00]
+run NOTICE:
+message: Undefined index: query_uri
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php
+line: 48
+
+[2018年06月07日T11:25:28+00:00]
+run NOTICE:
+message: Undefined index: query_uri
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php
+line: 62
+
+[2018年06月07日T11:25:28+00:00]
+run NOTICE:
+message: Undefined index: query_uri
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php
+line: 48
+
+[2018年06月07日T11:25:28+00:00]
+run NOTICE:
+message: Undefined index: query_uri
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php
+line: 62
+
+[2018年06月07日T11:26:10+00:00]
+run NOTICE:
+message: Undefined index: query_uri
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php
+line: 62
+
+[2018年06月07日T11:26:10+00:00]
+run NOTICE:
+message: Undefined index: query_uri
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php
+line: 62
+
+[2018年06月07日T11:30:00+00:00]
+run WARNING:
+message: Swoole\Http\Response::status(): Http request is finished.
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php
+line: 87
+
+[2018年06月07日T11:30:00+00:00]
+run WARNING:
+message: Swoole\Http\Response::end(): Http request is finished.
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php
+line: 88
+
+[2018年06月07日T11:35:58+00:00]
+run WARNING:
+message: Swoole\Http\Response::status(): Http request is finished.
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php
+line: 83
+
+[2018年06月07日T11:35:58+00:00]
+run WARNING:
+message: Swoole\Http\Response::end(): Http request is finished.
+file: /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/http/HttpdServer.php
+line: 84
+
+[2018年06月07日T11:49:45+00:00]
+run NOTICE:
+message: Use of undefined constant d - assumed 'd'
+file: /Users/liujun/workspace/php/linkphp/src/application/controller/main/Home.php
+line: 23
+
+[2018年06月07日T11:51:39+00:00]
+run NOTICE:
+message: Use of undefined constant d - assumed 'd'
+file: /Users/liujun/workspace/php/linkphp/src/application/controller/main/Home.php
+line: 23
+
+[2018年06月07日T11:52:21+00:00]
+run NOTICE:
+message: Use of undefined constant d - assumed 'd'
+file: /Users/liujun/workspace/php/linkphp/src/application/controller/main/Home.php
+line: 23
+
+[2018年06月07日T11:53:42+00:00]
+run NOTICE:
+message: Use of undefined constant d - assumed 'd'
+file: /Users/liujun/workspace/php/linkphp/src/application/controller/main/Home.php
+line: 23
+
diff --git a/src/runtime/log/link-httpd.log b/src/runtime/log/link-httpd.log
new file mode 100644
index 0000000..61beae9
--- /dev/null
+++ b/src/runtime/log/link-httpd.log
@@ -0,0 +1,4 @@
+[2018年06月20日 19:35:59 #52069.1] NOTICE Server is shutdown now.
+[2018年06月20日 20:17:59 #52141.1] NOTICE Server is shutdown now.
+[2018年06月22日 00:52:06 #53777.1] NOTICE Server is shutdown now.
+[2018年06月22日 12:01:22 #54299.1] NOTICE Server is shutdown now.
diff --git a/src/runtime/log/ws.log b/src/runtime/log/ws.log
new file mode 100644
index 0000000..2be2d6a
--- /dev/null
+++ b/src/runtime/log/ws.log
@@ -0,0 +1,304 @@
+[2018年06月24日 18:49:11 *57831.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 18:50:12 #57829.1] NOTICE Server is shutdown now.
+[2018年06月24日 18:50:24 *57847.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 18:50:41 #57845.1] NOTICE Server is shutdown now.
+[2018年06月24日 18:54:12 *57870.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 18:54:22 #57868.1] NOTICE Server is shutdown now.
+[2018年06月24日 18:54:45 *57887.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 18:55:22 #57885.1] NOTICE Server is shutdown now.
+[2018年06月24日 18:55:27 *57900.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 18:59:24 #57898.1] NOTICE Server is shutdown now.
+[2018年06月24日 18:59:27 *57914.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 19:00:19 #57912.1] NOTICE Server is shutdown now.
+[2018年06月24日 19:00:26 *57930.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught TypeError: Argument 2 passed to linkphp\router\Parser::match() must be of the type array, null given, called in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Parser.php on line 166 and defined in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Parser.php:26
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Parser.php(166): linkphp\router\Parser->match('chat', NULL, Array)
+#1 /Users/liujun/works
+[2018年06月24日 19:00:26 57929ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月24日 19:01:09 #57928.1] NOTICE Server is shutdown now.
+[2018年06月24日 19:01:13 *57942.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught TypeError: Argument 2 passed to linkphp\router\Parser::match() must be of the type array, null given, called in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Parser.php on line 166 and defined in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Parser.php:26
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Parser.php(166): linkphp\router\Parser->match('chat', NULL, Array)
+#1 /Users/liujun/works
+[2018年06月24日 19:01:13 57941ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月24日 19:02:01 #57940.1] NOTICE Server is shutdown now.
+[2018年06月24日 19:02:16 *57954.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught TypeError: Argument 2 passed to linkphp\router\Parser::match() must be of the type array, null given, called in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Parser.php on line 167 and defined in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Parser.php:26
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Parser.php(167): linkphp\router\Parser->match('chat', NULL, Array)
+#1 /Users/liujun/works
+[2018年06月24日 19:02:16 57953ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月24日 19:02:32 #57952.1] NOTICE Server is shutdown now.
+[2018年06月24日 19:05:20 *57978.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 19:06:41 #57976.1] NOTICE Server is shutdown now.
+[2018年06月24日 19:06:47 *57991.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught TypeError: Argument 2 passed to linkphp\router\Parser::match() must be of the type array, null given, called in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Parser.php on line 166 and defined in /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Parser.php:26
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Parser.php(166): linkphp\router\Parser->match('chat', NULL, Array)
+#1 /Users/liujun/works
+[2018年06月24日 19:06:47 57990ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月24日 19:10:45 #57989.1] NOTICE Server is shutdown now.
+[2018年06月24日 19:10:50 *58007.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 19:12:43 #58004.1] NOTICE Server is shutdown now.
+[2018年06月24日 19:12:47 *58026.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 19:13:22 #58024.1] NOTICE Server is shutdown now.
+[2018年06月24日 19:13:26 *58038.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 19:14:06 #58036.1] NOTICE Server is shutdown now.
+[2018年06月24日 19:14:11 *58053.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 19:14:51 #58051.1] NOTICE Server is shutdown now.
+[2018年06月24日 19:14:54 *58063.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 19:15:09 #58061.1] NOTICE Server is shutdown now.
+[2018年06月24日 19:15:13 *58075.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 19:16:16 #58073.1] NOTICE Server is shutdown now.
+[2018年06月24日 19:16:20 *58088.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 19:16:29 #58086.1] NOTICE Server is shutdown now.
+[2018年06月24日 19:21:04 *58102.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 19:21:45 #58100.1] NOTICE Server is shutdown now.
+[2018年06月24日 19:21:50 *58115.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 19:21:57 #58113.1] NOTICE Server is shutdown now.
+[2018年06月24日 20:01:43 #58164.1] NOTICE Server is shutdown now.
+[2018年06月24日 20:02:23 #58177.1] NOTICE Server is shutdown now.
+[2018年06月24日 20:02:35 #58186.1] NOTICE Server is shutdown now.
+[2018年06月24日 20:06:22 #58199.1] NOTICE Server is shutdown now.
+[2018年06月24日 20:36:23 #58220.1] NOTICE Server is shutdown now.
+[2018年06月24日 20:40:55 #58273.1] NOTICE Server is shutdown now.
+[2018年06月24日 20:44:54 #58289.1] NOTICE Server is shutdown now.
+[2018年06月24日 20:50:17 *58311.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught Error: Call to a member function open() on null in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php:52
+Stack trace:
+#0 {main}
+ thrown in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php on line 52.
+[2018年06月24日 20:50:17 58310ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月24日 20:50:17 *58312.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught Error: Call to a member function message() on null in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php:60
+Stack trace:
+#0 {main}
+ thrown in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php on line 60.
+[2018年06月24日 20:50:17 58310ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月24日 20:50:20 *58313.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught Error: Call to a member function message() on null in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php:60
+Stack trace:
+#0 {main}
+ thrown in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php on line 60.
+[2018年06月24日 20:50:20 58310ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月24日 20:50:21 *58314.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught Error: Call to a member function message() on null in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php:60
+Stack trace:
+#0 {main}
+ thrown in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php on line 60.
+[2018年06月24日 20:50:21 58310ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月24日 20:50:25 #58309.1] NOTICE Server is shutdown now.
+[2018年06月24日 20:51:01 #58325.1] NOTICE Server is shutdown now.
+[2018年06月24日 20:54:57 #58339.1] NOTICE Server is shutdown now.
+[2018年06月24日 20:57:29 #58353.1] NOTICE Server is shutdown now.
+[2018年06月24日 21:57:10 #58423.1] NOTICE Server is shutdown now.
+[2018年06月24日 21:58:14 #58437.1] NOTICE Server is shutdown now.
+[2018年06月24日 21:58:26 #58451.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:00:31 *58478.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught Error: Call to a member function HandShake() on null in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php:27
+Stack trace:
+#0 {main}
+ thrown in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php on line 27.
+[2018年06月24日 22:00:31 58477ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月24日 22:00:55 #58476.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:01:56 #58489.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:06:34 #58509.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:06:39 *58531.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught Error: Call to a member function message() on null in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php:94
+Stack trace:
+#0 {main}
+ thrown in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php on line 94.
+[2018年06月24日 22:06:39 58529ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月24日 22:09:02 #58528.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:09:08 *58546.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 22:09:16 #58543.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:18:59 *58578.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught Error: Call to a member function message() on null in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php:95
+Stack trace:
+#0 {main}
+ thrown in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php on line 95.
+[2018年06月24日 22:18:59 58576ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月24日 22:19:15 #58575.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:19:30 *58592.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 22:20:14 #58589.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:20:20 *58606.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 22:21:59 #58603.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:22:03 *58620.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught Error: Call to a member function HandShake() on null in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php:93
+Stack trace:
+#0 {main}
+ thrown in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php on line 93.
+[2018年06月24日 22:22:03 58619ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月24日 22:32:02 #58618.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:34:41 *58661.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 22:36:51 #58658.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:36:57 *58681.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 22:37:46 #58678.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:37:50 *58695.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 22:39:47 #58692.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:39:55 *58711.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 22:47:16 #58708.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:47:23 *58745.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 22:47:32 #58742.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:49:01 *58770.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月24日 22:49:06 #58767.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:51:08 *58789.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught TypeError: Argument 1 passed to linkphp\swoole\websocket\WebSocketServer::linkphp\swoole\websocket\{closure}() must be an instance of Swoole\Http\Request, instance of Swoole\WebSocket\Server given in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php:92
+Stack trace:
+#0 {main}
+ thrown in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php on line 92.
+[2018年06月24日 22:51:08 58787ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月24日 22:52:10 #58786.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:52:14 *58805.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught ArgumentCountError: Too few arguments to function linkphp\swoole\websocket\WebSocketServer::linkphp\swoole\websocket\{closure}(), 2 passed and exactly 3 expected in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php:92
+Stack trace:
+#0 {main}
+ thrown in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php on line 92.
+[2018年06月24日 22:52:14 58803ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月24日 22:52:22 #58802.1] NOTICE Server is shutdown now.
+[2018年06月24日 22:54:04 *58837.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 15:12:16 #58834.1] NOTICE Server is shutdown now.
+[2018年06月25日 15:12:27 *59541.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught Error: Call to a member function message() on null in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php:94
+Stack trace:
+#0 {main}
+ thrown in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php on line 94.
+[2018年06月25日 15:12:27 59539ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月25日 15:12:45 #59538.1] NOTICE Server is shutdown now.
+[2018年06月25日 15:13:42 *59557.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 15:13:57 #59554.1] NOTICE Server is shutdown now.
+[2018年06月25日 15:55:33 *59649.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 15:56:00 #59647.1] NOTICE Server is shutdown now.
+[2018年06月25日 15:56:06 *59663.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 16:20:19 #59660.1] NOTICE Server is shutdown now.
+[2018年06月25日 16:22:49 *59734.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 16:23:16 #59731.1] NOTICE Server is shutdown now.
+[2018年06月25日 16:28:57 59777ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=0, signal=11
+[2018年06月25日 16:32:12 #59776.1] NOTICE Server is shutdown now.
+[2018年06月25日 16:32:18 *59801.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught Error: Call to a member function HandShake() on boolean in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php:73
+Stack trace:
+#0 {main}
+ thrown in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php on line 73.
+[2018年06月25日 16:32:18 59800ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月25日 16:32:51 #59799.1] NOTICE Server is shutdown now.
+[2018年06月25日 16:45:29 *59836.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 16:49:27 #59833.1] NOTICE Server is shutdown now.
+[2018年06月25日 16:49:34 *59857.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 16:50:11 *59861.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 16:51:50 #59854.1] NOTICE Server is shutdown now.
+[2018年06月25日 16:57:44 #59874.1] NOTICE Server is shutdown now.
+[2018年06月25日 16:57:54 *59910.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught TypeError: Argument 1 passed to app\ws\controller\Handle::HandShake() must be an instance of Swoole\Http\Request, instance of Swoole\WebSocket\Server given, called in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php on line 94 and defined in /Users/liujun/workspace/php/linkphp/src/application/ws/controller/Handle.php:20
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/We
+[2018年06月25日 16:57:54 59909ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月25日 16:58:19 #59908.1] NOTICE Server is shutdown now.
+[2018年06月25日 16:58:46 *59927.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 16:58:54 #59924.1] NOTICE Server is shutdown now.
+[2018年06月25日 16:59:16 *59942.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 16:59:22 #59939.1] NOTICE Server is shutdown now.
+[2018年06月25日 16:59:54 *59955.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 16:59:59 #59952.1] NOTICE Server is shutdown now.
+[2018年06月25日 17:18:56 *59994.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 17:20:50 #59990.1] NOTICE Server is shutdown now.
+[2018年06月25日 17:21:15 *60009.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 17:22:05 #60006.1] NOTICE Server is shutdown now.
+[2018年06月25日 17:22:14 *60022.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 17:34:05 #60019.1] NOTICE Server is shutdown now.
+[2018年06月25日 17:34:14 *60057.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught Error: Call to a member function rewind() on null in /Users/liujun/workspace/php/linkphp/vendor/linkphp/event/src/Event.php:69
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/framework/src/Application.php(245): linkphp\event\Event->target('routerMiddlewar...')
+#1 /Users/liujun/workspace/php/linkphp/vendor/linkphp/router/src/Parser.php(92): framework\Application::event('routerMiddlewar...')
+#2 /Users/liujun/workspace/php/linkphp/vend
+[2018年06月25日 17:34:14 60055ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月25日 17:34:34 #60054.1] NOTICE Server is shutdown now.
+[2018年06月25日 23:30:33 #60069.1] NOTICE Server is shutdown now.
+[2018年06月25日 23:30:52 *60367.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 23:31:36 #60364.1] NOTICE Server is shutdown now.
+[2018年06月25日 23:32:13 *60387.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 23:32:33 #60384.1] NOTICE Server is shutdown now.
+[2018年06月25日 23:32:39 *60403.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 23:32:40 *60404.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 23:32:55 #60400.1] NOTICE Server is shutdown now.
+[2018年06月25日 23:37:08 *60430.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 23:37:50 #60427.1] NOTICE Server is shutdown now.
+[2018年06月25日 23:38:06 *60447.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 23:38:41 #60444.1] NOTICE Server is shutdown now.
+[2018年06月25日 23:38:46 *60463.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 23:40:05 #60460.1] NOTICE Server is shutdown now.
+[2018年06月25日 23:40:12 *60477.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 23:40:41 #60474.1] NOTICE Server is shutdown now.
+[2018年06月25日 23:42:09 *60497.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月25日 23:43:28 #60494.1] NOTICE Server is shutdown now.
+[2018年06月26日 00:17:07 *60565.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月26日 16:13:20 #60562.1] NOTICE Server is shutdown now.
+[2018年06月26日 16:13:37 *61363.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月26日 16:16:32 #61360.1] NOTICE Server is shutdown now.
+[2018年06月26日 16:17:31 *61395.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月26日 16:17:37 #61392.1] NOTICE Server is shutdown now.
+[2018年06月26日 16:36:24 *61429.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught Error: Call to undefined method linkphp\swoole\websocket\WebSocketContext::context() in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php:75
+Stack trace:
+#0 {main}
+ thrown in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php on line 75.
+[2018年06月26日 16:36:24 61428ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月26日 16:39:09 #61427.1] NOTICE Server is shutdown now.
+[2018年06月26日 16:42:01 #61445.1] NOTICE Server is shutdown now.
+[2018年06月26日 16:45:04 #61462.1] NOTICE Server is shutdown now.
+[2018年06月26日 16:45:29 #61478.1] NOTICE Server is shutdown now.
+[2018年06月26日 16:46:33 #61492.1] NOTICE Server is shutdown now.
+[2018年06月26日 16:47:23 #61504.1] NOTICE Server is shutdown now.
+[2018年06月26日 16:48:44 #61520.1] NOTICE Server is shutdown now.
+[2018年06月26日 16:48:57 #61537.1] NOTICE Server is shutdown now.
+[2018年06月26日 16:49:39 #61550.1] NOTICE Server is shutdown now.
+[2018年06月26日 17:11:20 *61598.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月26日 17:12:18 #61595.1] NOTICE Server is shutdown now.
+[2018年06月26日 17:12:25 *61613.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月26日 17:12:34 #61610.1] NOTICE Server is shutdown now.
+[2018年06月26日 17:12:54 *61629.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月26日 17:15:48 #61625.1] NOTICE Server is shutdown now.
+[2018年06月26日 17:16:10 *61647.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught Error: Undefined class constant 'getContext' in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketContext.php:42
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php(125): linkphp\swoole\websocket\WebSocketContext::get(1, 'meta')
+#1 {main}
+ thrown in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketContext.php on line 42.
+[2018年06月26日 17:16:10 61645ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月26日 17:16:25 #61644.1] NOTICE Server is shutdown now.
+[2018年06月26日 17:16:42 *61663.0] NOTICE zm_deactivate_swoole (ERROR 9003): worker process is terminated by exit()/die().
+[2018年06月26日 17:17:40 #61660.1] NOTICE Server is shutdown now.
+[2018年06月26日 18:16:35 *61838.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught ArgumentCountError: Too few arguments to function linkphp\swoole\websocket\Dispatcher::handshake(), 0 passed in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php on line 61 and exactly 2 expected in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/Dispatcher.php:31
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php(61): linkphp\swo
+[2018年06月26日 18:16:35 61837ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月26日 18:16:54 #61836.1] NOTICE Server is shutdown now.
+[2018年06月26日 18:18:17 *61852.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught framework\Exception in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/Dispatcher.php:42
+Stack trace:
+#0 /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php(61): linkphp\swoole\websocket\Dispatcher->handshake(Object(Swoole\Http\Request), Object(Swoole\Http\Response))
+#1 {main}
+ thrown in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/Dispatcher.php on line 42.
+[2018年06月26日 18:18:17 61851ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月26日 18:18:56 #61850.1] NOTICE Server is shutdown now.
+[2018年06月26日 18:19:21 #61872.1] NOTICE Server is shutdown now.
+[2018年06月26日 18:20:17 #61889.1] NOTICE Server is shutdown now.
+[2018年06月26日 18:21:25 #61907.1] NOTICE Server is shutdown now.
+[2018年06月26日 18:29:39 #61922.1] NOTICE Server is shutdown now.
+[2018年06月26日 19:01:22 #61945.1] NOTICE Server is shutdown now.
+[2018年06月26日 19:01:50 #62026.1] NOTICE Server is shutdown now.
+[2018年06月26日 19:03:16 #62042.1] NOTICE Server is shutdown now.
+[2018年06月26日 19:40:13 #62061.1] NOTICE Server is shutdown now.
+[2018年06月26日 19:40:20 62192ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=0, signal=11
+[2018年06月26日 19:41:03 #62191.1] NOTICE Server is shutdown now.
+[2018年06月26日 19:41:12 *62205.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Uncaught Error: Access to undeclared static property: linkphp\swoole\websocket\WebSocketServer::$fds in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php:36
+Stack trace:
+#0 {main}
+ thrown in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php on line 36.
+[2018年06月26日 19:41:12 62204ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月26日 19:41:26 #62203.1] NOTICE Server is shutdown now.
+[2018年06月26日 19:41:38 62219ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=0, signal=11
+[2018年06月26日 19:41:45 #62218.1] NOTICE Server is shutdown now.
+[2018年06月26日 19:42:27 62237ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=0, signal=11
+[2018年06月26日 19:42:31 #62236.1] NOTICE Server is shutdown now.
+[2018年06月26日 19:42:55 62249ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=0, signal=11
+[2018年06月26日 19:42:59 #62248.1] NOTICE Server is shutdown now.
+[2018年06月26日 19:43:21 62262ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=0, signal=11
+[2018年06月26日 19:43:29 #62261.1] NOTICE Server is shutdown now.
+[2018年06月26日 19:44:08 62278ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=0, signal=11
+[2018年06月26日 19:44:12 #62277.1] NOTICE Server is shutdown now.
+[2018年06月26日 19:44:23 62291ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=0, signal=11
+[2018年06月26日 19:44:28 #62290.1] NOTICE Server is shutdown now.
+[2018年06月26日 19:45:05 62307ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=0, signal=11
+[2018年06月26日 19:45:10 #62306.1] NOTICE Server is shutdown now.
+[2018年06月26日 19:45:30 #62323.1] NOTICE Server is shutdown now.
+[2018年06月26日 19:47:25 *62352.0] ERROR zm_deactivate_swoole (ERROR 503): Fatal error: Swoole\Table::set(): the swoole table does not exist. in /Users/liujun/workspace/php/linkphp/vendor/linkphp/swoole/src/websocket/WebSocketServer.php on line 37.
+[2018年06月26日 19:47:25 62351ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=255, signal=0
+[2018年06月26日 20:13:19 #62350.1] NOTICE Server is shutdown now.
+[2018年06月26日 20:13:33 62465ドル.0] WARNING swManager_check_exit_status: worker#0 abnormal exit, status=0, signal=11
+[2018年06月26日 20:13:54 #62464.1] NOTICE Server is shutdown now.
+[2018年06月26日 20:19:20 #62488.1] NOTICE Server is shutdown now.
+[2018年06月26日 20:20:00 #62504.1] NOTICE Server is shutdown now.
+[2018年06月26日 20:25:09 #62528.1] NOTICE Server is shutdown now.
diff --git a/src/runtime/temp/temp_c/6ed681c687cefbc5ee108f320eee1f65.c.php b/src/runtime/temp/temp_c/6ed681c687cefbc5ee108f320eee1f65.c.php
deleted file mode 100644
index 959fd79..0000000
--- a/src/runtime/temp/temp_c/6ed681c687cefbc5ee108f320eee1f65.c.php
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/runtime/temp/temp_c/7103d428727f75b257e4e8f21b673bfc.c.php b/src/runtime/temp/temp_c/7103d428727f75b257e4e8f21b673bfc.c.php
index 97ec3ac24718ca235d1163dd2ccea0cac4dd615f..d754fd7c51d6789f0ded0d877d2852f1e79a668d 100644
GIT binary patch
delta 89
zcmZn>c*QuukiFQ-z)DHUdNMm(jvE)JO-W`+PO6<#vjd7wxc#)`=td%fz1giy6i1nc YxNMU0Q!4Ga5K4ej5FwzFlH43S0KQTifB*mh literal 2052 zcmeHIU2obj6y_a2;+c{n#jVC?Pq6o`cUz1`u(<=4^q$h{qwzrmj-+}+}b^gu;Z4etjBFjrPA4?%MfgP^pM$B!)D$ro{NZ5H^5tAnjN5=owKXcn;)Zr
zaenh{cwBWt8As}exPM&z;KU@k5lT5fq+hvM^g*LDJe2oyVn#XYGf7Kns=b&Cd76>z
zvs?y;U1pdYo`lELXG%W^zqNTN@-KO!kp><|dqbi%1${qkcz0^xgywvfnz=P9{C;5Yjmku
zuXD0m9pW{0NXIN_9kU3EB-AykTeegY9aP-)^|KyoyR|8n$J#zE>w^{b)UaMFzBQ=g
zNYC@WdmHDrx#09;@a)r(G~D5GbPPZ}~P
z7XU*qD%cYqR5*APXw8(}3F(DTKn2rvxlk~9{8gq?Jq-wm;UuaipHNwl0|Co&MNB-I
zjR3d;^hzKg8pjxiwz?Y%SNntvDb|g-%?)utS%z{o#Le;`5KDErkm*P_9lmvF?Kj*D
z!86f9S`ZJ-=tdOaC1N27o&mJYR{9sg)OsqW;d8))27o}>o|_Up&?7gK+H`963MW&>
zlF3=hr{wynSm^w55uZzsQAv3!A6JUva9FguwVI}e0&*U0GmAtEq{zYkx&aQ7DIB~~
zhSfy~fnOA1xjxpZ*qZUcG)~}c|1B>w|Jw2#{Z~p}I5XDf*Mq8W`rjM)e{Y7r0gA$$
Ai~s-t
diff --git a/src/runtime/temp/temp_c/8488f1b8fa698b4a0857d8ffce7aee70.c.php b/src/runtime/temp/temp_c/8488f1b8fa698b4a0857d8ffce7aee70.c.php
new file mode 100644
index 0000000..f39ca70
--- /dev/null
+++ b/src/runtime/temp/temp_c/8488f1b8fa698b4a0857d8ffce7aee70.c.php
@@ -0,0 +1,64 @@
+
+
+
+
+
+ Websocket
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/swoole-ide-helper.phar b/swoole-ide-helper.phar
new file mode 100644
index 0000000000000000000000000000000000000000..a22c22ba9dc2adce0ad70d8f9ecc5cff18f119f9
GIT binary patch
literal 53143
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ドル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ドルhEap8j)_2zf5-n1^!!Uyd{cx!dVJjBl3fHdoR0B>L*@eJinHX44}g
zv0`*muCULI4#&;k?+&|X?JOql>%13|S5gXRh{XT7Tl=J^@PvXmR!&Hwv!VyJYcaN+
zj6jW_Cg!D@_&7s=&ybAEKI`+>QyjU0ZzKb8x^KCtb}3+|ru$R``Nb`KIbHwMA)%N#
ze7K0ehu#n%-3%r%7*aTKHo^=LyLbOPU0R+B@0Sw6t%J1$IL#)xQ*noQ#>Ca)xEWNY
zkIGd`IbYs-kAB=JaqCDS?XLB6`9f3CKod={`i60s1ZBuhYlVPWvo8bufoWmyiUy@9
zYVVuH5)E)ijrMGqw4d%8?pvXWgk5#zww)0!)VWY6WUnV9-(2dr0^ZVT59@t@P!OLs
z%dwWoBrnYU=qE(rP>@1X!-aQO?vO}*Bn*Xt(%7m`U$sh3{;P8rSV)yGY3mpmv>lISG&Cs=LZd1QD)UeKv2sYd*XQ%A{@c{(SYF
z@Z*H)NDMZtrUScPOZV`RVsw
zK9{zQ-0=uyldAHqjBwwd_WxQtIe)qZ+4kij#6QB8*4W0ocjC#L7>T7RoBOf58@Imq
zJN^nZEje@iO|32;i;|C;GblA|2ydE|G+!jp;)Z<2nvd^hno0<1d~#ue&bko=eqr1e zq63FPDlTSEZ%bEI_6{F7mCbNZm%AM7~gq}(@s}JRP;iH>UACb02-Y8HGEGFJ^jO=a@zh{eqDL6%T
z^v;q+Lk4U`_f00~_B4^Vi)=Z0f%)?tQJbIrck5qhHG&n*MjTxpRP}5=>nYD&>4nb+
z8U#Iy_T@em%)B?6)soFH3ドル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ドルRi&_
z*?z!M@DC*$?Vp=!nH&$mcL^Sn`k-}x`0?88Ra$O#MmuX)JLyV0hRe_^;BC2Oc0v4J
z)bLZ;e#~y=u>^0NljHXr-Ie@yxiMOG^F$hCm4cc+KPu
zwzgOoNsNk-f~m64{;F<5pf;{qhza@_qrb5u;pvxb?c_r?h}vsb>{`NpC`SuJe1;61Vv0}7j
zt}hJ2s;_qR@OcOIl|QimjHDZxv-KT+1ZrtT&NVGFYqXIV@##F71w@~_OxU__~WW!}@5|{PEEP#ZDP|ma|3m=*r{(8vu1x>jWtw{
zpB2DuSuxnHW7k5d^R8Kw0ドルB^rS8aF;EUQ!Z0E<(7)i2(4`$qb>ulg|D4L&{K|F}Ys
zw>t3W`&r2aiGahkwS}KQ4)#_U{k2tsB)PCO+kWhB_dC1Clwnum!(J4slj{Z5+6S1E
zHF5;7K4a0aUl`l(p^~g0x$^xmXap^1G%owzK7Q7wS*`S-cY9Y*5BSpetv{WyeLwby6bZk^o21$&*=xFQ+`w
z4IXIGp;hf|G|BVVnA)7hlP+bW{iLzr*50U@=YS#f?Ktbzz;}35)AgywHFkb7ycg*~
zkww@!VeWa(SG|@p>{W%!_8;0SDZlks^(ZP}ZKe0Sx`OoCfT#2*w1H#;B&tc0_)#VA
zyTgI&iR+G>SPw~<6)%nm5^k-<`>;p_aL(7KAw9&A)T6o{c+VVTnO?~qiv~wM1XtQ%
zdnqz=ridvpC29w|`Pv4jn)AMM6R?gN0y}ko%hnObF@T#r3dN@B!w?8>AHbs(Fo}x9
z7A%WtaKct`2-7LnKdF8bOgwrtyV`xHyWh3e7$NBH$vEgEGB}?B#!phO_jT=
zeo%$jr@Nlgsx0cyo!oAb#hb}`2;}=SVw`d%I;`Plf87b9e%|4a{*q#zKn0FvtFq~H
z^@(SzTn7USe`;bhS8T7WiJs67X1@uBr!v_3?*5Obk$s`L8~6{W^6Ba- hUJgNn&Rhm%5UiU8uT)-8Go);IT1ak#Kq}4
zNBxW`yk;a{kG(lAxVP{3@FJ+tG#^DxaeAAS$QC5PweLj~A>n=7@{$PD1{2bR8R3?-
zg*vSy0>NQc_=cg*5g9#!;-N3>=C_uCK+MhMXOpiR`u6Xdq@N1I0-!$Y_iM|u$_pP%
zYli+%yRotegCd90qP#H`wcs_Hd7QbZ@J_O1-iKCU`m4cqV>^x9wGH#BlLxnaG_{+w
z=)tdXd>o*;1)-hYonH-xmU~IdT*?juKPugD20!y`m7;H~e4DF-)^j>Rg
zru6hdKAw?Ka`VfdYQ78_`^LKz^r$ySxhc5mXJhrp!>1(6q=+D1(BrDv~*$#q#F$z;FfzzJdNvvdSAVBD8XR9g!Z}7=3C|7GufR
zeAT4*YxuuIqFwm|@M*R&^`C0`7w%vX8x;&w$uX#}Ej~W_cuk$*Q%rB5Le=B`c@cG+
zcQ+i6mwL_S)-kXKknP4iY8r@{GDVIwthHX1*S1<%e||k8;r{{v3!u3<$f%solvfqh zNdJQ*k=}J;bD_1GgsskdOAQvSK?V_$+)k$CS)^S})H22fH-o!}EotukM9xfJ&>Yty
ze6?_5@D81-=gOJ_Z9-IZ2XS`5mi8T{IjH06OpzowG~xPkXODhhC?3N=BF!qT({;Rz
z`;C%4^RpX$cROaO(}hxk4hp}17GBBPIm+VQSBh39{CaS!9VdlU`@<55_+akiuc}se zY&<_d!)q&~g$x#mm>~&3Y2W$q4Y>pa5xvKO)id75)Z@6(Wyz3ドルuDF_OX&*Y}5RLyx
zNEaL)w%C~b^J6Ge%;VP>TN3ixY{N{Lj~0cQN+u}ek=-)f*59M+mqi-f(0XE9i)kwy
zf+b?ikz4<9=&n8?o79ans;5ds@7>6W#}vfx#j7Y;(Enhn4c!y>NV8wTm*lL;5;Qie
zA8K8GwqtZ-8_!zt4V%U@ypZce>^DUFUioS~LgUtZkiw-t>@sfJE^p)gHDDZ{AZ)i~
zbW}<$ce{xq(a3(7;rd1jr%zZtIjg&Y~|7S-LCF2R_`VC_~a7oYq33kN=$
z-)Ln|VW%i;?MINBMz{c`W_IG~q;C?Rtzeq^@<3ulkbvwsf0{9`?&ot{!yxkc%%k>3
zNQPOvou2zQ^7*IVmDuXYeao7hCpd%eB`h~&hX;2weE-70C^q=6+&_kuM7wiF^!Y=H
z+>bo{F_
EF{B2$-kBp8JoCLwm{Y1Xt`f4^z@eP3z#zt9kGz#dTe8pme!J(EWY3R
zV~c3mvB13fc;yhRIcq}XJ@8`vi^!7?+PUwB1hq<)eoa9xs%o`azj>XTxjbh=(Nrq$
zkB`*;IbOeyrnz~|9J1z!GxH;A?_)c^I(PFG=Ypm6;!Obp-k(_A`U{8)XW*uVE47a$
zMq!X6UW>J8hwmMHJxGBQ1%!!(@i7UkmcUGlev@WKYX_gO*g*c*_fQZ)juO>AGQxcil;e=3PjW=$%ZvfVoUFJIlG1
zZ@n_t)}DZ@`Lw=?O_bTIOeNTe?Y3BztcX!@Gp&kz!B#O8z@-wbTz@;7;Qlz1blE>k
zlnN&}o~)H9MUD^up}ee)4WAerOEuiyYSbQv!PGPwXRIp^x7ドルYw$&rIcQ}VuorOumW
zVLji9?rC31_cf*C#@AoWHd;Hco;;^X^0EI}8(+SUO)L6B)4Mn$_REj%9Pokya!|>^
zVE|+dRvI$?%BS>nzqFHSKT~3M4v$Nw!_QrBBoz0`YLXb{BUHMe^#T7iCinNpn)`td
zo3noy-cNkSoDDwt=F^SJHqyeEsWDafW?OAQEOPcBZeW=gf7(U}Dck}BBWeBR7G?hw
z6IzjB0}J!uPTQp9RyKyvo+O@DEM8Ji6?N?)s;rAn)nt(}n>7{t*hfmT;Vmf-@y`@I
zINOz0L`BMhY3mx(ycNA6&y7s;Yhni0LGe8;5C~)*Paey+%NVymZ#e>Y*C>&YU@>D{
zVM9^r6K;mVH;MzA2;nS&FM2ksce_LnBce%Bz$Gjx8kW!R`JRaC%J|19<;o8&eqxt^id!pn zE$%o2d~82%RIcj8WtS*mmgPTQe5J*}`*X~Ah6{&bHJvbu@#!vwVbbYjALUev7GryA zsohepYJR#g%slq#B1N`tqP1yoZ26<3m`ni1dbo%saia4e!4nrg-gd)f zfyCCs{JRbg$?grnK=U!Mgcgk<7gzq-^rd^i3z*>5D_=E;T
zoSV_EugefdhUw1v(QZUQpI6G~m9>Lb;?{znQGc2$iQG&{)&J@=$yS)N{Eib7<9$h4 zO`Pqkz&u0VJEYYrOQb~DP0KT(el;=-h2+h*8GE%3S76ドルEn5V*mDDa{-0=^uqM%Og_ocyuFuV?@{1gkvZJ?}?}Y42OTA_C=$cu#8sMSeno|NZ5CDigv|T~E}8b@ah9T3I9L
z`Cz9zQ>$;~U@<$&32e2w5lyoylrcrvnjg&3y4cfwl;rk{t~krztpqt6-)hz|ys9d* zaB+Orq0BsKdL5}`_HE>fq}AaX0XdyifUscs5x6uRH19_}-stymlu8Qm^5ドルBT7i0
zPe7K(aUD;aG+xalk-}6UfS6Xl_?y7pjCSQ$tS`}uIgGW`>7$L99x3+2*{a>Mdl;T|
z3TUa%D?UzoS>837m_tjFons+2UrrF&wAy@6b6tSDWVK);UO%DYVnZ8X6zCy$nmPqW2SF&9f
z&0Zpvs~b4*spxa@cPxK6{BgLBRJg!F)=tL3%FFb&Ug^fy1_lOUU$j!elD9%zb3Q4~
zg(MMn?ryz}yqQ8M>Bq%XN|K*W_Ptr0You3oNrS~DV!V>NmXE*w#P|+OX;>}EXFa^_
zvt7fko?etGNg2;82zgDhs!l;9LuA8>pn9^2$PJ=
z;MylY9~CU%MwbwW;T6-Gf3dvM{NZ2+6D__)la{suBPp`Ec6~$mM5-hl2V?an{x?uB
zuZj2oYejM6M?VO`spI}cJ~?dgYb_=GS-1v~<9tmkk8drxpvwckjje@iibn#fmfwgp zW{MhMQZd#0QRB!}KJjdTl8Hbyu!3!BHF2-{lyH}X$-aToN)Mn`<^@l5eu+e0m)g@i>k@VUXLSHYD2_(Up8K;`0xlm
z>b-)j1ym2ZU#aS}1wA_yd*1OV
zt~2TmK4DKtR|c-N-5~p0gRo$tn{sOVpv#BE2&Cv-tn)ms&gok6k4n5Xge
zcpI|}$x1QZq@GTVn)HOu212Fvv-vI#)m}{sx4#n(5ffSeLSK)-hrvg)bfdTGUtO2^
z`E6e8QK}7FCtj_kuY$hUcJYp_pF*wBmD8Y-?HW<+5&w7zap9fjpr+dztm3sc(Rd#k>^BY{r_jY)-As^`YH5+W7DR=t;zC}^xip!YlS7~FLPPX6
zZ)LSRY{R;bu@pyPy_aR>T0x0eRsv|Bt_&WS?X0y*OlBmrnqW9AL2B5}D7d9haB!s*
zIeFhm?bc12Vy1Vzx^#Vf_5SwjpAOXR3CLr+o>je4FnhoWZB
z`kH0Hj7R)^DDpf}o>zRT%TO0LPCKLRkhoHvct5XV`|WGTC?(YSQW%EXO$A5{CuIsA
zvl$|^QAeHYd1)FeZzK9&NOu^^;XOlpQ5`rmxm{!XRQE;yl@`M*54kO=#drFQy|@NP
zP9I^(>KNYa+a(vt)93H&!M|qykpFSwOPP;vLznRfH|;u5l&RBCl*R2_%lw6K`-S_9
zUAeATw-bR~QOavLb8_v9A2SofHOD{_Pj%V{U5T%i#gs8UD1GVGXKcHx>dS7q@zbl!
zLO`ps)~`HnhFjZrl4G(zZ<796uu3b8ztihpqn_k&lb=?h6g?afv4_;1+jw-FTRFgt>#6bhOT@
zNGcU`;<#&kws+~&zm1yu+ew%9$yz2lccxg&5o0pak(y6d>QSOdCBX*`b=PMjNQUlX
zadYIXwv^_RD5O^xmZMGZm?G{4H{I!eNLG_Wt;utIWf(a{9@zo9;>Q4Q9Z0M?Jjz2-
zocZX|Xwr!NY)|K@^0b*DNhh*?P_!zxSZlQ~yLa;n+r$g$HB})4XFh@18?lv^sxg*J
zxJ)0@f@G0-_i#uhtqS03u;i)SZ$IeO&8s?$oD=J}MELv3FsiR@Iwx`!h51n0H4&|L
z=b_=+UMmr@dU9R$I$aMl@tf#zQ^IB*i*?lT_~;!|+x+D%zV=IweaAU#lf74k!v3$N##g&%1SXW
zjVde`V&a>Jp)h`cY~9b)yPFG%r=;p8?|0u6K6od((o|}6J(9!QvldG?L_nJ2!BlS0
z7}9ZPaJ%$QC4T`5N-45WSMYTjdz}IA{wS
z$P%0oXOOP%@8*?ein)(7lkpuE3=SoH81bDlnpU96R3a`BI)W7;tEF6ドルZ5AZ>p;j
z-cb5*z)ET>eyrMOeA#ni=>e~YP;N!$@-)o2x_*z6gs{LewhxjrdEev8AbSeksL3ff
z@d*fp;afM4NHl43+vskVzS2^ud`e_;M&e@^Aydd`82HAvLf9RUvvWIT~&M{6Xi5!+V$eQeF6E?T+I^oQr$l#~S&1CJA%8@VC3V
z`xJxS_j{+XNA|8HeidA>whuDJ^s(HGLf1{?FS*@JlrO4ay(#(bhT(}c$a|a8+u~|3
zb^b>JI^;2mew;g2;3!gl`gd|h@YC4ドル)@V2+HbSKHaW|?n^dfOwDUM9;d`AxhUI`IM
zfX2Ub?AVX_XY2r;Wrq1TizbmO0HtF+|E#XPrw%xUQ9?I
z{B@9+TO>CD$&a_to+Mx5_VCr@WSkI{=L-Tp%sLcO;%0N2-{Vi`%z8`M?_~v2ton9p
zeh&u4Xg@8r#udz^3&GU3)=m1>t7V#ge;2dUQf`8ePfeIP8p@)Eb!9muA`ERl2E`#o
zXkwr*neb3v1+Bye)7KN5xTh=;7lP5hrv^uy)Tr`-UThxFdV~U=+)}dfE
zl?Ca}h&z61u-JL~x%O6#+v~Vb8%>ZkyLCIN>eJ=^NjplFCe_9&Cyam76ドルtwZ0UW9{
zL6;ggB%_m?W>_cYJ8u+n(HaLNt@ujWzX{jh3yJOd#$o!Yaq^)l7}j*Ps=vVJ#>%uP
zoT8j@895?WPUfXgzqWs}iyR*Fwl;ILZw#nzEAwrVZ;~}R<7tgroh)os&ZUHi5Gp;z+~
zz8XYM0n(f+DdNko`R@4os}G*uF(*K74ドルcOby=H)Qm1(TEI#ym-Zk9jS-OUSB;H
zD&yeLNK9gkUNj>|O4CnWLow?+(^k1Tb)zu>Yo^~e7c{$Ya1yxi{ctkXPYowjMD%J2
z0jaY3Ev0%2nmO*g)zIh&3wlGf{5z{J}6#FK8e(V=WuDLkTJyt8^+
zh_Dr}iLBM_YF5M*WTID5xsa$FWa6VGv)J1h3}qi|b8L3XgR!rQlkie8FV{6ZcH3t-
z{L*@-Zv7D!72Vn(_k#I~d-~j*T(_*0HVd+m3Eog^fJ(3Tu|tVvAE#jf&lXokh(zLbxtbtMr4!`
zHDZ7-GErGzJP<%|frf_3f{tjpipp+xu$lAH22SORy*tDm-zd2KyF618Oi2w*$;JC)@66@bnX*hoENTcy?{cg)y2`Mn~OoJC5>8)
za}aA4dgo=~Bvm;1#Y(^8Q@aB2@QCML%aK}0S%uPLgK|ZF-T%-lJbP+?{K@mtFF*fP
zN#e3C+51JW--OlbI;J@8w^Bt5pzli(4X^f?X0Ud2`wnXN_}%}8uO9KWRC`xz-2|BO
zbRovp{2_FdHT(H8nmWvfq(&o^+Wd5po70f#%K$_$!$a60wE&s-^O%RxXL^MI%SeVt!#Qs@2%YIC<@)tiv0t`xgc=k@ur9@di?e1k9`e1bqv zmJeV(y6N{a1tMW*Yv0~EEu73dhkx3+!%Bp|QcoL%*p1we?q2Y1hWN~>m|pHALs6_4
z1khn)@Y6ドル@cGp{8Jh#oy(w>a9vFn)Ic6QNPUu~MLM+rj5g2MT(vZJ?AxF=jnSA*0*
zw<33ss}aobl<|y*1r)k9encw;&kqwnjbx07n{q>TLRzGS(FS3vGE?6>k5#Y&tD~<{ zuc3Da!;~S6RFZ@O#j1f_z|w0?CCDv4O;yI+y9%K$Bu5ceD8Z32IIqYC>k?rBHlq^J
zD`Cn#gB4{6jzGbO{sG84?6e6RT_`S(k_c*}#7HQt1C2ka4oH31hsdz323sT%G7y(p
zJrBVJRb&4heUDiy{#5e}{~tXlach|aMS~6zedABgGQS3)5eltPdG^@JZ&*vm{KZuL
z26N|2Tg!0{yW<{-5*jsa!+a1!ya^}xliitej*i9d1uxbjpx75fj2un=prg?%%yzw< zlmI!x^HasGY~kc386{GJk>b=m&&+yMmwT*7!5G^G>eN*l4im5{R>v$!9Y6CK{=LB{sFVGFUTn1($~`BQqWQ;
zF3-=;N!86vN!86r%_&GN0tq^nmSp4?St*2kga;icw*yI@J{G$BQlFYnRYc4K*eTC;!
zRy^6&ms^@slBuDRo1c=Z`E1(GXPc+K-_!GQ_ly_omOR<9d>&TW-^VpR$koL&INsOa
z#WmhH)F;IA*@}fv_w>KtGm9%FH4SK>hB^*~>N*OBn$~z!1$YLy`gr=eLKPz1^|WKj
zvuSG;N-7IdH8d5TPTc!s_mbzcT3+m*@^tpRrwx0sn;8-r;2Q7e9}@58AL{3V&vvlN
z;E*6sKX<~)ttf(|@$n2mtse{ylro-qjz&9+ore5wtpqr%l3a>fT2Ydkmr|?{1Lks7
zb148pL1|J>X0n1xYEh9hFbb{F1$~Rtt+{Feos&;X8$lSx@B1m{;2{l|T>~|eT5D-8
zJ$vY-P$si)vV*gKn3*+&A_Qqb+t?gpV=+PTBBfLm4{4~Ce3)i8>#1L%vl}C}25tHt
z_Rq8L%=>%xVHTfwmZ0ドルIw1(11R9u(AEHz=)0_Fja#izcsT%JcSe3PQZin=a8oTDbm
z5Z7Lc8wyy0q&DPH*3gZdo;BujO4l{b!8QmF6F@7;&M%+2-1Q}O;E|?jgkd4j3h*^G
z=#7R{B^+_3(K4gXDzc>XL|)e`bd_dCc=6oiUH5Pq^m$`GV@aD`uj3$n?x3RTz0&mL
z?)gPV2`c#xk<@ii8ds%uz*7&b&m(}it~qx|sd3m|u3-p0f83#$hdh(ri5b1wd>Ejz
z6H|;auiMe%gl&vHM*NE~`tU7iw1V?))ISJ!xQR3uXz!OW6Y#UTai@0Bccl!!9u0bD_Z=9Ynz!;;{|&8H
zT~FIq7{1T1@C6qs0s`GMHr8$J#-?&pA#KtwrU{w&Kr9?PvYk;>RSF-0q!5x72<2mz zv;oqsK+xI{;y`}Pd~D~6zp(fCIIa_jU}CvQ?34FA@B6&p559?nBECR-yN_vSlyONC zP$$o!&JYqJNG6AmqH0Kz`?FvfauZc)Mt0I*Tqdunli$G6L
z;C^>cFPsN_K9LP0CBg;~^P`RZrOy`>SVdvJlVmBX@*?s*^D*$TEg+wE1}8SKR@O@~
zz4WJ%Etu;wIF&Z@^Ouzcd{#97n#ZZXjpTu~yWrfYUwjy0Wj4$NSwUcj1;n(CM8%-W
zOCm!7=q13@wKwL@q9a`1QN1_ZqU&6^06~wt2y}W2F
zOj#dJ%@;)@HfgLDiI39zIG1(3rk4(J`dHWY0M%U1%Sefa5uQyM?{@KWt~UG9i|M*V
z;KeZ}q^c36FAx~#$M`Oq8zkiRdmzG&qCju&{jQK27MdcUs4_2(GHt^k=)X;rC{e%HhI)Kj#lm*w-Q4lX
zjqcz@4!l8JLDl^?R!UTfAd&NXux?=G_|LWc?Es>^s|3&$##m388RLFjAPRHrfk4vms7
zb2D+84E`1+*3+uK9IKKEoKE4wj8&M1#KLpu#!BI)=0To@+2B}{04vMv1k+}}48cn?
zr!fB%akpwCfIk#fkUT_=hHPB_RrMWLG~N*K|DUoL6$D2=QjyI3B1H%TR`~T=!J+E}
z?&h6q{o=9cD_eC3(M=z3D)pT+BXy*gG-I=jGbvgl1A}<8fd7bh@1=sxb5fy)#ilSrYgw=TPqn=M`!l5B?Aj!0m#^VXC$(EdBLh~;6#y1x!;;l(d`E-59bOZm9J(Q=
z;G{93u9N`;2O@Bo#20b8H$e)S8zmTK;L5?rgWyO-Kqx|cCJ?CKB!ezP_D2Y}yTA7J
z*}`x{Qx*Cx(8g*%^Chbohhushwk7N0f;`WqV1ssczD8|y6Qk?p#~Nbj
z>P0Cn?&0(sC&9C4`bCxWN1GK@Mtw-aK7D?*44otz5hNC3q@bWAath<5zsdyko%msn zjFA`c?8PdeTGct=igRx%5m-4s|LoK5Zu8(J>>amSkcj2}Mx~GyzezmTm=@3f1+`R9
zPZ~iKzw;^Pz`p{B=AKkc9=T#)Sw*GfT0Ugr5Wg5lK*0
z^lA~yTHtK}!EbtU(pk|YBCWNVSmX`X$mS7we@Zef)ycCCRuwEnw3uRcvZirq6+e(d
z&D85|;vk>aPsn0X=u*oANF!npprPm?LW0~|@N523?yy-%Qt6N1uq(_p1JWag4I4uB;OzDlNj
zg1Bz0nk5~OTQ|E0Wv~&mztQwe~q_r~e0Fyo2
z0mEKDC!1B0DH5XtF{Xa*7H9eGOZw9Q3Z5p|
z);J*{8g&8NSyI>r1*Y-MI!c-P7EquY708ENaE}ulNyf{fMmJa>NgdMqF3ドル~=SVqM%
z>ZI@i8pNwJ;J{>ea-M9GKj)4PuPDYR>HSG
zJ1eT8h#*NqSi&gC{)L4*QNble)Ntr;r*o1p@9imAODHl5gCFkRw6n$&VM&Z2RTDH=
z<`qy56js(0qbd3}i-7i$%I=T0e!>^J!cVmvNM< z^voQbshT3n^C%b{YhM#ZFcfCTn}c)zzDo&1dHPaCUyXVfF)iUvj-W`qW5zQ=2RF}4GFndqx*?C?qhIh^B_3G5B`C|GX+3Rw9
zv-lLiR?4p{yL&ixXG`o9tg)H3dUh5z_<3g*e`ll^;rilmb#6^ejg1>|!*-&3ドルiA-t
zk=rmWAWA!8a9IHt`4^&4;1ドルcI=(_o!2-9oBkHzLA?OZ$@%S3eTLMYv5_Yk?*Tk1Ctl>Pj9C1m``0gWp8s
z7f)Se1hwD8)D%t)o{1(;1`@GMPc)ti0N(udt)=Mn?J%y1
z+&W_cn1+qMuD|H%OUV#G>4MR&SSa4pl}JUqQt8a4R97UF4s{`%%HDnP>>k5~W7UWA
zVxnXr({7!k^MpCKXXYP@k$kPRA(mkFu7y+WCUAeUIyGOPnyHma%xSa#Az-MTXq6C7
zWzxMy^2FItPfY(Nqy1jTAFgI1(LeO`g`%-`K=>riI}=LlC$ytSI*tX7bObtn%gX}?
z4p`#L2M(t6L?{{R)4E)1
zv_tr>W7zZGp-{3X)2GMNDZ;Hg6A!1OM%<5e3ju1=ldj(4nqyh(f$t7{z=xrz=0tfl z1f;V0m|GyIspjyE
zTxEOcBe;Q5Agmen^1a&HQe|^nEX~&T=0LykkavTW5xyKuUrXp3Qy72O(|GFVW%1x9
z(r&6`j`e?a`aVsx=m{-L_i52}{ofrbV%QClBC=J7GZMm(<5!gqcww*f+0 z8{ZIxJLdcZ2z+htfjPd6ABP{KiMah3KDuz--yL<{h(>a10ZZy&?c&-MBN}-dQ$mqQ
zESgH|aqABARr^%?jk-j?k<5aranr#!)ms4;k^+pjgplm@>eHu{?J+nZ-&ylsNzDKj
z)$hKn&rZRw@B?xoKV8|)gKV0mC)Jf((q1v1&ShpX3sJ$;J(>
z1riM0HCCO>H&&omjpSw2nR9ICVJd3`=BiJ>@fp+6KKK;~4c|jCRe&S|2V%4ghKucwW!2q>
zt`F>@?jR`Y407m2yBW#-qcW1>09?!aM1Zppm!
z49M;gVGq6cFUTaZ);1ogy#xz?L28K`N@y)O4TY2G3@52<-$bv-l1txwl37yx%ko0@ zk8Nrs*#wX5Zoay*-Ud8b0YMN$K~8fbcwIjs>%cme(VG=xdw`6S`!+Q|j=eI#I6F33Onphv=$=#t?O1A+T@zbpH0`ODJNa^tJMLn!Xub`2d
z`3O(pJmlVBeX-0~5Jg^B%6I%cfuq&4BQCEM)_|OWWh1UDkpm#|-uR(Zw&tDty_b%)
zso@w5hhnkNCGcJ3F#dii1jfpe)pwNT-cURebBMCNX#1@l4-`N6BKLdIUaHHp~3;hhK)`p&m#OF4};ET%M
zqS=p{4u;~!r{4i)m-OWKsDu`V#qbbJ{3069e5;+salRFNw|G5AZZ1i}U}~ZSk_7t%
zyQ48(i6d`@m_n$Mha0&reN5QI=#kMH*$Rt{?8^_P4(Kv=jS^z_uz*YSc`jvsJ
zSFg6q*a$+40E+;INfwTqo3)jGG`U1_5D181&6{XLI7H(Z6Q_27F9(}MSX7vSZDM?0
z%q^grq07pg78^gY*9v4*t}KE3ドルLwnlW9bsW?aPk%44N$+xZ)#N0oVdw>|eb_KGY$Y
zQMmdT?l-amj7fs3A
z-4;1iBZ?iO@R&U|F(K1I%yrnap6#!WY_YZi;S_}pSg8CSr@JdP&)NtCyr^i)x6S+W
z4%E*5=T{fcet81)_@vVNya8Nw2CWzlet`r;xXbllcV6tE^^CX^gd9~EB7m(I)zude
zcPDj@e#vY(G3GoMI6s~c%oTje%aYV%Mkpe0i&%p|e*(}pZ|5t!#dp4$zZ5&UHuGFf
z(i&pzAqWiIJr4dX64PoRE@;9qdQCivg0wY{BD=5wB3D~^1T>R=6}vZw#}y7=$qvv)^)Uy?>&kZAQTijB}$Zclfl
zO#y;P^N7#InN-x2;z)`??s*8UB3g*)J+b{rImeZ9*}PGJ?-=2+Gh)R)NaDRYQb)rg
zH{@~>U?uoWB44Pjk!P?oTb+9eECQOlt`a!&4phY0paq4$l7mJ2SdO+*vCMKXq?iFB
zS%CnQm7ドルkF%gE(!|0lU*IkZTnUx#@qJsxrM4q?BQg`5rX+zHlKY|q&Y;GsE?5fe`;
zTO*W2wxDwG$&qKmh{dYgd%y@aquV`0(uZ?cY7*r#oYSP9RBlWXtbbbPd46<#^p-6c zv!a#<27(bdnw0r}{&9q95t$ca0hulevo0oo>=0!{a4;51$q~#dfR7Gp;pw7N+R#E+
z)89uloXqCDE%G=M4(q9uW+XL|JN(uiipDZY5<$n-cyea2isrjl-k%ral!gnwns^7< ziXPpQhFVf(FYule?tY{qZnTL0aNRO>&Tw7MbVuv8R~usGW_QE_GvXXHONIL4E0ofu
zS+PE8-bWb7fu$ADy5h~<+ur5^h&qlovah=r09+@q5V6FNqIkA(i-8`=b_Vv$us`JA7J&3sj_#RSw3w
zdwXl<)rt7%gywf&wh|y?i4=qymgtl6>4+7;K;$xz@LmZ+t!qXmNiiY@R6xgCb_@lG
zauGP)%Di|pjV!TJLaj+GW8SHi&2eySj<+9yxaq!+RNwANCi%{7dMNP}*a3p6IpZes&vJo=fu}??Hy>Sbz_L}bX
zp-4ドルk9MuA?RdOw
1E|a`*k7qTa(7P0qIx{dMGR1|R=i78?tput
z3Ktwyn}tGcZyi|i^Uj<-@hbevjq1odu_lq2$yxp+isei&o#ftd^k$+ej0saazmv6z zq}~u5_+ZbL7#R$UN@bPN1Mgl6k|3ドルm?GZ&&Kn{#QIEf6Db6PY90j<1*#$-`z?ued7 z4rxtL4^n9<83b2@g8nahocj*pa+*^5uv)v9163z&fbm&d04?2mxxW
z9SimB*ZorDY#~%YIl>tt3N&cQcqSHW^KNN>$Iaw#@}A0T%F0qn7E?eaPc^<5jc$k4 zfZ4X88F_g@j7h3x^5@o=D#*zRR6lf6l#lNrDSvdG$}x&~zlEMWED73-dR(#om8n-A zw}q*?Qm)S|DFSp_{-^I+MD!TPXrF~^)iSt%;B!XF(c)HnOTmR=xuP$
zrnp+&xl=1m%3A&1*R1~!AJ*fjJPwCa*W%&BgpET^dceZcH}DDo!Ag0Mi=Ff>9;yHM
z927Tf0v^io_G27uuz|1ドルAS97l(9
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ドル`v?b8}R(})@xacIuNlBZL1gGP=(Inq2z*=?;1R3
zD(0KpTW!3oGG}^!*(y$f-5v>6%Z?zm
z;IjjWtY>91zXXfq*ZIcAc02IbSH4Y+uzw(e;5d$N`Vd)|{u~$veTY%2v|==CE7sOJ
zkQ?JP3ドルN<1b==1(2n9r}l-b*ulsy1ubgfs6rfj+b+ghprue2d;_4m-3m*my7kg%p- zk=Zg`DAVOlKZcymf?y*Ujm-L*zlThe8XL9dv>V2(y`Xc`Wb3h6Tkw4#@8-ju=AAOR
ze~;9QWaAe=u--rLb)9amH)i%|aRU(GjWDYVbg@F`CLnxca<5u_1ph<%n5`ooico>=
z{nji_Fch20c9m3iTgye4cFf&Zhg=;855?R+fLL6{8Ns0#ENQZR&pt}v4JxO@aMo|v
z6|AJR0`DDwW@WX|Z_6(*a(A%p^n5_>R~t7*?T6QOm^EGo)v7yU2mpKEXthV3%rqS
zR!3Retp0I7k0e7B+a3IK9Cl!DCOd&J#fKJH{*LWs;gGJ}{tsQyy-ve0
z5C`zxPvL=~L_&FhAc53{4MaOus*H1KEL_|8qa9Ee#D-d?G9Ur!1QVrG)dzA2Z$Vus^Q^Xpx?S=H9%#29SC
z^f0dmh8k`h7+Zxgq9MI(`1JGg>NE#IWeP``)Z=pX;pfZm=lhHEUf(a?{QE<({3_<3|9htz ztkVJ;tC<)z8izm?f?6g8)@0h1!h*1!!;t*_zzofp0gy78pzti}zrzfl!zr0khu{sq zq(qawaL|i-G$CcS%QV|n2uBiMmbVw&G8NV(1xBnKs_d%eyX5rmSms|PV{$(7|aIhN}i>2YUpup)O3Ggs-mPw85cb2Qq@e1rwc%oO_=
zBtQD!6LTFOznuNtOP9KNu@+j$hvp!OQK5kV!3K&ddb4}MzmAbQV=Zhm52?ddKNk7d
zmc=j?poE@=ILae-R|rKg1ZuE0#54!asLlf=j{Nva$_&y?$tYPUyddA4^wI^n)~MlKx9WA)KzaoBUru-vF1Y25yWpnht_RO)V}+Oion@F3-=;NsaL+DJih#
z($~`BQqWRx&PgmTRwxF`#Ag6y;)_#@%2JDfav*7ir){mz_pVb2Pfb#IHmCP#*TSbW
zR{$mSxst&egTaawQY%VQ^HPcxVxR^=&8X&500OX0AfTo2bi(@QQ&v2iy5U*xx~CI5
zp6=ZCeov1_NJzko_1m9qY=TO3YzXiOcs{Ge-8Do%z&|)d-`U^a+tc-F>x!ov8-Qw_
z?{0w^=unVYl$Z9o?kMq3{V##5$?x1=bmeP_a#sAAZ)b)Xn|QNC2^KmoA+j1
z3e2nve>bT6APbWe8BZ{a?^u+IY;+LmaFq^S?LD*Dhu%&1HvAZNUF4fcDboGa@7}tf
zBPp^4I11Ab!&um)n7i&!8Xo^yMZSise62;CSQzi8ドルocRoVN$@9cwy{_q4961=9Z6R
z#?ez!*=n`wu$+f_SSK@f1sjDc}!{oerS@w;(PYa0iyGGleY
ztWSa{8cV5iN9eAb{Tc>_D+Y>hq
zdD?H#?ISc8z%!Eun;x#5<|u{owuxonw@`du5t#))>I+=gVK9XHlF0(=zs^cCXdlsc
zHjZ1ドル%vVu!r4|Br+=Jn@%;U1JaSU@f^m+Q7mxUIU3};fZxkLh`w>cfJeSt=*-)_
zSt=2o6&d5(#)zeT0=Rk6rFY3J3sUhLBdA5pvg!a%`^HUic7U9Y*`*2EhcwqM{(qdO
zGr!rp53r5e1RW~6|62qrx-`HPoTD*k=TkXmQ{Q%RPv-~A=}HD?09Zw5Q`60J>KZ5|
zKHXoxr^_oM=Ef2DI~H0^Ye;R
zxvIGofB@_g5YSRc&d<-zojur`r}t^s!lyg=yjzvi`qcnuxsf!{`+ix3kh0zus>t+`
z;*8Y9l++@G;-~!+Up6!X6?=dsP!$)a7L@@NKixI;>BgoP`{zCDTl!>2-_zdy7wgtN
zpS|O0>t>)vR4qyQDV11Ee>%DM>8>eHds?6DoeVd
zpz-~lo~O&2j0_AOH#C|W7(HLx2{i*4Y#_RzG$|)DSwSVWs0eJFt%89yiUg8X7;<12 z+bXE5qiZQjP0aO7!PEc^LR*FCSTrq=;KG!E#t=k;s}=yARb5XSQ4oFSSL{O{z_j59 z^fNIwX-aES)AW&0iY*a=0H!gf303(}z_m&d1yNdRNn1gyRb)keOz+&?ed=H6+?{2m z+Nvorn7unQ_sltGhFf>Tufn#VXWSPJd%QkrH;*ksrzu~u8pzg5>})m;TDnKNMl(^^x3_i1ov!z3a9eu()a7y*
ziBrb+8{0XdVSZE4xSV61vUz5`+M4E-GB3|jvxFBJ!xK!wru6BL*q5Hl!cG3ドルqL_M7
zfocU`sil2L?^wY?QX_pLDBxYzmWZ+cKXBGs5EaN0=m%KL3WpS%2rL$vr0T*a7ドル>c~
zXw2ZF`ZWW&J*}IEQl;Moon<;3^#r0mg_y2!tf<<11hrjl->~sNn8HGojXIqsoA}d< zFux&^w`*cB$OPR6&mTczm$kowT+~zYDV822F;sye_sGyAiFKD4ypSK
zX|}kym}xyV&+{h;_QGPM?4`8~zNz;!9a#ft>ZT-+4K-iKk+O!^ZtjvN&%`Eiz*5$l
zOZ%BMg92}h!86FlV)!S-YOGlm3z2}H6<5gxhs-n} zn*{K@8PK1!sBrUPF5xANtev!S?b^-^650pD`6mPiS`a~;--tLG)Yqj0PG-5vfSaW+ z@ymMU0?UY@F^7D?DvA3O2Oc3J@5rB3ftVu-&WyT{&{*I6W1RoU&>_T+g{akr_-!gS
zVR4IRy4W)^dWFqwGWxeBvCZFgkwH%bArOV{{E9iYO;Z~Zo9q-zeXR+WeOX*ZC=)Cefc^ObA=!j8?Qs)aU@6&YU(%FwzK3SpJz
zyS|TOOvWp=6ebLL>gJ4DQ6q);@9ZUGOd3H1i|mg@-aODAS|f<1moxxHbCxTf*_t;8ドルehyl|4wygXASZyEeOw@FXyBFgB7CQkd(odXVr^tnbKSe
zSa{TUG!mp>8Wn@qSt!LtPPB$ULM4X4N+nCC%nrs>3c;vZGo^&wzb931Z%BVgk0T|@
zta;LtlkFCvS+Z8L(mo;D3H#d!@ZE(C!I#@2YQWeA??ayIL^(=NbRH(2C;Hzb72V1QFApFZheiG_SvG;|{h4H{x4g+=h
zfG1s4cE_kS478<`x+7wmt^4<#gf;-z2cwz;se5u0nma?0m%}$fp7_bydw}^=x-2!( z#B0>ObwBFIrCA*kyTxGzl;rsa56%>*Rmw^Jw8)3HWhs#mnoG@sW$P>$Mc4INyY}4-
z<76}wchib-5=dwo!m)sv3d0tg-(itw&alli)fbr9*ht1j5t^qmfrc9hxsrnf6g~h^ zitM5wKggsu2k_w>4i-Nj&le}B^Pf)Ui=*R%Da5ho&1nF3VKelx{5Y~;8W`i{?T=IZ
zcLJzl1-}C=>CL=#V9}sLgcur-p~0nuUTpu|a0NtN{VgZv?k)+8Z@Y=~xk6Bl{d
zYn5q66t+XHYt8nw)}@)m89xQS1tATj9EqNKgeKX>&PALAu*umg+GGkF6u?+9ZF4he
zdKGQ^-Q%khs`b*&ftAVpIeX;y`tpvl(g!wX-|ewx-bIg`zoE&Hp1L|B0V9EFN=gPb
zk-mq!inAFL4t*9Z{E)!=vgCRH%!Ctw-|dcK#wzg`csRW}j;I4NS6ドルIA=JRY}-9u#x
z1;4{V_fXrmraq%E@Z89*o2piXCV?%6lHK2|fm|
ziuUw1Q+65F*x~gUZeqYJ9>v79Uv+hYsl*LcaSX4guk3L6?M*QalHS{3xWo@<`)vc$ z#~yXy-q6U}5S(lT1gkJVA~d0$#{$k|yhYs`Rf>G)R~;okMo6w0N!)G6webwQMre-X
zKh<9u_e^}kl#a$d@_o9i2`;!9qobrp|7ll@>|RZZlC{?Vm6nj-^Ta%97x&=mzR~wQ
z${!eT22l_7e)KnWjzJ2-Fc3xebBbAXQG<{r2nrq~ov9+fbp|$s7o~sm4gl1)+5ca` z|DQRX!y^D_r2rLP9i@cn?Y(1@IF1}m@G%#r!S2BcuuQF3M&Tt;qyZZqS+WrtcttEZ zN1bDAmaQZE{2FxC+e>Wjy`Y!&ujIIqJJi4gRc6@xByrBY+_$e3*!~==zWD={R$EUS
zM-+bdub2lU7U~3ul(tFgG*uc!sA@}_NL8P#^?HC6>s@y*4QUg}PQiAFiA@89LJC0w
zf?8pN8iBF7{F$A#{nWqEGdt_cuGeg$nbCg4I|C|u3c_a_g_>C+tqxkdQ_nsBsE_>FN{yzttZya%WZ49Xl0ZCo@L2F
zo}DJYXU$TDy_=^m>aX9ET+yuTTC1n##btGUjtNpMCTzV;lXR+f@rumv(%*Eso?aw{
zb&_9l;il%XFs;CndA3e+OZ7yOWDbE_J^9Kk9l&}m0h$-BwIV|yM>%r3LiOB6)wPEW~p5NbF;oyA={hI@e%u9P-IO<;lh+j-~rb$_(k#z z*RFpI_u#>HZeo3IV*E>I&8yah8#f}7D4>D380`dOPMa8?xcC2{;BU%LTHkgG#qs6
z3L%ikLpCrAj;9^&0xK8|2xpS|0}KI=Sc?VkMKF7SkSI@~fhe!@%`Fw{hAMYlQ`3}3
zs;Fbmmg&vKth{V;sTC_Ex7v$~oi`CkXOl}l3I^O9r+`11tM
zMY(pw5c+iN#^D*+gXy^BRf>9SxT6tzi4$R=eqa~&tk!VE1DD`Iw3O|g0-49
zE60FPJ1LTjIgc!_s{CV!c>1A%&@<|ombvuf&talzidhk~ue1q1&<)?)ure-y2hyjh zd^4d~&7#He^cXVBT0U;NCzB@&TeZt&SZ2Oqv`KcJId_%Uif_SL-~eNV!5B5Qw}oaH=M
z)xTjuz_QMF<+h>W?+k1}l>xm2ドルlk1lW!}8mYHLHc{F9^wEE&z=Wkku&9E_Om`9Q@#8PI#3s6t~`Ke>A2qb{6f#j_C;XK}POjP&GB<18ドルc z#tF8B`gQUmS=etI9Nn(&*QJ4ks&joBbg4{EcFprQPT7Y!Xz85f7rn9VBwUz|^ZwfC z4(B@O396@o{{WR#TTdE66n@`dF%KqMVv3k1CfcSot!Yiv8o)PS78rHovXI@yYFZO$ zpD`-$_#8^vu0a}f<0_de)*6S2+9E0N@c3rZi=ktNv@!OD}m80LF5$$d9XZ(WvV}c
z7_`8*C
zWy@NsXaf(q-7noH*p%$>W+rEpO8S1x2KRUey%Qb^XObPSubygAJ9v1^YZU^L9jRqc
zppc7d5`I%aKChB`qM5HWs{17InWW#sDT!9$RR38admpURvvcNnr5^Y2*mG77mF!u_
zk1hTCQRD2_U9(&|+7k`6dI9N5mgOxYU$}cCWxW!UC9Ux8j3jk3Y(X?_7W4*obBH
zlLJ!CT8Y?vm@`Q~2QrF(^;*%KGO}K4R1Rs=+i`Lj*Vo>|q*}NZ9L7`TgGf#2n}eShMcyZ3Z~(~%Gj4NWxt3~d7NA7ドル{En$@7s&e4woV(>
zZDZ*xSuK$CdNUf+D>+g;(3XFjd&Lsp{#jGH9cN2$Nf%qu{VJ)ZX&LEKqgK~51x9)E
zQx1k&+x(*)XN~%fkxyzX8zh-%=SRkBM3&H8NC;Rqr}-a__(Z{vrXrGG6+#kHu=)ac
z6S3T7k=dfM`v$V^nK7*GUc7#btZI_nwC->tMb0y}9lv&gf~2~c=YB8Y~=0EVILA2{viI@#8R
zwCvbIWV4WH6!>#VCQAw~Ha1oLq?d>rRGYQ|AnF7WyF)`J-;ZFUSFZ$ph8t_^sho
zo3dm(w-tGMC$C$I6Je%x7Kd7b3sXty%!Hc3)9U%G<}qicu^c=vm*^t;!k?x=fdoB{6MbmY#I|XTY170elF-ISv*KzuB9L83Ypn@bK&sFs6#*5cBveTi7VAgp
z0_D%_ogJR~7kYP>4<#{8x-xntbly%c=bna^#p`o>aUOn2kbS&MAkMd5uUmM?aU;XS
z92q9EwKsOdx)x`xJ&0X`ra&wM@ib^#W=DUY{EU4@eTyFC^qSVYK)*Jiq5NsYLHXVe
zu0b+Ja~kZFm|6!Vjdi`2u}VeuL4ドルIZ(NO}cm9KF(SYD%)5yav>-lwbzvi7ドル^;G
zrdrZG%4@J5r5Bq_-PUX6KCLf!E79AsV1{Nck)Pv*11edX{v`{N$h*b&rpkMxw{Fx#
zx2rT!fvN^-4GBS2xke}&fpYerY-}hS3yNx_N}YR8ah8kxLU){48sS`SUY3coi%3>Df}b^J^Fz_qs7Xi3qOm=`ox^Sq
z0!#c7SrXp~b7W|a_w6ドルX!w?Rd72`9-e>=OGEQHz2tL
zuF
zr>CY~KAU+y?tC@l7@wHLfS_+k8=?st$c9)HmItkq1b;yC5ZNz@o`nyyNbX9^V@cS^
zBN%I?VDF&+vz0T($)R5RVMeNW%Fe&p4fDKP7COiy*6It)xU3c7bCG~wyiHQ^a&0*7s;4iMn`+N
zGt}M@3V(#3{XUsWB+XRjJ0qP*#p2%@#|9GVjA1S0#N;D!e^o4Oip62~$XGmM97`rr
z+OYD=4UvBW!$L>;2*n=8?fWAJ{1Ec^^MN7uZi$JUGjIJ-d1kD#|De2jqdb4D$IN5^
ziL@MTPjcNdT?aBWc{z)OSuqqxrtZZIoK&9<9k>4m4pH|lQt9REc`!khCQw$M75ASMItD`ws
zu{u0aeY9f?WHQNgS15EPb}81zh~k0M@1bPmTQk)0(aE-f%+O%qrjCc(I@`kG4`K20
z+^T2D?=MGEMkJMrd?!B%(f=p27YAc~hP}Iwk9ZHcv|Z#Q?Y?j>2qau!Ai$wWI%B4K
zld-5DX8nuvFZ7$=7$X0oa&-?5IuY;5L{gbhBK}Pxb;(T8Z>60ZVrIHBy(RK@;I0mb
zXB-Z;E~31U!mqr0N94CWYgG2{m$qNn#4+u{&bs>!rX9ONpY+C}*1e7LgKaT01)n;k
zU_*lc^aU@Rt4v)L58lG0zqGgFMWrqu|3qHbUz#M)cy_4i-&-^gnMnGQA3(j?^UAw70-mRIlg6%m!SNIt6A0z^b&J6Zw1a>tU`Hm?19FFBLSnubw%v|3&%Fv5T&4+Ri7Jz%zB
z^hXBMX3c5(o`VkaB1nnA9pP2-uKYXt>a*_3{zGf}X=Q({RD1&b3Ma|(t+clff~G%_
zG9!Hh)sdW-9&>~}^Z3NDwJwBo7=o)+yvq7y;l5@=fQ+#Z-;l2
zHX>=`Sbwy|HQ{^LZ}_98rpVz8>QkqU0LFN`UoHqX8{TK
zD!)P1sDC|w4aLUH6iWV;Yd{Wv+nx7dt8~3*E=+{&iTvF}{4>TFl*yN7pBcMsGG=TB
z90bRxK3)_ncNkW<{5)sflh*8kewa*_hc^)je`l*c#(pcj9ldbgebocy)n$@l2c|ug z;!520p{8U4KTjlGAAc1aLK{!}L>_?aGkFy5af6Ap`x6vVt`Gh>7LTO|TpxAElIG`T
zIt>ao0KN06RKktT=d6qU`%zzL8~Vn)*pukHWV%Owku=>$^v6g%njVN;a%14eDu9WO
zc`m!TDaAM0)N1r+<3#1ni$g-gjbrjjt%m#cbq0ly#in~peq=cf-yq!1+5yj72ev~z z*Go{p3&95-3Gib}@E*WYvgUxmz!)7y!(@HRx{c!VkAO{OW6OH|6X;^(z1?}Hc@$~H zkic^~f3n=@Kp14f2JxA_XMpFxFYQ0FMmEI8PUZC@)EHBvV&-M3Fg9RDqGl@et(gfW z!957|B@&lnW_fJ_S$^~lPjkWMLy^G6t(+*#DX`YuhBY<9fhuy^iuprc(*p02teotc zMuQIt>`DbbWN*S?*rna&>hR5S@xB;+S1R6-F2db+B(HLnXCt6|{z2^C25nG&^~`S&
z{yrH=MTV3oWL`FvHDQ0(7a1IkTpR?Vz`tFL^w|vM600_~0o67$m{w;3-#$~)k3N~p
za*X{CK%FnpgQrLGf?32{g?*I@(+t5iMu9_JJ97>E7KRIS<0u<2^(nuz>FV%&W&gU{
zAf_wNNm^9Urx|!~epD7+tMimCmx!P9L^wQ##d@uCB0@9Ih!{UBM_Q
zSKI#lSQ_MKZ|1wC30l8kd>xPdl_jdtlK~TED0J>ym?v#Ex*4%KR(bqV?C+ItKeeHh
zAIyrGS4OzKW?{TX{wyHTCb!yedGwLSitSPvzl
zX5bycQYS3ドル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