PHP 处理 16 进制数据以及TCP 报文发送工具 sokit 使用
公司的充电宝项目使用物联网技术连接设备,而与设备交互需要用到 TCP (或者 MQTT,性质一样)长连接。PHP 做这种项目大概率都会使用 workerman 框架(可以处理 TCP、Websockt 等请求),而业务框架 thinkphp 似乎也是首选。因为 thinkphp 可以将 wokerman 以扩展库的形式直接安装到框架中使用,过程非常简便。thinkphp 会在 config 下生成
公司的充电宝项目使用物联网技术连接设备,而与设备交互需要用到 TCP (或者 MQTT,性质一样)长连接。PHP 做这种项目大概率都会使用 workerman 框架(可以处理 TCP、Websockt 等请求),而业务框架 thinkphp 似乎也是首选。因为 thinkphp 可以将 wokerman 以扩展库的形式直接安装到框架中使用,过程非常简便。thinkphp 会在 config 下生成
在做一个数据维护工作的 php 脚本时,从插入数据库的记录中发现,数据记录被插入了两次。通过加入 Log 日志标记发现,问题源头在 foreach 循环执行上数据库操作上。查看循环对象,并没有重复记录,所以是 foreach 方法体本身执行了两次,这是我不能理解的。猜测与循环执行的数据库异步操作有关。以下为循环异步操作的代码示例: $orders = Orders::where('m
本来计算上线天数或注册天数是可以放到查询返回结果中处理的,但业务逻辑需要筛选上线天数达到7天、30天的记录,也就是说日期差值需要用在 where 子句中。这时需要 mysql 的库函数来帮忙处理了。涉及到处理时间差值的 mysql 库函数有这几个:TIMEDIFF()、DATEDIFF()、TIMESTAMPDIFF()。1. 使用 TIMEDIFF() 函数,求 time 差值timediff(
DB::enableQueryLog();//放在需要打印的查询前 User::all(); return DB::getQueryLog();//放在查询的后可以用 dd 直接输出:dd(DB::getQueryLog());
laravel 默认的数据库排序编码 app/config.php:'mysql' => [ ... 'collation' => 'utf8_unicode_ci', ... ]ci 表示 case insensitive,即大小写不敏感,与之对应的是 cs case sensitive。utf8 为字符集编码。新版本变成了 utf8mb4_unicode_ci,但不影响它使
值->where('name','admin') ->orWhere('name','tom')区间->whereBetween('age',[20,30]) ->whereNotBetween('age',[20,30])null->whereNull('content') ->whereNotNull('content')数组->whereIn(
既然使用了框架,就该借助框架之利。Laravel 之类的框架,或者说现在的所有 PHP 框架都趋向于通过 composer 进行第三方库的自动引入,这样做简洁方便。composer 安装 Intervention Image安装 Intervention Image 之前,需要确保 PHP 版本 >=5.4 并且安装了 fileinfo 扩展,以及 GD 库(>=2.0)或者 Imag
使用 isset 判断多个变量是否已设置主要用在请求参数的判断上,但这个判断正在被框架的 Request 类中的验证规则所取代。对于其他的方法体内的多个变量,一般会用 isset($var1) && isset($var2) ... 来实现。今天遇到一个需要判断 4 个参数是否存在的情况,找到了函数说明:(PHP 4, PHP 5, PHP 7, PHP 8)isset — 检测变
支付宝的模板消息分为三类:订阅类、交易类和表单类。其中订阅类显而易见,需要用户的授权才能推送,也就是说小程序需要调起用户授权这样的显式弹框。参考其他同类产品,发现有的小程序存在静默授权的情况,即不用调起授权也可以发送模板消息的情况。研究了一会儿,能发现的只是小程序设置里的「消息管理」的「接收消息提醒」在新用户使用时默认是打开的。一开始尝试创建的是交易类的模板消息,但发现预授权冻结订单只有在转支付后
完整指令:sudo ngrep -W byline -d eth0 port 80-W byline 表示与换行符换行显示-d eth0 表示侦听 eth0 网卡, -d lo 就是指侦听本地网卡port 80 表示侦听端口 80