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 + +
+ +

AltStyle によって変換されたページ (->オリジナル) /

+ \ 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 @@ - - - - - - - - - <?php echo $linkphp; ?> - - - - -
-
- - \ 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^6BahUJgNn&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!X6U&#xW>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?RdOw1E|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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ドルF-7-yf;z+@kjnyo*IvqA=&A+qh4P)K?=u=c#%x8GCQ2(W@~3O7+1& z7(v3BN|ktvaxDcBm#& zqWDf_CYkz_m(WN-m*@H6U-uAs)a(ai)<3b}dmt(z#t-$(>E}7qfxu#;a)P9-fa%=^X>Y(&Tmbf)h zKC!y@8eg!dyabO?!bH8rBz4I48kj7oZt3NG)!!KO;DzUDbi&F|?^vJ-4PN8h71ドル)k zav9NIF=o3>`_4VhV{GbIxk}Gi;To1K%7^APmaHZ&J*QQ#^x_0qoG;> zXBwrpSy(l8-=qDXRyl)Rf7=;!zSb?b^wVb8_GL8J`Xd#(8J?zZg>HxG*_oNCS+lzC zf(6N2RAXG61us>eRpJ5(Ocv+u1B z|3_YeoQF1`>>jFqv9v=}DH>lt>z!TurgL>Of1o$B#^xW?sTk=kYzg)W8@h%OBAf&dA}U3+Q9{*i zqjrq{SG}=508M7q-ch6MN>UuOlV!j`el%BypPv+@oqU>vW2V!SX4YOvc%k4fTjx7n zEu*&!X8y>kpE%t&k6LDH&)HbsM}U~8)8ZVtXu{q&IRW3SaYfnANI*~A)I zL*7--6Zfju?eT%lEeIhTB+&>K33_c|KNZHgUMV;lMQ`LFQAbH=_lVUiv{7V*pY)p4$V$|P`#nqPY`RC+BDG`wBDP!nl0G2#+hu33c)JV zkB1l6f8s}w;?6FXq=iXnwrO-Kw0=&@HF{kH;$}$)*IW99HiS+50e)2NxM)yG#X%&8 zG~@_I5lfxe&JYNcX*zH8(uV$vHNTtHvzZ_fD+=~21UdMZALK@MB$Ua@m-IBll5v)- z4z4(NdeUS0764k0e~66mr#r`F|h)@LXb zQb`5>oDql$SHhs5gF|ZH zF)ZH(SwO#gYPPP2r7?k-A`kunm5wnE!Y~X)cb~!oQze>GB#=r4MM7MFfrTYa42dXB zl%#Y(+?}*yECYYAW&1zd<<2s#ej*+p^t~|+&9$vtqq;u-v|n(ryp%9kuNb39HfGz^jTSh&%E(Uvb-Xf7=vI66gYv=Y_BP2GD~zQ7ImrXx!21J@ zkj+ZNKoo`d^AvZ{MGb*IfQn)b2req5P#1+TO(rI^orIZ*KS)6riU=)r;X)8aK`08< zoo>XJF{!?V(@9g>px|sm?#H?3oV&CVdLg2?O?ZfH0_I*2v`D>18fIWOiC9D>O+%nT zxrI3guCV0^5n7zEUBVNpmLEOJcZu_5akJC)?@IE5ドルz#;!hK8xCzH}jRaU_RZME5!vC zzCF_o+s$HDD|MCyYQ~ybDQ_B8tFl$DtQ%I<*skuq>ZxgVfce55^aCGUjx`VXngGVQ VdQWl^G8qz{hcW^H002iqO+qka?==7b literal 0 HcmV?d00001 From 01b62ddd8f3399a815f3cdc229c10bcfe61df54e Mon Sep 17 00:00:00 2001 From: liugene <750688237@qq.com> Date: Sun, 2 Dec 2018 12:07:09 +0800 Subject: [PATCH 23/30] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=20=E6=96=B0=E5=A2=9E=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E7=B1=BB=20=E8=B0=83=E6=95=B4=E5=90=AF=E5=8A=A8=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 10 ++++++++++ README.md | 6 +++--- conf/configure.php | 2 +- conf/database.php | 15 ++++++++------- conf/map.php | 11 ----------- conf/middleware.php | 1 + src/application/http/controller/Home.php | 4 +++- src/application/http/model/Home.php | 12 ++++++++++++ .../middleware/{AppTest.php => App.php} | 5 +---- src/bootstrap.php | 6 ++++++ 10 files changed, 45 insertions(+), 27 deletions(-) create mode 100644 .env create mode 100644 src/application/http/model/Home.php rename src/application/middleware/{AppTest.php => App.php} (55%) diff --git a/.env b/.env new file mode 100644 index 0000000..92ed92c --- /dev/null +++ b/.env @@ -0,0 +1,10 @@ +[app] +debug = true + +[database] +host => 127.0.0.1, //一般不需要修改 +port => 3306, //默认即可 +dbuser => root, //数据库用户名 +dbpwd => 123456, //数据库密码 +dbname => linkphp, //数据库名称 +dbprefix => lp_, //数据库表前缀 \ No newline at end of file diff --git a/README.md b/README.md index 0ffe12e..99316a8 100755 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ QQ: 750688237 有兴趣的可以一起探讨,项目还需要完善 -#### LinkPHP (临克) 是面向对象的轻量级常驻内存型PHP API开发框架 。 +#### linkphp (临克) 是面向对象的轻量级常驻内存型PHP API开发框架 。 ## **http服务器启动(常驻内存模式) [需要swoole扩展]** @@ -35,7 +35,7 @@ php httpd stop //停止 | |_| |\ V |\ \ | .___/| | | || .___/ |_____| \ _' \_\ | | | | | || | -[2018年06月01日 15:43:12] Server Name: link-httpd +[2018年06月01日 15:43:12] Server Name: linkphp-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 @@ -166,7 +166,7 @@ php phprpc_center stop //停止 ``` ## **使用交流** -LinkPHP开发动态:www.linkphp.cn +linkphp开发动态:www.linkphp.cn ###目前框架空目录都是必须创建的目录根据命名规范即可自动寻址加载相关文件 diff --git a/conf/configure.php b/conf/configure.php index 8897a0b..e5a0e24 100755 --- a/conf/configure.php +++ b/conf/configure.php @@ -17,7 +17,7 @@ //'配置项' => '配置值', //站点调试 - 'app_debug' => true, //是否打开调试功能 + 'app_debug' => ENV::get('app.debug', true), //是否打开调试功能 //系统安全配置 'token_turn_on' => false, //是否打开表单令牌验证 diff --git a/conf/database.php b/conf/database.php index 3a7f027..ea83a5c 100755 --- a/conf/database.php +++ b/conf/database.php @@ -1,15 +1,16 @@ 'mysql:host=127.0.0.1;dbname=linkphp', 'dns' => '', - 'host' => '127.0.0.1', //一般不需要修改 - 'port' => '3306', //默认即可 - 'dbuser' => 'root', //数据库用户名 - 'dbpwd' => '', //数据库密码 + 'host' => Env::get('database.host', '127.0.0.1'), //一般不需要修改 + 'port' => Env::get('database.port', '3306'), //默认即可 + 'dbuser' => Env::get('database.dbuser', 'root'), //数据库用户名 + 'dbpwd' => Env::get('database.dbpwd', '123456'), //数据库密码 'charset' => 'utf8', //数据库编码 - 'dbname' => 'linkphp', //数据库名称 - 'dbprefix' => 'lp_', //数据库表前缀 + 'dbname' => Env::get('database.dbname', 'linkphp'), //数据库名称 + 'dbprefix' => Env::get('database.dbprefix', 'lp_'), //数据库表前缀 'db_type' => 'mysql', //数据库类型 默认Mysql + // Query类 + 'query' => \linkphp\db\Query::class, ]; \ No newline at end of file diff --git a/conf/map.php b/conf/map.php index 1755ea8..e2a9b31 100755 --- a/conf/map.php +++ b/conf/map.php @@ -35,16 +35,5 @@ ], 'class_autoload_map' => [ //'类名' => '类文件地址' - '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', - '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/middleware.php b/conf/middleware.php index d1ba980..5233df2 100644 --- a/conf/middleware.php +++ b/conf/middleware.php @@ -15,6 +15,7 @@ return [ 'beginMiddleware' => [ + \app\middleware\App::class ], 'appMiddleware' => [ diff --git a/src/application/http/controller/Home.php b/src/application/http/controller/Home.php index 95fb4bb..701dfc6 100755 --- a/src/application/http/controller/Home.php +++ b/src/application/http/controller/Home.php @@ -2,12 +2,14 @@ namespace app\http\controller; use framework\Controller; -use linkphp\http\HttpRequest; +use app\http\model\Home as HomeModel; class Home extends Controller { public function main() { + $model = new HomeModel(); + dump($model->select());die; return ['code' => 200, 'msg' => 'linkphp 创建成功!']; } diff --git a/src/application/http/model/Home.php b/src/application/http/model/Home.php new file mode 100644 index 0000000..e3787b6 --- /dev/null +++ b/src/application/http/model/Home.php @@ -0,0 +1,12 @@ +event( + 'loader', + \linkphp\loader\provider\RegisterProvider::class, + true +); + $app->event( 'system', [ From f093c292170e8e7704e5af158ad16c30b0eae2b2 Mon Sep 17 00:00:00 2001 From: liugene <750688237@qq.com> Date: Sun, 2 Dec 2018 21:53:01 +0800 Subject: [PATCH 24/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 14 ++++++++------ conf/database.php | 3 +++ src/application/http/controller/Home.php | 3 +-- src/application/http/model/Home.php | 6 ++++++ src/bootstrap.php | 1 + 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/.env b/.env index 92ed92c..3741e2e 100644 --- a/.env +++ b/.env @@ -1,10 +1,12 @@ [app] + debug = true [database] -host => 127.0.0.1, //一般不需要修改 -port => 3306, //默认即可 -dbuser => root, //数据库用户名 -dbpwd => 123456, //数据库密码 -dbname => linkphp, //数据库名称 -dbprefix => lp_, //数据库表前缀 \ No newline at end of file + +host = 127.0.0.1 +port = 3306 +dbuser = root +dbpwd = 123456 +dbname = linkphp +dbprefix = lp_ \ No newline at end of file diff --git a/conf/database.php b/conf/database.php index ea83a5c..56015ca 100755 --- a/conf/database.php +++ b/conf/database.php @@ -11,6 +11,9 @@ 'dbname' => Env::get('database.dbname', 'linkphp'), //数据库名称 'dbprefix' => Env::get('database.dbprefix', 'lp_'), //数据库表前缀 'db_type' => 'mysql', //数据库类型 默认Mysql + 'result_type' => PDO::FETCH_ASSOC, + // 时间字段取出后的默认时间格式,默认为Y-m-d H:i:s + 'datetime_format' => true, // Query类 'query' => \linkphp\db\Query::class, ]; \ No newline at end of file diff --git a/src/application/http/controller/Home.php b/src/application/http/controller/Home.php index 701dfc6..ed7f132 100755 --- a/src/application/http/controller/Home.php +++ b/src/application/http/controller/Home.php @@ -9,8 +9,7 @@ class Home extends Controller public function main() { $model = new HomeModel(); - dump($model->select());die; - return ['code' => 200, 'msg' => 'linkphp 创建成功!']; + return ['code' => 200, 'msg' => $model->find()->toArray()]; } } \ No newline at end of file diff --git a/src/application/http/model/Home.php b/src/application/http/model/Home.php index e3787b6..6f9e035 100644 --- a/src/application/http/model/Home.php +++ b/src/application/http/model/Home.php @@ -7,6 +7,12 @@ class Home extends Model { + protected $field = ['id']; + protected $name = 'forum'; + protected $updateTime = 'post_time'; + + protected $createTime = 'up_time'; + } \ No newline at end of file diff --git a/src/bootstrap.php b/src/bootstrap.php index 907e31f..a40126e 100644 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -35,6 +35,7 @@ $app->event( 'system', [ + \linkphp\event\provider\EnvProvider::class, \linkphp\event\provider\ConfigProvider::class, \linkphp\event\provider\MiddleProvider::class, \linkphp\event\provider\DatabaseProvider::class, From a90acd3b11de0930f4fb8636899cc8f371140927 Mon Sep 17 00:00:00 2001 From: liugene <750688237@qq.com> Date: Sun, 2 Dec 2018 22:23:41 +0800 Subject: [PATCH 25/30] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E4=BA=8B=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/application/http/controller/Home.php | 7 ++++--- src/application/http/model/Home.php | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/application/http/controller/Home.php b/src/application/http/controller/Home.php index ed7f132..e4dba54 100755 --- a/src/application/http/controller/Home.php +++ b/src/application/http/controller/Home.php @@ -1,15 +1,16 @@ 200, 'msg' => $model->find()->toArray()]; + $model = model('app/http/model/Home'); + return ['code' => 200, 'msg' => $model->select()->toArray()]; } } \ No newline at end of file diff --git a/src/application/http/model/Home.php b/src/application/http/model/Home.php index 6f9e035..96556d5 100644 --- a/src/application/http/model/Home.php +++ b/src/application/http/model/Home.php @@ -7,7 +7,7 @@ class Home extends Model { - protected $field = ['id']; + protected $field = ['id', 'title', 'c_id', 'post_time', 'up_time', 'is_on']; protected $name = 'forum'; From a67ea05155966a0a7bdff43118923091cf5b7151 Mon Sep 17 00:00:00 2001 From: liugene <750688237@qq.com> Date: Mon, 3 Dec 2018 15:27:27 +0800 Subject: [PATCH 26/30] =?UTF-8?q?=E4=BF=AE=E6=94=B9.gitignore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 72b875c..62c8935 100755 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1 @@ -.idea/ -composer.lock -vendor/ -swoole-ide-helper.phar/ \ No newline at end of file +.idea/ \ No newline at end of file From aacb76f76c25299a5ff0d61257d07cb193d5e466 Mon Sep 17 00:00:00 2001 From: liugene <750688237@qq.com> Date: Mon, 3 Dec 2018 16:11:58 +0800 Subject: [PATCH 27/30] =?UTF-8?q?=E6=96=B0=E5=A2=9Etravis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 ++++- .travis.yml | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 .travis.yml diff --git a/.gitignore b/.gitignore index 62c8935..72b875c 100755 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ -.idea/ \ No newline at end of file +.idea/ +composer.lock +vendor/ +swoole-ide-helper.phar/ \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..4e9f780 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,12 @@ +sudo: false + +language: php + +before_install: + - composer self-update + +install: + - composer install --no-dev --no-interaction --ignore-platform-reqs + +script: + - php bin/cli test From c6c0e2b5348531abfa3555100fe8db1f7bc7b462 Mon Sep 17 00:00:00 2001 From: liugene <750688237@qq.com> Date: 2019年1月19日 17:08:59 +0800 Subject: [PATCH 28/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A1=86=E6=9E=B6?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/cli | 2 +- bin/console/Kernel.php | 8 +++---- bin/http/Kernel.php | 14 ++++++------ bin/httpd | 2 +- bin/phprpc | 2 +- bin/phprpc_center | 2 +- bin/rpc/Kernel.php | 8 +++---- conf/configure.php | 2 +- conf/view.php | 3 +++ src/application/Kernel.php | 22 ++++++++++--------- src/application/http/controller/Home.php | 9 ++++++++ src/application/provider/TemplateProvider.php | 7 ++++-- .../view/{main => http}/home/main.html | 0 src/web/index.php | 2 +- 14 files changed, 50 insertions(+), 33 deletions(-) rename src/resource/view/{main => http}/home/main.html (100%) diff --git a/bin/cli b/bin/cli index c0b6723..078ecd1 100755 --- a/bin/cli +++ b/bin/cli @@ -32,7 +32,7 @@ $app->event( $kernel = $app->make(bin\console\Kernel::class); -$kernel->use() +$kernel->start() ->then(function () use ($kernel,$app){ $kernel->setData($app->make(linkphp\console\Console::class) ->getReturnData()); diff --git a/bin/console/Kernel.php b/bin/console/Kernel.php index 07cb837..d9f836e 100644 --- a/bin/console/Kernel.php +++ b/bin/console/Kernel.php @@ -7,19 +7,19 @@ class Kernel extends ConsoleKernel { - public function use($config = null) + public function start($config = null) { // TODO: Implement request() method. - $this->_app->event('error'); + $this->app->event('error'); // TODO: Implement use() method. - $this->_app->event('console'); + $this->app->event('console'); // TODO: Implement response() method. return $this; } public function complete() { - $httpRequest = $this->_app->make('linkphp\http\HttpRequest'); + $httpRequest = $this->app->make('linkphp\http\HttpRequest'); $httpRequest->setRequestHttpAccept('console'); $httpRequest->setData($this->data)->send(); // TODO: Implement complete() method. diff --git a/bin/http/Kernel.php b/bin/http/Kernel.php index 19cea57..459612e 100644 --- a/bin/http/Kernel.php +++ b/bin/http/Kernel.php @@ -7,27 +7,27 @@ class Kernel extends ConsoleKernel { - public function use($config = null) + public function start($config = null) { // TODO: Implement request() method. - $this->_app->event('error'); + $this->app->event('error'); // TODO: Implement use() method. - $this->_app->make(\linkphp\console\Console::class) + $this->app->make(\linkphp\console\Console::class) ->setDaemon(true) ->setDaemonConfig($config); /** * 设置应用启动中间件并监听执行 */ - app()->hook('appMiddleware'); - $this->_app->event('console'); + $this->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); + parent::beforeComplete(); + return $this->request->setData($this->data)->send(true); // TODO: Implement complete() method. } diff --git a/bin/httpd b/bin/httpd index 4f59ad2..c2dce6f 100755 --- a/bin/httpd +++ b/bin/httpd @@ -37,5 +37,5 @@ $app->event( $kernel = $app->make(bin\http\Kernel::class); -$kernel->use(LOAD_PATH . 'bin/httpd.php'); +$kernel->start(LOAD_PATH . 'bin/httpd.php'); //这是命令行执行入口文件 \ No newline at end of file diff --git a/bin/phprpc b/bin/phprpc index d6ecd4e..69e4445 100644 --- a/bin/phprpc +++ b/bin/phprpc @@ -37,5 +37,5 @@ $app->event( $kernel = $app->make(bin\http\Kernel::class); -$kernel->use(LOAD_PATH . 'bin/phprpc.php'); +$kernel->start(LOAD_PATH . 'bin/phprpc.php'); //这是命令行执行入口文件 \ No newline at end of file diff --git a/bin/phprpc_center b/bin/phprpc_center index 8b2e7f2..fa31773 100644 --- a/bin/phprpc_center +++ b/bin/phprpc_center @@ -37,5 +37,5 @@ $app->event( $kernel = $app->make(bin\http\Kernel::class); -$kernel->use(LOAD_PATH . 'bin/phprpc_center.php'); +$kernel->start(LOAD_PATH . 'bin/phprpc_center.php'); //这是命令行执行入口文件 \ No newline at end of file diff --git a/bin/rpc/Kernel.php b/bin/rpc/Kernel.php index e6c8f23..d8fa327 100644 --- a/bin/rpc/Kernel.php +++ b/bin/rpc/Kernel.php @@ -10,23 +10,23 @@ class Kernel extends PhpRpcKernel public function use($config = null) { // TODO: Implement request() method. - $this->_app->event('error'); + $this->app->event('error'); // TODO: Implement use() method. - $this->_app->make(\linkphp\console\Console::class) + $this->app->make(\linkphp\console\Console::class) ->setDaemon(true) ->setDaemonConfig($config); /** * 设置应用启动中间件并监听执行 */ app()->hook('appMiddleware'); - $this->_app->event('console'); + $this->app->event('console'); // TODO: Implement response() method. return $this; } public function complete() { - $httpRequest = $this->_app->make(\linkphp\http\HttpRequest::class); + $httpRequest = $this->app->make(\linkphp\http\HttpRequest::class); return $httpRequest->setData($this->data)->send(true); // TODO: Implement complete() method. } diff --git a/conf/configure.php b/conf/configure.php index e5a0e24..e186a7c 100755 --- a/conf/configure.php +++ b/conf/configure.php @@ -25,7 +25,7 @@ //系统常用路径设置 'log_path' => CACHE_PATH . 'log/', //系统日志存储路径 - 'default_return_type' => 'view', + 'default_return_type' => 'view', //view json console xml jsonp 'dispatch_error_tmpl' => 'tpl/dispatch_jump', diff --git a/conf/view.php b/conf/view.php index 4ef99c1..391ca43 100644 --- a/conf/view.php +++ b/conf/view.php @@ -8,6 +8,9 @@ 'set_right_limiter' => '}>', //设置模板引擎右侧解析标签 'view_replace_str' => [], + // 模板路径 + 'view_path' => '', + 'storage_drive' => 'File', 'cache_time' => '1800', 'tpl_replace_string' => [] diff --git a/src/application/Kernel.php b/src/application/Kernel.php index e213de6..d80363c 100644 --- a/src/application/Kernel.php +++ b/src/application/Kernel.php @@ -7,25 +7,25 @@ class Kernel extends RouterKernel { - public function use($config = null) + public function start($config = null) { // TODO: Implement request() method. - $this->_app->event('error'); - $this->_app->event('router'); + $this->app->event('error'); + $this->app->event('router'); // TODO: Implement response() method. // TODO: Implement use() method. /** * 设置应用启动中间件并监听执行 */ - $this->_app->hook('appMiddleware'); - $this->_app->get(\linkphp\router\Router::class) + $this->app->hook('appMiddleware'); + $this->app->get(\linkphp\router\Router::class) ->setPath( - $this->_app->input('server.REQUEST_URI')) + $this->app->input('server.REQUEST_URI')) ->setGetParam( - $this->_app->input('get.')) + $this->app->input('get.')) ->setMethod( - $this->_request->getRequestMethod() + $this->request->getRequestMethod() ) ->parser() ->dispatch(); @@ -34,9 +34,11 @@ public function use($config = null) public function complete() { - $this->_app->hook('destructMiddleware'); + $this->app->hook('destructMiddleware'); - $this->_request->setData($this->data)->send(); + parent::beforeComplete(); + + $this->request->setData($this->data)->send(); } } \ No newline at end of file diff --git a/src/application/http/controller/Home.php b/src/application/http/controller/Home.php index e4dba54..2d48ab3 100755 --- a/src/application/http/controller/Home.php +++ b/src/application/http/controller/Home.php @@ -7,10 +7,19 @@ class Home extends Controller { + protected $returnType = [ + 'main' => 'json' + ]; + public function main() { $model = model('app/http/model/Home'); return ['code' => 200, 'msg' => $model->select()->toArray()]; } + public function index() + { + return $this->display('http/home/main'); + } + } \ No newline at end of file diff --git a/src/application/provider/TemplateProvider.php b/src/application/provider/TemplateProvider.php index e6a0960..5406156 100644 --- a/src/application/provider/TemplateProvider.php +++ b/src/application/provider/TemplateProvider.php @@ -11,9 +11,12 @@ class TemplateProvider implements EventServerProvider public function update(EventDefinition $eventDefinition) { - $view = new View(app()->get(\linkphp\http\HttpRequest::class),[]); + $view = new View([]); $view->engine(); - $view->config(require ROOT_PATH . 'conf/view.php'); + $view->config(require ROOT_PATH . 'conf/view.php') + ->viewPath(CACHE_PATH . 'view/') + ->root('') + ->baseFile(''); app()->containerInstance( 'linkphp\template\View', $view diff --git a/src/resource/view/main/home/main.html b/src/resource/view/http/home/main.html similarity index 100% rename from src/resource/view/main/home/main.html rename to src/resource/view/http/home/main.html diff --git a/src/web/index.php b/src/web/index.php index 4825f69..b600056 100755 --- a/src/web/index.php +++ b/src/web/index.php @@ -31,7 +31,7 @@ $kernel = $app->make(app\Kernel::class); -$kernel->use() +$kernel->start() ->then(function () use ($kernel,$app){ $kernel->setData($app->make(linkphp\router\Router::class) ->getReturnData()); From 294cccc2c421a9ea2b955b4065a8e3d6bc9081e6 Mon Sep 17 00:00:00 2001 From: LauGene <750688237@qq.com> Date: Tue, 9 Apr 2019 00:17:04 +0800 Subject: [PATCH 29/30] Update LICENSE --- LICENSE | 247 +++++++++++--------------------------------------------- 1 file changed, 46 insertions(+), 201 deletions(-) diff --git a/LICENSE b/LICENSE index 8dada3e..105d831 100755 --- a/LICENSE +++ b/LICENSE @@ -1,201 +1,46 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +Copyright (c) + +Anti 996 License Version 1.0 (Draft) + +Permission is hereby granted to any individual or legal entity +obtaining a copy of this licensed work (including the source code, +documentation and/or related items, hereinafter collectively referred +to as the "licensed work"), free of charge, to deal with the licensed +work for any purpose, including without limitation, the rights to use, +reproduce, modify, prepare derivative works of, distribute, publish +and sublicense the licensed work, subject to the following conditions: + +1. The individual or the legal entity must conspicuously display, +without modification, this License and the notice on each redistributed +or derivative copy of the Licensed Work. + +2. The individual or the legal entity must strictly comply with all +applicable laws, regulations, rules and standards of the jurisdiction +relating to labor and employment where the individual is physically +located or where the individual was born or naturalized; or where the +legal entity is registered or is operating (whichever is stricter). In +case that the jurisdiction has no such laws, regulations, rules and +standards or its laws, regulations, rules and standards are +unenforceable, the individual or the legal entity are required to +comply with Core International Labor Standards. + +3. The individual or the legal entity shall not induce or force its +employee(s), whether full-time or part-time, or its independent +contractor(s), in any methods, to agree in oral or written form, to +directly or indirectly restrict, weaken or relinquish his or her +rights or remedies under such laws, regulations, rules and standards +relating to labor and employment as mentioned above, no matter whether +such written or oral agreement are enforceable under the laws of the +said jurisdiction, nor shall such individual or the legal entity +limit, in any methods, the rights of its employee(s) or independent +contractor(s) from reporting or complaining to the copyright holder or +relevant authorities monitoring the compliance of the license about +its violation(s) of the said license. + +THE LICENSED WORK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN ANY WAY CONNECTION WITH THE +LICENSED WORK OR THE USE OR OTHER DEALINGS IN THE LICENSED WORK. From 0aa7b9790e8e82ff99040a1038c8021a46848a22 Mon Sep 17 00:00:00 2001 From: liujun <750688237@qq.com> Date: Thu, 7 Apr 2022 21:27:20 +0800 Subject: [PATCH 30/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 8196 -> 6148 bytes src/bootstrap.php | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.DS_Store b/.DS_Store index 1f22e06ffefc7856068d80d3e257863144bc3df1..08e6b230527f4dcab52cef6f3a8e6dce8defbd53 100644 GIT binary patch delta 108 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{Mvv5sJ6q~50$SATgU^g?P$YdUY;?3U$o-uAr uUBtMUor6P=8K?>f1h|2OD@en}#P7_L`DHvo+8LN2MuALc*c{I@hZz7W?h>B> delta 675 zcmZoMXmOBWU|?W$DortDU;r^WfEYvza8FDWo2aMAD8DgaH}hr%jz7$c**Q2S7O*hN zPv&7Mu4iS?W5{GkVMt|2%t<#4pr`fq0bqr8#uu_skz{l8u0ho1oohefu6veil>)z! zO~E5ukb!Kn15hgiGeZ*4-n`9iEcY4f*%-=z4#)#KBcGwjGbcYeDJMS(s7L_l4v;f6 z{(}KX9|MZor1IhdsM?cB1v#0;B?bo98JU<_slnks$;1Og7DFY@mZXn?bN@|-0IlePb<`?mt?9ao&0rvay M6*6p&=b6I{0Q~Kv82|tP diff --git a/src/bootstrap.php b/src/bootstrap.php index a40126e..057b1e4 100644 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -14,7 +14,7 @@ $loader = new \linkphp\loader\Loader(); -//注册自动加载方法 +//注册自动加载方法/合并conposer $loader->register( $loader->import(require_once(ROOT_PATH . 'conf/map.php')) ->setVendorPath(ROOT_PATH . 'vendor/')