普通变色龙 (© Photostock-Israel/SPL/Getty Images)

Welcom to 评论 - lizhenqiu blog!

    #362

    作者:广西南宁市

    CentOS 7 设置 svn 开机启动

    找到 svn 的 service 配置文件 /etc/sysconfig/svnserve 编辑配置文件
    vi /etc/sysconfig/svnserve
    Run code
    Cut to clipboard
      将 OPTIONS="-r /var/svn" 改为 svn 版本库存放的目录,:wq 保存退出
      在提示符下输入
      systemctl enable svnserve.service
      Run code
      Cut to clipboard
        重启服务器,输入
        ps -aux | grep 'svn'
        Run code
        Cut to clipboard
          看 svn 服务启动了没有
          #,广西南宁市,2019-02-25,15:12:22, Linux开机自动挂载存储
          修改/etc/fstab文档
          vi /etc/fstab
          Run code
          Cut to clipboard

            把要挂载的盘信息加到里面
            /dev/emcpowerb1 /oracle/oradata ext3 defaults 0 0
            Run code
            Cut to clipboard
              保存退出,等重启服务器就可以生效了
              #,广西南宁市,2019-02-25,15:14:30,
              本身目录下运行 sh test.sh
              Run code
              Cut to clipboard
                文章:Linux系统中svn服务器设置开机启动  发表时间:2019-02-25, 15:10:08  
                展开↯

                #363

                作者:广西河池市

                Nginx配置 Laravel 正常访问
                在nginx.conf 里对应的server{}中配置如下代码 location / {             index index.php index.html index.htm;             try_files $uri $uri/ /index.php?$query_string; } 然后 重启 systemctl restart nginx即可
                Run code
                Cut to clipboard
                  文章:Laravel Npm Node  发表时间:2019-02-23, 14:20:24  
                  展开↯

                  #364

                  作者:广西南宁市
                  微信小程序placeholder设置自定义颜色
                  <view class='inp'> <input placeholder-class="phcolor" class="input-text" name="username" placeholder="测试placeholder" /> </view>
                  Run code
                  Cut to clipboard
                    .phcolor{ color: #18acff; }
                    Run code
                    Cut to clipboard
                      文章:微信小程序自定义选项卡tabBar模板底部顶部导航  发表时间:2019-02-21, 15:06:14  
                      展开↯

                      #365

                      作者:广西河池市
                      检查是否已经有svn svnserve --version 安装 yum install -y subversion 检查安装是否成功 同样用的是 svnserve –version成功安装会显示版本信息 svnserve --version
                      Run code
                      Cut to clipboard
                        文章:Linux系统中svn服务器设置开机启动  发表时间:2019-02-16, 14:43:00  
                        展开↯

                        #366

                        作者:广西河池市

                        CentOS7关闭/开启防火墙

                        添加 firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效) firewall-cmd --zone=public --add-port=1000-2000/tcp --permanent  重新载入 firewall-cmd --reload 查看 firewall-cmd --zone=public --query-port=80/tcp 删除 firewall-cmd --zone=public --remove-port=80/tcp --permanent
                        Run code
                        Cut to clipboard
                          文章:Linux系统中svn服务器设置开机启动  发表时间:2019-02-16, 14:32:36  
                          展开↯

                          #367

                          作者:广西南宁市
                          vue编译错误
                          在使用webpack2.x打包时,出现下面报错(Unexpected token name «i», expected punc «;»): ERROR in app.js from UglifyJs Unexpected token name «i», expected punc «;» [app.js:9461,13] 定位到的报错是: function oneOf (value, validList) { for (let i = 0; i < validList.length; i++) {//此行报错 if (value === validList[i]) { return true; } } return false; } 看样子是UglifyJs压缩插件在遇到es6语法时出错了。但是项目中自己写的代码是有用babel编译的,上面报错的代码应该是来自vue的库。为什么这些代码没有经过babel编译后才执行UglifyJs压缩呢?
                          Run code
                          Cut to clipboard


                            修改
                            node_modules\laravel-mix\setup\webpack.config.js
                            注释掉
                            { test: /\.jsx?$/, //exclude: /(node_modules|bower_components)/, loader: 'babel-loader' + Mix.babelConfig() },
                            Run code
                            Cut to clipboard

                              碰到的问题(Couldn't find preset "es2015" relative to directory)
                              MODULE BUILD FAILED: ERROR: COULDN’T FIND PRESET “ES2015” RELATIVE TO DIRECTORY
                              遇到这个问题的时候我们需要安装 babel-preset-es2015
                              npm install babel-preset-es2015 --save-dev
                              Run code
                              Cut to clipboard

                                /*{ test: /iview.src.*?js$/, loader: 'babel-loader' },*/ { test: /\.jsx?$/, //exclude: /(node_modules|bower_components)/, loader: 'babel-loader' + Mix.babelConfig() }
                                Run code
                                Cut to clipboard

                                  { "private": true, "scripts": { "serve": "php artisan serve", "apidoc": "apidoc -i app/Http/Controllers/Api/v2 -o public/docs", "ide-helper": "php artisan ide-helper:generate", "git-push": "git add -A && git commit -m 'no msg' && git push --progress 'origin' master:master", "dev": "npm run development", "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "watch-poll": "npm run watch -- --watch-poll", "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", "prod": "npm run production", "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "fix-memory-limit": "cross-env LIMIT=8096 increase-memory-limit" }, "devDependencies": { "axios": "^0.15.3", "babel-loader": "^7.1.1", "babel-preset-es2015": "^6.24.1", "bootstrap-sass": "^3.3.7", "cross-env": "^3.2.4", "css-loader": "^0.26.4", "element-ui": "^1.3.7", "fastclick": "^1.0.6", "increase-memory-limit": "^1.0.6", "jquery": "^3.2.1", "laravel-mix": "^0.12.1", "lodash": "^4.17.4", "stylus": "^0.54.5", "stylus-loader": "^3.0.1", "vue": "^2.4.2", "vue-loader": "^11.3.4", "vue-router": "^2.7.0", "vue-style-loader": "^2.0.5", "vue-template-compiler": "^2.4.2" }, "dependencies": { "chart.js": "^2.6.0", "iview": "^2.0.0", "vant": "^0.12.3", "vue-chartjs": "^2.7.2", "vue-github-badge": "^1.0.1", "vue-html5-editor": "^1.1.1", "vue-image-crop-upload": "^2.1.3", "vue-quill-editor": "^2.2.6", "vue-social-share": "^0.0.3", "vuex": "^3.0.1" } }
                                  Run code
                                  Cut to clipboard

                                    var mix = require('laravel-mix'); var production=0; //282216 //284050 // npm run watch // npm run production if(production) Mix.babelConfig={ babelrc: false, presets: [ ['es2015'], ], }; //复制图片资源 //mix.copy('resources/assets/images', 'public/images'); //生成vue页面js mix //.js('resources/assets/js/app.js', 'public/js/app.js') .js('resources/assets/js/admin/main.js', 'public/js/admin.js') //.js('resources/assets/js/api/main.js', 'public/js/api.js') //.js('resources/assets/js/business/main.js', 'public/js/business.js') .js('resources/assets/js/city/main.js', 'public/js/city.js'); //生成bootstrap样式文件 //mix.sass('resources/assets/sass/app.scss', 'public/css'); //配置webpack mix.webpackConfig({ output: { // 路由懒加载文件路径 chunkFilename: "js/build/[id].js?[hash:8]" }, module: { rules: [{ // 图片资源保存路径规则 test: /\.(png|jpe?g|gif)$/, loaders: [ { loader: 'file-loader', options: { name: path => { // 自定义部分 try { if (/\/resources\/assets\//.test(path)) { var file = path.substring(path.indexOf('/resources/assets/') + '/resources/assets/'.length); if (file) { if (file.substring(0, 3) === 'js/') file = 'pages/' + file.substring(3); if (file.substring(0, 7) === 'images/') file = file.substring(7); return 'images/' + file + '?[hash:8]' } } } catch (e) { } // 系统定义部分 if (!/node_modules|bower_components/.test(path)) { return 'images/[name].[ext]?[hash:8]'; } return 'images/vendor/' + path .replace(/\\/g, '/') .replace( /((.*(node_modules|bower_components))|images|image|img|assets)\//g, '' ) + '?[hash:8]'; }, publicPath: mix.config.options.resourceRoot } } ] }, { // 字体资源保存路径规则 test: /\.(woff2?|ttf|eot|svg|otf)$/, loader: 'file-loader', options: { name: path => { // 自定义部分 try { if (/\/resources\/assets\//.test(path)) { var file = path.substring(path.indexOf('/resources/assets/') + '/resources/assets/'.length); if (file) { if (file.substring(0, 3) === 'js/') file = 'pages/' + file.substring(3); if (file.substring(0, 7) === 'fonts/') file = file.substring(7); return 'fonts/' + file + '?[hash:8]' } } } catch (e) { } // 系统定义部分 if (!/node_modules|bower_components/.test(path)) { return 'fonts/[name].[ext]?[hash:8]'; } return 'fonts/vendor/' + path .replace(/\\/g, '/') .replace( /((.*(node_modules|bower_components))|fonts|font|assets)\//g, '' ) + '?[hash:8]'; }, publicPath: mix.config.options.resourceRoot } }] } });
                                    Run code
                                    Cut to clipboard
                                      #,广西南宁市,2019-02-11,18:10:31, mysql随机获取一条或者多条数据
                                      语句二: SELECT * FROM users AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(userId) FROM `users`)-(SELECT MIN(userId) FROM users))+(SELECT MIN(userId) FROM users)) AS userId) AS t2 WHERE t1.userId >= t2.userId ORDER BY t1.userId LIMIT 1 执 行该sql语句,用时0.031s,效率非常好。当把”LIMIT 1“改为了”LIMIT 100“ 随机取一百条记录,用时0.048s。可是就在此时问题出现了,发现结果好像不是随机的。为了验证结果,又执行了N次,的确不是随机的。问题出现 在”ORDER BY t1.userId“这里,按userId排序了。随机取一条记录还是不错的选择,多条就不行了啊。 ---------分隔线------------------------------------ 语句三: SELECT * FROM users WHERE userId >= ((SELECT MAX(userId) FROM users)-(SELECT MIN(userId) FROM users)) * RAND() + (SELECT MIN(userId) FROM users) LIMIT 1 执行该sql语句,用时0.039s,效率也是非常好。接着把”LIMIT 1“改为了”LIMIT 10000“,用时0.063s。经过多次验证,得出的结果都是随机的。 ---------分隔线------------------------------------ 结论:随机获得一条记录,语句二是相当不错的选择,采用JOIN的语法比直接在WHERE中使用函数效率还是要高一些的。语句三也不错,随机获得多条记录的首选。
                                      Run code
                                      Cut to clipboard
                                        文章:Laravel Npm Node  发表时间:2019-02-11, 10:43:38  
                                        展开↯

                                        #368

                                        作者:广西
                                        后来,南山的风吹散了谷堆,北海的水淹没了墓碑,你应该仔细看我一眼,我又有几分像从前,我这般爱闹的性子,终究也被打磨成,如今的沉默寡言。
                                        #,广西,2019-02-03,08:42:37, 再后来南山的谷堆被重新堆起,北海的墓碑也再次重建。从前的日子回不去了就是回不去了。余生还长,日子还在,又何必慌张。
                                        文章:成功的故事只能倒叙着讲  发表时间:2019-02-03, 08:41:33  
                                        展开↯

                                        #369

                                        作者:广西南宁市

                                        小程序使用wss

                                        微信小程序wss地址不允许使用端口,于是就利用nginx转发。

                                        1、nginx版本是需要大于1.3
                                        2、nginx配置文件修改
                                        upstream websocket { server ip:端口; //转发 } server { listen 443; server_name 域名; ssl on; ssl_certificate 证书; ssl_certificate_key 证书; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location /wss { access_log /usr/share/nginx/logs/https-websocket.log; proxy_pass http://websocket/; # 代理到上面 proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; rewrite /wss/(.*) /$1 break; proxy_redirect off; } }
                                        Run code
                                        Cut to clipboard
                                          3、GatewayWorker下的修改,用了nginx就不需要在此处使用ssl了,文档有提到 https://www.kancloud.cn/walkor/workerman/315297

                                          $gateway = new Gateway("websocket://0.0.0.0:9993");
                                          Run code
                                          Cut to clipboard


                                            4、小程序那直接使用这个url : wss://域名/wss
                                            文章:Laravel 5.4 结合 Workerman 实现 TCP 长连接  发表时间:2019-01-17, 17:43:11  
                                            展开↯

                                            #370

                                            作者:广西南宁市
                                            <?php namespace App\Console\Commands; use Workerman\Worker; use Illuminate\Console\Command; class WorkermanCommand extends Command { private $server; /** * The name and signature of the console command. * * @var string */ //protected $signature = 'wk {action}'; protected $signature = 'workman {action} {--d}'; /** * The console command description. * * @var string */ protected $description = 'Start a Workerman server.'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { global $argv; $action = $this->argument('action'); $argv[0] = 'wk'; $argv[1] = $action; $argv[2] = $this->option('d') ? '-d' : ''; // php artisan workman start --d switch ($action) { case 'start': $this->start(); break; case 'stop': break; case 'restart': break; case 'reload': break; case 'status': break; case 'connections': break; } } private function start() { // 证书最好是申请的证书 $context = array( // 更多ssl选项请参考手册 http://php.net/manual/zh/context.ssl.php 'ssl' => array( // 请使用绝对路径 'local_cert' => '/www/wdlinux/nginx/conf/cert/a.******.net-ca-bundle.crt', // 也可以是crt文件 'local_pk' => '/www/wdlinux/nginx/conf/cert/a.******.net.key', 'verify_peer' => false, //'verify_peer_name' => false, //'allow_self_signed' => true, //如果是自签名证书需要开启此选项 ) ); // 这里设置的是websocket协议(端口任意,但是需要保证没被其它程序占用) $worker = new Worker("websocket://0.0.0.0:20002",$context); // 设置transport开启ssl,websocket+ssl即wss //$this->server->transport = 'ssl'; // 启动4个进程对外提供服务 $worker->count = 1; $worker->uidConnections = array(); $handler = \App::make('App\Handlers\WorkermanHandler'); // 连接时回调 /*$worker->onWorkerStart = function($worker){ global $handler; // 开启一个内部端口,方便内部系统推送数据,Text协议格式 文本+换行符 $inner_text_worker = new Worker('Text://0.0.0.0:5678'); $inner_text_worker->onMessage = [$handler, 'onMessage']; $inner_text_worker->listen(); };*/ $worker->onConnect = [$handler, 'onConnect']; // 收到客户端信息时回调 $worker->onMessage = [$handler, 'onMessage']; // 进程启动后的回调 $worker->onWorkerStart = [$handler, 'onWorkerStart']; // 断开时触发的回调 $worker->onClose = [$handler, 'onClose']; // 运行worker Worker::runAll(); } }
                                            Run code
                                            Cut to clipboard
                                              #,广西南宁市,2019-01-16,16:12:47,
                                              Input "php wk stop" to stop. Start success.
                                              Run code
                                              Cut to clipboard

                                                <?php namespace App\Console\Commands; use Workerman\Worker; use Illuminate\Console\Command; class WorkermanCommand extends Command { private $server; /** * The name and signature of the console command. * * @var string */ //protected $signature = 'wk {action}'; protected $signature = 'workman {action} {--d}'; /** * The console command description. * * @var string */ protected $description = 'Start a Workerman server.'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { global $argv; $action = $this->argument('action'); $argv[0] = 'wk'; $argv[1] = $action; $argv[2] = $this->option('d') ? '-d' : ''; // php artisan workman start --d switch ($action) { case 'start': $this->start(); break; case 'stop': break; case 'restart': break; case 'reload': break; case 'status': break; case 'connections': break; } } private function start() { // 证书最好是申请的证书 $context = array( // 更多ssl选项请参考手册 http://php.net/manual/zh/context.ssl.php 'ssl' => array( // 请使用绝对路径 'local_cert' => '/www/wdlinux/nginx/conf/cert/a.***.net-ca-bundle.crt', // 也可以是crt文件 'local_pk' => '/www/wdlinux/nginx/conf/cert/a.***.net.key', 'verify_peer' => false, //'verify_peer_name' => false, //'allow_self_signed' => true, //如果是自签名证书需要开启此选项 ) ); // 这里设置的是websocket协议(端口任意,但是需要保证没被其它程序占用) $worker = new Worker("websocket://0.0.0.0:20002",$context); // 设置transport开启ssl,websocket+ssl即wss //$this->server->transport = 'ssl'; // 设置transport开启ssl $worker->transport = 'ssl'; // 启动4个进程对外提供服务 $worker->count = 1; $worker->uidConnections = array(); $handler = \App::make('App\Handlers\WorkermanHandler'); // 连接时回调 /*$worker->onWorkerStart = function($worker){ global $handler; // 开启一个内部端口,方便内部系统推送数据,Text协议格式 文本+换行符 $inner_text_worker = new Worker('Text://0.0.0.0:5678'); $inner_text_worker->onMessage = [$handler, 'onMessage']; $inner_text_worker->listen(); };*/ $worker->onConnect = [$handler, 'onConnect']; // 收到客户端信息时回调 $worker->onMessage = [$handler, 'onMessage']; // 进程启动后的回调 $worker->onWorkerStart = [$handler, 'onWorkerStart']; // 断开时触发的回调 $worker->onClose = [$handler, 'onClose']; // 运行worker Worker::runAll(); } }
                                                Run code
                                                Cut to clipboard
                                                  文章:Laravel 5.4 结合 Workerman 实现 TCP 长连接  发表时间:2019-01-16, 10:52:04  
                                                  展开↯

                                                  #371

                                                  作者:黑龙江省哈尔滨市
                                                  文章:yourphp后台密码次数限制Login_error_count  发表时间:2019-01-16, 14:57:39  
                                                  展开↯

                                                  #372

                                                  作者:广西南宁市
                                                  laravel 调试模式及日志配置
                                                  1)调试模式和日志的配置都在 config/app.php 配置文件中 2)打开调试模式 'debug' => env('APP_DEBUG', true) 3)laravel的日志默认已经打开了(不可以关),我们可以修改一下日志的记录方式(默认 single 单文件记录) 'log' => env('APP_LOG', 'daily') PS:日志的记录方式有 single, daily, syslog, errorlog 4)设置报错级别(避免生成过多日志) 'log_level' => env('APP_LOG_LEVEL', 'error') PS:config/app.php 文件里默认是没这个配置项的,要自己加,可以使用的值还有 debug, info, notice, warning, error, critical, alert, emergency
                                                  Run code
                                                  Cut to clipboard
                                                    文章:Laravel Npm Node  发表时间:2019-01-08, 17:06:25  
                                                    展开↯

                                                    #373

                                                    作者:广西南宁市
                                                    linux用nohup在后台常驻运行php脚本
                                                    nohup php a.php & 这样即使退出了终端,a.php依然在后台运行。
                                                    Run code
                                                    Cut to clipboard
                                                      文章:Laravel 5.4 结合 Workerman 实现 TCP 长连接  发表时间:2019-01-04, 08:45:03  
                                                      展开↯

                                                      #374

                                                      作者:广西南宁市
                                                      简单的开发实例

                                                      实例一、使用HTTP协议对外提供Web服务
                                                      创建http_test.php文件(位置任意,能引用到Workerman/Autoloader.php即可,下同)
                                                      <?php use Workerman\Worker; require_once __DIR__ . '/Workerman/Autoloader.php'; // 创建一个Worker监听2345端口,使用http协议通讯 $http_worker = new Worker("http://0.0.0.0:2345"); // 启动4个进程对外提供服务 $http_worker->count = 4; // 接收到浏览器发送的数据时回复hello world给浏览器 $http_worker->onMessage = function($connection, $data) { // 向浏览器发送hello world $connection->send('hello world'); }; // 运行worker Worker::runAll();
                                                      Run code
                                                      Cut to clipboard

                                                        命令行运行(windows用户用 cmd命令行,下同)
                                                        php http_test.php
                                                        Run code
                                                        Cut to clipboard


                                                          测试

                                                          假设服务端ip为127.0.0.1
                                                          在浏览器中访问url http://127.0.0.1:2345

                                                          实例二、使用WebSocket协议对外提供服务
                                                          创建ws_test.php文件
                                                          <?php use Workerman\Worker; require_once __DIR__ . '/Workerman/Autoloader.php'; // 注意:这里与上个例子不同,使用的是websocket协议 $ws_worker = new Worker("websocket://0.0.0.0:2000"); // 启动4个进程对外提供服务 $ws_worker->count = 4; // 当收到客户端发来的数据后返回hello $data给客户端 $ws_worker->onMessage = function($connection, $data) { // 向客户端发送hello $data $connection->send('hello ' . $data); }; // 运行worker Worker::runAll();
                                                          Run code
                                                          Cut to clipboard

                                                            命令行运行
                                                            php ws_test.php start
                                                            Run code
                                                            Cut to clipboard


                                                              测试

                                                              打开chrome浏览器,按F12打开调试控制台,在Console一栏输入(或者把下面代码放入到html页面用js运行)
                                                              // 假设服务端ip为127.0.0.1 ws = new WebSocket("ws://127.0.0.1:2000"); ws.onopen = function() { alert("连接成功"); ws.send('tom'); alert("给服务端发送一个字符串:tom"); }; ws.onmessage = function(e) { alert("收到服务端的消息:" + e.data); };
                                                              Run code
                                                              Cut to clipboard


                                                                实例三、直接使用TCP传输数据
                                                                创建tcp_test.php
                                                                <?php use Workerman\Worker; require_once __DIR__ . '/Workerman/Autoloader.php'; // 创建一个Worker监听2347端口,不使用任何应用层协议 $tcp_worker = new Worker("tcp://0.0.0.0:2347"); // 启动4个进程对外提供服务 $tcp_worker->count = 4; // 当客户端发来数据时 $tcp_worker->onMessage = function($connection, $data) { // 向客户端发送hello $data $connection->send('hello ' . $data); }; // 运行worker Worker::runAll();
                                                                Run code
                                                                Cut to clipboard

                                                                  命令行运行
                                                                  php tcp_test.php start
                                                                  Run code
                                                                  Cut to clipboard

                                                                    测试:命令行运行 (以下是linux命令行效果,与windows下效果有所不同)
                                                                    telnet 127.0.0.1 2347 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. tom hello tom
                                                                    Run code
                                                                    Cut to clipboard
                                                                      #,广西南宁市,2019-01-04,08:43:55, 慎用composer update
                                                                      composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害。 因为 composer update 的逻辑是按照 composer.json 指定的扩展包版本规则,把所有扩展包更新到最新版本,注意,是 所有扩展包,
                                                                      Run code
                                                                      Cut to clipboard
                                                                        文章:Laravel 5.4 结合 Workerman 实现 TCP 长连接  发表时间:2019-01-02, 18:13:33  
                                                                        展开↯

                                                                        #375

                                                                        作者:广西南宁市
                                                                        linux svn更新到指定版本
                                                                        直接 svn up -r 2105 当前的工作版本就是版本2105了 但是注意,这时svn库中会并不会生成新的版本,下次在本地svn up之后,还是会回到之前的版本。
                                                                        Run code
                                                                        Cut to clipboard
                                                                          文章:GitHub代码管理代码托管  发表时间:2019-01-04, 08:40:43  
                                                                          展开↯

                                                                          #376

                                                                          作者:广西南宁市
                                                                          Vue中使用websocket的正确使用方法
                                                                          <template> <div class="test"> </div> </template> <script> export default { name : 'test', data() { return { websock: null, } }, created() { this.initWebSocket(); }, destroyed() { this.websock.close() //离开路由之后断开websocket连接 }, methods: { initWebSocket(){ //初始化weosocket const wsuri = "ws://127.0.0.1:8080"; this.websock = new WebSocket(wsuri); this.websock.onmessage = this.websocketonmessage; this.websock.onopen = this.websocketonopen; this.websock.onerror = this.websocketonerror; this.websock.onclose = this.websocketclose; }, websocketonopen(){ //连接建立之后执行send方法发送数据 let actions = {"test":"12345"}; this.websocketsend(JSON.stringify(actions)); }, websocketonerror(){//连接建立失败重连 this.initWebSocket(); }, websocketonmessage(e){ //数据接收 const redata = JSON.parse(e.data); }, websocketsend(Data){//数据发送 this.websock.send(Data); }, websocketclose(e){ //关闭 console.log('断开连接',e); }, }, } </script> <style lang='less'> </style>
                                                                          Run code
                                                                          Cut to clipboard
                                                                            文章:Laravel 5.4 结合 Workerman 实现 TCP 长连接  发表时间:2019-01-04, 08:38:56  
                                                                            展开↯

                                                                            #377

                                                                            作者:广西南宁市
                                                                            <?php namespace App\Console\Commands; use Workerman\Worker; use Illuminate\Console\Command; class WorkermanCommand extends Command { private $server; /** * The name and signature of the console command. * * @var string */ protected $signature = 'wk {action}'; /** * The console command description. * * @var string */ protected $description = 'Start a Workerman server.'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { global $argv; $arg = $this->argument('action'); $argv[1] = $argv[2]; $argv[2] = isset($argv[3]) ? "-{$argv[3]}" : ''; switch ($arg) { case 'start': $this->start(); break; case 'stop': break; case 'restart': break; case 'reload': break; case 'status': break; case 'connections': break; } } private function start() { // 证书最好是申请的证书 $context = array( // 更多ssl选项请参考手册 http://php.net/manual/zh/context.ssl.php 'ssl' => array( // 请使用绝对路径 'local_cert' => '/www/wdlinux/nginx/conf/cert/a.gengdian.net-ca-bundle.crt', // 也可以是crt文件 'local_pk' => '/www/wdlinux/nginx/conf/cert/a.gengdian.net.key', 'verify_peer' => false, //'verify_peer_name' => false, //'allow_self_signed' => true, //如果是自签名证书需要开启此选项 ) ); // 这里设置的是websocket协议(端口任意,但是需要保证没被其它程序占用) $worker = new Worker("websocket://0.0.0.0:20002",$context); // 设置transport开启ssl,websocket+ssl即wss $this->server->transport = 'ssl'; // 启动4个进程对外提供服务 $worker->count = 1; $worker->uidConnections = array(); $handler = \App::make('App\Handlers\WorkermanHandler'); // 连接时回调 $worker->onConnect = [$handler, 'onConnect']; // 收到客户端信息时回调 $worker->onMessage = [$handler, 'onMessage']; // 进程启动后的回调 $worker->onWorkerStart = [$handler, 'onWorkerStart']; // 断开时触发的回调 $worker->onClose = [$handler, 'onClose']; // 运行worker Worker::runAll(); } }
                                                                            Run code
                                                                            Cut to clipboard
                                                                              文章:Laravel 5.4 结合 Workerman 实现 TCP 长连接  发表时间:2019-01-04, 08:38:06  
                                                                              展开↯

                                                                              #378

                                                                              作者:广西南宁市
                                                                              let与const的区别
                                                                              let与const都是只在声明所在的块级作用域内有效。

                                                                              let声明的变量可以改变,值和类型都可以改变,没有限制。

                                                                              const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。
                                                                              文章:Laravel Npm Node  发表时间:2019-01-02, 16:54:12  
                                                                              展开↯

                                                                              #379

                                                                              作者:广西南宁市
                                                                              在用UPUPW部署laravel项目遇到的问题

                                                                              添加虚拟主机之后,访问域名发现白屏,此时发现public下面其他文件均可访问,当时就懵逼了

                                                                              解决方案:
                                                                              说明服务器的
                                                                              error信息没有被显示,可是之前通过http://localhost/blog/public是可以访问的!但是本人试过的确是这样,将
                                                                              php.ini中的display_errors = Off 改为: display_errors = On, 访问可以看到空白页变成了出错信息的页面,看到如下错误信息:Warning: require(): open_basedir restriction in effect.
                                                                              进入http.conf文件或者http.vhosts.conf文件的open_basedir的值修改,很多LAMP组件会默认将open_basedir设置为与网站根目录一致,但是laravel有点变态,这里必须设置为上级目录,即此处的blog目录。设置完毕之后,重启apache,错误终于消除了。
                                                                              文章:Laravel Npm Node  发表时间:2019-01-02, 16:52:16  
                                                                              展开↯

                                                                              #380

                                                                              作者:广西南宁市
                                                                              vue读取音频文件
                                                                              methods: { // 试听游戏音乐 muiscPlay1(){ this.gamemuiscs1 = new Audio("../../static/audio/"+this.valueOpt); this.gamemuiscs1.play(); }, }
                                                                              Run code
                                                                              Cut to clipboard
                                                                                文章:Laravel Npm Node  发表时间:2019-01-02, 09:43:03  
                                                                                展开↯
                                                                                你好,残忍屏蔽广告

                                                                                确定要清除编辑框内容吗?

                                                                                该删除操作将不可恢复。

                                                                                删除 取消

                                                                                激活Windows

                                                                                转到"设置"以激活Windows。