php
flysnownet
这个作者很懒,什么都没留下…
展开
-
php使用phpoffice/phpspreadsheet导入导出excel表格
php使用phpoffice/phpspreadsheet导入导出excel表格数据。原创 2022-08-04 15:50:40 · 1451 阅读 · 0 评论 -
php将在线远程文件写入临时文件
项目中需要从上传到七牛的Excel表格里导入数据,首先得要将文件存远程临时保存一下,再进行后续操作tempnam() 函数创建一个具有唯一文件名的临时文件,若成功,则该函数返回新的临时文件名,若失败,则返回false。sys_get_temp_dir() 获得当前的临时文件目录fopen($filename, “wb”) wb二进制写入。...原创 2022-08-03 17:58:23 · 442 阅读 · 0 评论 -
从零开始写一个PHP开发框架websocket框架
前言本项目基于workerman实现支持websocket、tcp协议的PHP框架,mvc模式,跟传统http框架运行原理相差不多,只是入口依赖于workerman接收到的消息项目源码可以移步github参考,欢迎star入口入口文件是GatewayWorker下Event.php入口处需要引入下自动加载函数,以便框架里函数调用require_once DIR . ‘/…/lib/Autoloader.php’;主要有两个函数onWorkerStart 项目启动时初始化框架onMessag原创 2022-05-25 12:05:57 · 728 阅读 · 1 评论 -
PHP连接发送读取tcp数据流
代码class BaseTest extends \PHPUnit\Framework\TestCase{ private $host = 'tcp://192.168.10.10:7273';// private $host = 'tcp://172.17.0.2:7273'; public function request($param) { $client = stream_socket_client($this->host);原创 2022-05-24 15:46:12 · 757 阅读 · 0 评论 -
websocket框架封装实现回调函数代替ajax
keyword:websocket回调,websocket像ajax一样,websocket接口请求,同步回调,websocket MVC框架前言传统http短连接拉取接收数据太浪费资源,tcp每次都得建立连接,三次握手,释放,只能单向通信,定时轮询。而websocket可以建立长连接,后一直保持,节约服务器资源,跟每台客户机只维持一个连接就行。节省流量 不需要频繁地发起关闭tcp连接,可以双向通信,协议以及数据格式自己算了算,省略HTTP上不必要的信息,基于以上原因,开发一套socket框架来原创 2022-04-29 15:26:11 · 4165 阅读 · 0 评论 -
MySQL按天统计最近七天数据
$time = time(); $today = strtotime(date('Y-m-d', time()));//零点时间戳 $todayDate = date('Y-m-d', time()); //最近7天 $sevenDaysAgo = strtotime(date('Y-m-d', time())) - 7 * 86400; $sql = "SELECT t1.day, COUNT(t2.id) user_numFRO原创 2022-03-21 16:45:32 · 3256 阅读 · 0 评论 -
docker下 php安装gd库,zip扩展扩展
mpdf/mpdf v8.0.4 requires ext-gd * -> it is missing from your system. Install or enable PHP’s gd extensiondocker下 php安装gd,zip扩展gd库安装apt-get install --allow-downgrades -y zlib1g=1:1.2.8.dfsg-5 zlib1g-dev libz-dev libfreetype6-dev libjpeg62-turbo-de.原创 2022-03-02 17:35:58 · 1432 阅读 · 0 评论 -
phpstorm配置phpunit单元测试及PHPunit断言函数
PHPunit安装及配置项目中引入PHPunitcomposer require phpunit/phpunit安装PHPunit脚本下载跟当前PHP版本兼容的phpunit.pharphpstorm里配置好脚本路径phpstorm中Languages & Frameworks > PHP > Test Frameworks配置phpunit.xml<?xml version="1.0" encoding="UTF-8"?><!--bootstr原创 2022-01-20 15:55:34 · 1385 阅读 · 0 评论 -
thinkphp,thinkOrm同时使用where跟whereOr错误
keyword:thinkphp where跟whereOr同时使用前言判断时间冲突时用whereOr跟where没法实现想要的效果,后面用原生SQL写了,今天突然想到试试闭包查询,遂测试一番果然可行thinkphp同时使用where和whereOr,本意是两个条件and并列查询,但实际上两个条件之间会用OR连接错误写法如下$map1 = [['start_time', '>', $startTime], ['start_time', '<', $endTime]];原创 2021-09-15 18:08:38 · 688 阅读 · 0 评论 -
php生成连续的日期时间段
php生成连续的日期时间段$startTime = '2021-01-1';$endTime = '2021-2-1';$list = range(strtotime($startTime), strtotime($endTime), 24*60*60);$list = array_map(function($v){ return date("Y-m-d", $v);}, $list);print_r($list);/// [0] => 2021-01-01 [原创 2021-09-09 14:40:25 · 527 阅读 · 0 评论 -
宝塔自定义nginx访问日志配置
nginx日志自定义配置问题有时nginx默认的日志满足不了需求,比如网站绑定了多个域名,想知道用于访问的是具体域名,这时候就需要自定义nginx日志了。nginx 中access log 记录了用户访问的页面以及用户浏览器、ip和其他的访问信息log_format,用来设置日志格式,access_log,用来指定日志文件的存放路径、格式和缓存大小log_format语法log_format name [escape=default|json] string ...;name 格式名称。在原创 2021-08-23 15:53:31 · 4128 阅读 · 1 评论 -
php获取当月第一天最后一天开始结束时间戳
php获取当月第一天最后一天开始结束时间戳$startTime = strtotime(date('Y-m', $month));//月初零点时间戳$endTime = strtotime(date('Y-m-t 23:59:59', $month));//月末时间戳原创 2021-08-09 16:08:05 · 520 阅读 · 0 评论 -
MySQL判断时间段是否与已有时间重合冲突
描述向数据库中插入新的时间段前,需要判断是否跟库中已经有的时间段冲突,有的话拒绝插入冲突种类可能发生的冲突情况有以下四种,如图1.与已有时间前面部分重叠2.与已有时间后面部分重叠3.被已有时间包含4.包含了已有时间四种情况取并集就是所以冲突情况,1和2的并集就是4,不需要再算进条件里拼写SQLSELECT * FROM `sign_rule` WHERE ( `start_time` > $startTime AND `start_time` < $endTime )原创 2021-08-06 10:50:41 · 3616 阅读 · 1 评论 -
php多组时间段判断冲突是否交叉重复
多组时间段判断有没时间冲突,忽略边界思路按开始时间讲数据升序排序然后判断下一个开始时间如果小于上一个结束时间,则发生冲突代码$arr = [ ['start_time' => 1, 'end_time' => 10], ['start_time' => 3, 'end_time' => 8], ['start_time' => 5, 'end_time' => 6],];function compareDat..原创 2021-05-17 10:46:21 · 1164 阅读 · 0 评论 -
php composer自动加载根命名空间根目录autoload
配置composer autoload自动加载根目录框架中自己实现自动加载require_once __DIR__ . '/../lib/Autoloader.php';namespace lib;/** * 自动加载 */class Autoloader{ public static function load($className) { $classPath = str_replace('\\', '/', $className); .原创 2021-04-22 16:55:51 · 936 阅读 · 0 评论 -
mysql查询未提交事务的sql语句
mysql查询未提交事物的sql语句,找出未提交事务执行的SQL语句mysql开启事务后没有提交就退出,事务长时间running状态,进程又处于Sleep状态,有可能后续导致其他事物超时失败常见原因事务过程中执行其他非数据库操作,导致事务长期未被处理。 事务处理异常或实现逻辑有误,导致事务未被正常处理。 网络,数据库负荷过大等 能找到事物执行的sql语句的话就很容易定位到程序中错误的代码排查过程查看所有事务查看进程信息查询进程状态,发现sleep中...原创 2021-03-15 16:36:58 · 3022 阅读 · 0 评论 -
php避免循环查询数据库优化一对多查询
列表查询中一对多查询循环查询优化,mysql循环查询优化描述比如查询学生列表,每一行需要包含该学生的家长列表,一个学生对应多个家长。循环查询方式先查出学生列表,再循环查询对应的家长列表,需要查询N+1次但在循环中查询数据不但效率低下而且对数据库造成很大对压力,当循环次数多的时候,一方面会造成严重的网络延迟,一方面可能会连接数据库失败,在开发中应该尽量避免在循环里查询数据库优化方案使用关联查询联合查询所有数据行,再循环处理按学生归类,查询次数1示例代码$list =原创 2021-03-02 16:23:54 · 757 阅读 · 0 评论 -
workerman gatawayworker 定时器
workerman初始化定时器,workerman重启定时器介绍业务中写的定时器,当遇到workerman异常,重启后会失效,所以想项目初始化时启动所有定时器,定时器写在配置文件中,这样业务每次重启时定时器也会随之生效代码实现如下 /** *初始化 * @author xingxiong.fei@163.com * @date 2020-09-03 9:43 */ public function init($worker...原创 2020-12-30 17:30:20 · 574 阅读 · 0 评论 -
thinkphp结果集判空isEmpty
thinkphp结果集判空isEmpty使用select查询多条数据结构可以得到的是结果集可以使用isEmpty判空当使用find,get获取到的是单条,不支持isEmpty所以多条数据用isEmpty单挑直接empty()原创 2020-12-29 14:57:37 · 1051 阅读 · 0 评论 -
thinkphp软删除验证器获取$data数据,自定义验证,多条件唯一性验证unique验证
thinkphp验证器获取$data数据,自定义验证,多条件唯一性验证,软删除验证唯一性,unique验证问题描述项目中使用软删除,数据删除后验证器里唯一性验证不通过,需要字节拼接条件如下// 复杂验证条件'name' => 'unique:user,status=1&account='.$data['account'],但是默认rule规则里不能直接获取到$data解决方法使用自定义验证拿到$data再验证唯一性代码class Teacher .原创 2020-12-23 11:55:16 · 704 阅读 · 0 评论 -
php判断二维数组中有没重复的id
原理array_column 获取id数组array_unique去重两个数组长度不一致则存在重复的id代码$list = array( ['id' => 1,'name' => 'hahah'], ['id' => 2,'name' => 'hah44ah'], ['id' => 3,'name' => 'hagghah'], .原创 2020-12-18 15:12:28 · 1075 阅读 · 0 评论 -
thinkphp 模型name属性字段冲突
thinkphp 模型属性字段冲突,name ,table ,pk冲突10501,SQLSTATE[42S02]: Base table or view not found: 1146 Table 'lesson.' doesn't exist在模型中,获取属性name,pk,table时,与数据表中的字段冲突比如获取name字段$info = $this->get(1);$info->name这里获取的到name是当前的模型类名而不是字段名解决方法获取是使用获取原创 2020-12-18 14:32:58 · 1143 阅读 · 0 评论 -
phpstrom 截断表 truncate
最近使用phpstrom管理数据库,功能强大,省去了安装其他sql管理工具但清空表时找不到截断表的操作在哪里,选中删除太慢操作不方便研究了一番最终找到了原创 2020-12-09 16:11:01 · 200 阅读 · 0 评论 -
thinkphp唯一性验证器unique编辑修改数据时提示重复
thinkphp唯一验证器修改时验证错误问题thinkPHP使用unique验证器新增数据没问题,但是编辑数据时提示重复验证规则如下protected $rule = [ 'name' => 'require|max:50', 'role_id' => 'number', 'mobile' => 'mobile|unique:teacher', ];查看日志验证时执行的sql如原创 2020-11-30 12:04:04 · 1715 阅读 · 0 评论 -
mysql删除id最小的一条
You can't specify target table 'user_student' for update in FROM clausemysql删除id最小的一条错误语句执行以下语句报错delete from user_student where id = (select min(id) id from user_student)You can't specify target table 'user_student' for update in FROM clause..原创 2020-11-23 17:23:06 · 1651 阅读 · 0 评论 -
mysql join on多条件关联on大于小于
MySQL多个条件关联,join多个条件关联介绍使用join关联表时on后面写多个条件代码SELECT * FROM lecture l INNER JOIN lecture_limit lt ON l.id = lt.lecture_id INNER JOIN student_class sc ON sc.CODE = lt.CODE OR floor( sc.CODE / 1000 ) = lt.CODE OR floor( sc.CODE / 1000000 ) =原创 2020-11-19 15:16:43 · 6310 阅读 · 0 评论 -
mysql根据某个字段去重
mysql字段去重,根据一个字段去重,聚合查询去重需求查询出相同班级id的打卡记录数方案在count 里使用distinct 对字段去重数据原型统计出来user_id是两个才对去重前,num6SELECTsc.*, count(lr.user_id ) numFROM `student_class` `sc` INNER JOIN `student` `s` ON `sc`.`id` = `s`.`class_id` INNER ...原创 2020-11-16 10:58:33 · 3351 阅读 · 0 评论 -
php switch case 两个条件,多个条件同一个case
介绍多个case值执行相同的逻辑时,希望写在同一个case下,例如case 'a'||'b':,但实际不能正确运行解决方案第一个条件后,不要写breck终端,他会自动执行下一个条件下语句$data为a或b时,都输出ab,为c时输出cswitch ($data) { case 'a': case 'b': echo 'ab'; break; case..原创 2020-11-12 15:19:53 · 9080 阅读 · 1 评论 -
json传输二进制图片二进制流小程序保存base64
easywechat获取小程序码二进制流,json传输二进制图片二进制流介绍项目中需要生成小程序码给前端,生成二维码接口微信服务器直接返回二进制数据流,因为前后端接口是json格式同时业务服务器不能保存图片再给前端访问,需要json返回二进制图片数据尝试直接返回二进制,字符太长无法输出,原理将二进制base64编码,得到字符串,再将base64字符串返回前端前端直接显示<img src=“data:image/png;base64,*********************原创 2020-11-10 11:56:44 · 2037 阅读 · 0 评论 -
php合并id相同的数组
php根据字段合并数组,根据相同的id合并数组介绍用户有多个昵称,查出来每个昵称对应一条记录,想把同一个用户的昵称等信息合并成一条初始数据格式$a = array( ['id' => 1, 'name' => 'liming' ,'nickname'=> 'aaa'], ['id' => 1, 'name' => 'liming' ,'nickname'=> 'bbb'], [.原创 2020-11-09 18:13:19 · 1452 阅读 · 1 评论 -
docker下php时区错误,docker时间不同步
docker时间错误,时区错误,php时区错误介绍项目中使用docker部署php服务,发现时间格式化后时区不对,开始以为是容器时区跟宿主机不同步,所以先设置了宿主机时区docker时区设置查看时区date -R同步宿主机时间到容器中docker cp /etc/localtime workerman:/etc/localtime然后容器中date -R查看时区跟宿主机一样了php时区设置后面发现docker下运行的php-cli 容器,php默认时区为UTC时区原创 2020-10-30 16:53:41 · 1076 阅读 · 0 评论 -
GatewayWorker转发http请求给socket服务
workerman,GatewayWorker将http传统web请求转发给socket,tcp服务,在一个普通的Web项目中通过GatewayWorker推送数据介绍项目中使用GatewayWorker作为服务端,业务逻辑都在workerman中实现,客户端只能通过socket拉取数据,同时又有些第三方服务会发送http请求给服务器,比如支付回调,为解决这一问题,只好将http请求转发给workerman,处理完再将结果响应给http请求流程GatewayWorker中开启一个内部Ga原创 2020-10-22 10:31:29 · 1548 阅读 · 0 评论 -
php批量重命名文件名
介绍下载了一堆文件,想要批量重命名替换掉文件名中广告内容,网上找半天软件下载安装太麻烦还不一定能用,就用php简单写了一个功能批量替换当前目录下的文件名,代码rename.php首先获取当前目录所有文件名修改文件名用rename重命名<?php$list = scandir(__DIR__);foreach ($list as $k => $v){ $newName = str_replace("替换前","替换后",$v); ren原创 2020-10-16 10:43:58 · 402 阅读 · 0 评论 -
docker run -d 启动后马上停止
介绍最近学习docker,运行php-cli时启动后会马上停止,而php-fpm不会docker ps -a查看已经退出docker run -d php:7.3-cli原因docker容器没有前台进程执行,会自行退出解决使用 -dit-it终端交互方式一直运行docker run -dit --name worker -p 8283:8283 -v /home/wwwroott:/www php:7.3-cli...原创 2020-09-08 16:27:08 · 3781 阅读 · 0 评论 -
php捕捉Warning、Notice错误
介绍php中try catch 无法捕捉到Warning、Notice错误解决方法1.注册错误处理函数来全局捕捉,缺点,不能try catch马上捕捉到,进行处理set_error_handler([__CLASS__, 'error']);set_exception_handler([__CLASS__, 'exception']);register_shutdown_function([__CLASS__, 'shutdown']);set_error_handler原创 2020-09-04 10:22:19 · 11680 阅读 · 0 评论 -
php redis断线重连
介绍在swoole ,workerman等cli长连接模式下,遇到Redis异常断开,后面又开启的情况,一般得重新启动程序才能正常使用,本文介绍在不重启服务,实现原来的Redis断线重连原理Redis 断开的情况下调用$Redis->ping()会触发Notice错误,Notice: Redis::ping(): send of 14 bytes failed with errno=10054当获取redis实例时,如果ping不通或者出现异常,就重新连接实现1.原创 2020-09-04 10:00:33 · 3004 阅读 · 1 评论 -
PHP封装异常类,注册错误和异常处理机制
PHP 注册错误和异常处理机制介绍全局捕捉异常错误,并记录到日志系统代码<?phpnamespace lib;use Exception;class Error{ /** * 配置参数 * @var array */ protected static $exceptionHandler; /** * 注册异常处理 * @access public * @return void原创 2020-09-02 17:26:04 · 4638 阅读 · 0 评论 -
thinkphp5使用数据库表锁
tp5数据库锁的使用Lock方法是用于数据库的锁机制,如果在查询或者执行操作的时候使用:Db::name('user')->where('id',1)->lock(true)->find();就会自动在生成的SQL语句最后加上FOR UPDATE或者FOR UPDATE NOWAIT(Oracle数据库)。lock方法支持传入字符串用于一些特殊的锁定要求,例如:Db::name('user')->where('id',1)->lock('lock i.原创 2020-09-02 14:15:30 · 4800 阅读 · 0 评论 -
php浮点数高精度计算函数及常用数值处理
浮点数高精度计算bcadd— 2个任意精度数字的加法计算 bccomp— 比较两个任意精度的数字 bcdiv— 2个任意精度的数字除法计算 bcmod— 对一个任意精度数字取模 bcmul— 2个任意精度数字乘法计算 bcpow— 任意精度数字的乘方 bcpowmod— Raise an arbitrary precision number to another, reduced by a specified modulus bcscale— 设置所有bc数学函数的默认小数...原创 2020-09-02 11:07:39 · 6328 阅读 · 0 评论 -
php集成封装monolog日志类
介绍最近写个框架,需要完成日志类,接过一番研究最后选用monolog,同时项目中数据库模型类使用了thinkPHP的ThinkORM,要记录sql日志的话,需要实现PSR-3日志规范的日志类首先下载monologcomposer require monolog/monolog主要代码log.php<?phpnamespace lib;use Psr\Log\LoggerInterface;use Monolog\Formatter\LineFormatter;.原创 2020-09-01 17:53:02 · 990 阅读 · 0 评论