首页
时事
归档
壁纸
更多
留言
关于
邻里
Search
1
使用必应Bing每日图片做网站背景(自动)
2,810 阅读
2
vue的输入值校验规则整理
1,443 阅读
3
好站推荐-https://wangchujiang.com/linux-command/
1,391 阅读
4
微信支付开发前准备(小程序、公众号、App、H5)
1,391 阅读
5
VUE `ERR_CONNECTION_TIMED_OUT`的解决办法
1,321 阅读
文章
图说
代码
吐槽
登录
Search
标签搜索
Linux
laravel
windows
TYPO3
php
shell脚本
git
微信
好站
vue
第三方登录
centos
linxu
centos7
thinkPHP
微信支付
api
MySQL
桌面
必应首图
Beer
累计撰写
114
篇文章
累计收到
21
条评论
首页
栏目
文章
图说
代码
吐槽
页面
时事
归档
壁纸
留言
关于
邻里
搜索到
114
篇与
SanLiLin
的结果
2022-06-20
检测网站502并使用企业微信机器人通知
检测网站访问日志,判断502出现的次数,达到一定次数时重启php-fpm,消除502错误,同时把处理结果使用企业微信机器人进行通知
2022年06月20日
409 阅读
0 评论
0 点赞
2022-01-20
Laravel避免重复的查询判断
常用查询方案if ($request->type) { $query = $query->where('type', $request->type); } if ($request->wave) { $query = $query->where('wave', $request->wave); } if ($request->spu) { $query = $query->where('spu','like', "%".$request->spu."%"); } if ($request->sku) { $query = $query->where('sku','like', "%".$request->sku."%"); }优化查询方案foreach(['type', 'wave'] as $where){ if ($request->{$where}) { $query = $query->where($where, $request->{$where}); } } foreach(['spu', 'sku'] as $where){ if ($request->{$where}) { $query = $query->where($where, 'like',"%".$request->{$where}."%"); } }
2022年01月20日
628 阅读
0 评论
0 点赞
2022-01-20
Laravel修改.env配置文件
要修改的数据$data=[ 'BAN_STATUS'=>'false', 'PASSPORT_CLIENT'=>1, ];修改方法public function updateEnv(array $data) { $envPath = base_path() . DIRECTORY_SEPARATOR . '.env'; $contentArray = collect(file($envPath, FILE_IGNORE_NEW_LINES)); $contentArray->transform(function ($item) use ($data){ foreach ($data as $key => $value){ if(str_contains($item, $key)){ return $key . '=' . $value; } } return $item; }); $content = implode("\n", $contentArray->toArray()); \File::put($envPath, $content); }
2022年01月20日
523 阅读
0 评论
0 点赞
2021-12-06
element-ui的el-form表单数据回显后输入框无法输入
解决办法this.form = JSON.parse(JSON.stringify(this.form));element-ui中的另一个解决办法this.form = deepClone(this.form);吐槽问题虽然解决了,但是我依然不知道个中缘由是什么,有同事说不能编辑的可能原因是当前对象未接触绑定(我的业务是动态增加表格行,行中有表单),虽然数据是正常的,但是它还绑定在前任身上,但是此时该对象已经有所改变,通俗点来说就是拿前朝的剑斩本朝的臣...所以这段代码可能的意思是我管你前朝还是本朝,全部抹掉重新赋值就OK了完...
2021年12月06日
990 阅读
0 评论
0 点赞
2021-11-09
Typecho插件-每日简报
Demo体验菜单:时事使用1.无插件实现1.在你的主题目录下 ~root/usr/themes/your-theme/ 创建一个单页模板文件2.文件名随意,然后在文件中你想要展示的地方添加如下代码<?php $content = file_get_contents('https://news.topurl.cn?ip='.get_real_ip()); echo $content; ?>3.在typecho后台添加单页,选择刚添加的页面作为模板即可
2021年11月09日
806 阅读
0 评论
0 点赞
2021-11-09
基于Pear Admin与Laravel的后台管理系统
安装获取项目代码cd web部署目录 git clone https://gitee.com/pear-admin/Pear-Admin-Laravel.git chmod -R 755 ./Pear-Admin-Laravel cd ./Pear-Admin-Laravel composer update创建数据库mysql -uroot -p #输入密码 create database pear_admin_laravel配置数据库cp .env.example .env #配置.env里的数据库连接信息初始化数据php artisan key:generate #初始化key php artisan storage:link #软连文件存储目录 chmod -R 755 storage/ #文件存储目录权限 php artisan migrate --step #执行数据迁移 php artisan db:seed #写入初始化数据初始化完成后浏览器打开项目地址 https://www.domain.com/admin 登录初始化登录用户名:admin 密码:password可视化日志管理路由 https://www.domain.com/log-viewer务必在登录成功后修改密码其他Vhost-Apache配置<VirtualHost *:80> DocumentRoot "/var/www/html/Pear-Admin-Laravel/public" ServerName www.domain.com ErrorLog "logs/site1-error.log" CustomLog "logs/site1-access.log" common <Directory "/var/www/html/HBAdmin/public"> Options FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>Vhost-Nginx配置server { listen 80; server_name www.domain.com; root /var/www/html/Pear-Admin-Laravel/public; index index.html index.htm index.php; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } location ~ .php$ { try_files $uri =404; root /var/www/html/Pear-Admin-Laravel/public; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi.conf; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }redis安装cd ~ wget https://download.redis.io/releases/redis-6.2.5.tar.gz tar xzf redis-6.2.5.tar.gz cd redis-6.2.5 make make install PREFIX=/usr/local/redis cd /usr/local/redis/bin/ ll cp ~/redis-6.2.5/redis.conf ./ vim redis.conf #找到daemonize no 改为daemonize yes ./redis-server redis.conf #后台启动redis ps aux|grep redis #查看redis进程
2021年11月09日
809 阅读
0 评论
0 点赞
2021-10-13
vue常用的简单操作代码
vue常用的简单操作代码,vue清空对象,vue数组循环,vue删除数组元素,vue关闭当前页面并打开新页面,vue页面通过路由方式跳转时重新加载,vue替换数组中的指定元素,vue键盘事件
2021年10月13日
688 阅读
1 评论
0 点赞
2021-09-04
Laravel 常用命令收集
创建项目laravel new blog || composer create-project --prefer-dist laravel/laravel blog安装组件composer install刷新组件composer update删除组件composer remove chensuilong/toastr composer dump-autoload查看artisan命令php artisan php artisan list启动PHP的Web服务php artisan serve查看某个帮助命令php artisan help make:model php artisan make:model User --migration 创建模型并创建新迁移查看laravel版本php artisan --version使用 PHP 内置的开发服务器启动应用php artisan serve生成一个随机的 key,并自动更新到 app/config/app.php 的 key 键值对(刚安装好需要做这一步)php artisan key:generate开启Auth用户功能(开启后需要执行迁移才生效)php artisan make:auth开启维护模式和关闭维护模式(显示503)php artisan down php artisan up进入tinker工具php artisan tinker列出所有的路由php artisan route:list生成路由缓存以及移除缓存路由文件php artisan route:cache php artisan route:clear重新生成签名php artisan passport:install自动生成Laravel密钥php artisan key:generateAuth 系统php artisan make:auth创建控制器php artisan make:controller StudentController创建Rest风格资源控制器(带有index、create、store、edit、update、destroy、show方法)php artisan make:controller PhotoController --resource创建模型php artisan make:model Student php artisan make:model User --migration //创建模型并创建新迁移创建新建表的迁移和修改表的迁移php artisan make:migration create_users_table --create=students //创建students表 php artisan make:migration add_votes_to_users_table --table=students//给students表增加votes字段执行迁移php artisan migrate php artisan migrate:rollback //回滚最新一次迁移创建模型的时候同时生成新建表的迁移php artisan make:model Student -m回滚上一次的迁移php artisan migrate:rollback回滚所有迁移php artisan migrate:reset php artisan migrate:refresh //更新表结构创建填充php artisan make:seeder StudentTableSeeder执行单个填充php artisan db:seed --class=StudentTableSeeder执行所有填充php artisan db:seed创建中间件(app/Http/Middleware 下)php artisan make:middleware Activity创建队列(数据库)的表迁移(需要执行迁移才生效)php artisan queue:table创建队列类(app/jobs下):php artisan make:job SendEmail创建请求类(app/Http/Requests下)php artisan make:request CreateArticleRequest php artisan:显示详细的命令行帮助信息,同 php artisan list php artisan –help:显示帮助命令的使用格式,同 php artisan help php artisan –version:显示当前使用的 Laravel 版本 php artisan changes:列出当前版本相对于上一版本的主要变化 php artisan down:将站点设为维护状态 php artisan up:将站点设回可访问状态 php artisan optimize:优化应用程序性能,生成自动加载文件,且产生聚合编译文件 bootstrap/compiled.php php artisan dump-autoload:重新生成框架的自动加载文件,相当于 optimize 的再操作 php artisan clear-compiled:清除编译生成的文件,相当于 optimize 的反操作 php artisan migrate:执行数据迁移 php artisan routes:列出当前应用全部的路由规则 php artisan serve:使用 PHP 内置的开发服务器启动应用 【要求 PHP 版本在 5.4 或以上】 php artisan tinker:进入与当前应用环境绑定的 REPL 环境,相当于 Rails 框架的 rails console 命令 php artisan workbench 组织名/包名:这将在应用根目录产生一个名为 workbench 的文件夹,然后按 组织名/包名 的形式生成一个符合 Composer 标准的包结构,并自动安装必要的依赖【需要首先完善好 app/config/workbench.php 文件的内容】 php artisan cache:clear:清除应用程序缓存 php artisan command:make 命令名:在 app/commands 目录下生成一个名为 命令名.php 的自定义命令文件 php artisan controller:make 控制器名:在 app/controllers 目录下生成一个名为 控制器名.php 的控制器文件 php artisan db:seed:对数据库填充种子数据,以用于测试 php artisan key:generate:生成一个随机的 key,并自动更新到 app/config/app.ph 的 key 键值对 php artisan migrate:install:初始化迁移数据表 php artisan migrate:make 迁移名:这将在 app/database/migrations 目录下生成一个名为 时间+迁移名.php 的数据迁移文件,并自动执行一次 php artisan dump-autoload 命令 php artisan migrate:refresh:重置并重新执行所有的数据迁移 php artisan migrate:reset:回滚所有的数据迁移 php artisan migrate:rollback:回滚最近一次数据迁移 php artisan session:table:生成一个用于 session 的数据迁移文件
2021年09月04日
692 阅读
0 评论
0 点赞
2021-08-06
msyqldump导出表
导出全库方法mysqldump -uroot -p database > data.sql导出某几个表# 需要导出的表写在文件里 tables.txt scm_table1 scm_table2 scm_table3 scm_table4 scm_table5mysqldump -uroot -p database `cat tables.txt` > data.sql导出相同前缀的表# 需要导出的表写在文件里 tables.txt scm_table1 scm_table2 scm_table3 scm_table4 scm_table5mysqldump -uroot -p database `cat tables.txt` > data.sql导出查询的数据到文件select name,email from user where id>10 order by id desc INTO OUTFILE '/data.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
2021年08月06日
690 阅读
0 评论
0 点赞
2021-06-22
vue的输入值校验规则整理
1、是否合法IP地址export function validateIP(rule, value,callback) { if(value==''||value==undefined||value==null){ callback(); }else { const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/; if ((!reg.test(value)) && value != '') { callback(new Error('请输入正确的IP地址')); } else { callback(); } } }2、是否手机号码或者固话export function validatePhoneTwo(rule, value, callback) { const reg = /^((0\d{2,3}-\d{7,8})|(1[34578]\d{9}))$/;; if (value == '' || value == undefined || value == null) { callback(); } else { if ((!reg.test(value)) && value != '') { callback(new Error('请输入正确的电话号码或者固话号码')); } else { callback(); } } }3、是否固话export function validateTelphone(rule, value,callback) { const reg =/0\d{2,3}-\d{7,8}/; if(value==''||value==undefined||value==null){ callback(); }else { if ((!reg.test(value)) && value != '') { callback(new Error('请输入正确的固定电话)')); } else { callback(); } } }4、是否手机号码export function validatePhone(rule, value,callback) { const reg =/^[1][3-9][0-9]{9}$/; if(value==''||value==undefined||value==null){ callback(); }else { if ((!reg.test(value)) && value != '') { callback(new Error('请输入正确的电话号码')); } else { callback(); } } }5、是否身份证号码export function validateIdNo(rule, value,callback) { const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; if(value==''||value==undefined||value==null){ callback(); }else { if ((!reg.test(value)) && value != '') { callback(new Error('请输入正确的身份证号码')); } else { callback(); } } }6、是否邮箱export function validateEMail(rule, value,callback) { const reg =/^([a-zA-Z0-9]+[-_\.]?)+@[a-zA-Z0-9]+\.[a-z]+$/; if(value==''||value==undefined||value==null){ callback(); }else{ if (!reg.test(value)){ callback(new Error('请输入正确的邮箱')); } else { callback(); } } }7、合法urlexport function validateURL(url) { const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; return urlregex.test(url); }8、验证内容是否包含英文数字以及下划线export function isPassword(rule, value, callback) { const reg =/^[_a-zA-Z0-9]+$/; if(value==''||value==undefined||value==null){ callback(); } else { if (!reg.test(value)){ callback(new Error('仅由英文字母,数字以及下划线组成')); } else { callback(); } } }9、自动检验数值的范围export function checkMax20000(rule, value, callback) { if (value == '' || value == undefined || value == null) { callback(); } else if (!Number(value)) { callback(new Error('请输入[1,20000]之间的数字')); } else if (value < 1 || value > 20000) { callback(new Error('请输入[1,20000]之间的数字')); } else { callback(); } }10、验证数字输入框最大数值export function checkMaxVal(rule, value,callback) { if (value < 0 || value > 最大值) { callback(new Error('请输入[0,最大值]之间的数字')); } else { callback(); } }11、验证是否1-99之间export function isOneToNinetyNine(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入正整数')); } else { const re = /^[1-9][0-9]{0,1}$/; const rsCheck = re.test(value); if (!rsCheck) { callback(new Error('请输入正整数,值为【1,99】')); } else { callback(); } } }, 0); }12、验证是否整数export function isInteger(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入正整数')); } else { const re = /^[0-9]*[1-9][0-9]*$/; const rsCheck = re.test(value); if (!rsCheck) { callback(new Error('请输入正整数')); } else { callback(); } } }, 0); }13、验证是否整数,非必填export function isIntegerNotMust(rule, value, callback) { if (!value) { callback(); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入正整数')); } else { const re = /^[0-9]*[1-9][0-9]*$/; const rsCheck = re.test(value); if (!rsCheck) { callback(new Error('请输入正整数')); } else { callback(); } } }, 1000); }14、 验证是否是[0-1]的小数export function isDecimal(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入[0,1]之间的数字')); } else { if (value < 0 || value > 1) { callback(new Error('请输入[0,1]之间的数字')); } else { callback(); } } }, 100); }15、 验证是否是[1-10]的小数,即不可以等于0export function isBtnOneToTen(rule, value, callback) { if (typeof value == 'undefined') { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入正整数,值为[1,10]')); } else { if (!(value == '1' || value == '2' || value == '3' || value == '4' || value == '5' || value == '6' || value == '7' || value == '8' || value == '9' || value == '10')) { callback(new Error('请输入正整数,值为[1,10]')); } else { callback(); } } }, 100); }16、验证是否是[1-100]的小数,即不可以等于0export function isBtnOneToHundred(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入整数,值为[1,100]')); } else { if (value < 1 || value > 100) { callback(new Error('请输入整数,值为[1,100]')); } else { callback(); } } }, 100); }17、验证是否是[0-100]的小数export function isBtnZeroToHundred(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入[1,100]之间的数字')); } else { if (value < 0 || value > 100) { callback(new Error('请输入[1,100]之间的数字')); } else { callback(); } } }, 100); }18、验证端口是否在[0,65535]之间export function isPort(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (value == '' || typeof(value) == undefined) { callback(new Error('请输入端口值')); } else { const re = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/; const rsCheck = re.test(value); if (!rsCheck) { callback(new Error('请输入在[0-65535]之间的端口值')); } else { callback(); } } }, 100); }19、验证端口是否在[0,65535]之间,非必填,isMust表示是否必填export function isCheckPort(rule, value, callback) { if (!value) { callback(); } setTimeout(() => { if (value == '' || typeof(value) == undefined) { //callback(new Error('请输入端口值')); } else { const re = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/; const rsCheck = re.test(value); if (!rsCheck) { callback(new Error('请输入在[0-65535]之间的端口值')); } else { callback(); } } }, 100); }20、小写字母export function validateLowerCase(val) { const reg = /^[a-z]+$/; return reg.test(val); }22、两位小数验证const validateValidity = (rule, value, callback) => { if (!/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/.test(value)) { callback(new Error('最多两位小数!!!')); } else { callback(); } };23、是否大写字母export function validateUpperCase(val) { const reg = /^[A-Z]+$/; return reg.test(val); }24、是否大小写字母export function validatAlphabets(val) { const reg = /^[A-Za-z]+$/; return reg.test(val); }25、密码校验export const validatePsdReg = (rule, value, callback) => { if (!value) { return callback(new Error('请输入密码')) } if (!/^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$)([^\u4e00-\u9fa5\s]){6,20}$/.test(value)) { callback(new Error('请输入6-20位英文字母、数字或者符号(除空格),且字母、数字和标点符号至少包含两种')) } else { callback() } }26、中文校验export const validateContacts = (rule, value, callback) => { if (!value) { return callback(new Error('请输入中文')) } if (!/^[\u0391-\uFFE5A-Za-z]+$/.test(value)) { callback(new Error('不可输入特殊字符')) } else { callback() } }27、身份证校验export const ID = (rule, value, callback) => { if (!value) { return callback(new Error('身份证不能为空')) } if (! /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(value)) { callback(new Error('请输入正确的二代身份证号码')) } else { callback() } }`28、 账号校验export const validateCode = (rule, value, callback) => { if (!value) { return callback(new Error('请输入账号')) } if (!/^(?![0-9]*$)(?![a-zA-Z]*$)[a-zA-Z0-9]{6,20}$/.test(value)) { callback(new Error('账号必须为6-20位字母和数字组合')) } else { callback() } }29 、纯数字校验export const validateNumber = (rule, value, callback) => { let numberReg = /^\d+$|^\d+[.]?\d+$/ if (value !== '') { if (!numberReg.test(value)) { callback(new Error('请输入数字')) } else { callback() } } else { callback(new Error('请输入值')) } }30、最多一位小数const onePoint = (rule, value, callback) => { if (!/^[0-9]+([.]{1}[0-9]{1})?$/.test(value)) { callback(new Error('最多一位小数!!!')); } else { callback(); } };31、大于0的所有数字const onePoint = (rule, value, callback) => { if (!/^[0-9]+([.]{1}[0-9]{1})?$/.test(value)) { callback(new Error('最多一位小数!!!')); } else { callback(); } };
2021年06月22日
1,443 阅读
2 评论
0 点赞
2021-06-04
VUE的input框赋值后无法进行编辑
问题情况data中有定义对应字段,input框也进行绑定对了v-model 但进行赋值后,input输入框无法进行操作(select下拉选框也有同样的问题),不晓得是不是我半路出家搞前端哪块出问题了,问了不少人都说是直接model赋值,但我就是不行。。。解决:使用vue的全局方法:this.$set(data, property, value) //data为要修改的对象,property为要添加的属性,value就是这个属性的值//例如: this.$set(this.addForm, "provider", '张三的店');结语这个问题说实话我不清楚是什么原因导致的,网上找说是没有绑定get,set方法,暂且就先相信这种方法吧
2021年06月04日
1,023 阅读
0 评论
0 点赞
2021-05-28
VUE `ERR_CONNECTION_TIMED_OUT`的解决办法
错误vue项目运行后出现如下错误GET http://192.168.1.13:9527/sockjs-node/info?t=1538257166715 net::ERR_CONNECTION_TIMED_OUT sockjs.js?9be2:1605运行系统: macOS解决在vue.config.js中添加如下配置module.exports = { devServer: { host: 'localhost' } };
2021年05月28日
1,321 阅读
0 评论
0 点赞
1
2
...
10