php
mrtwenty
努力学习
展开
-
Centos7.4编译安装php8.1
安装依赖包:yum -y install gcc gcc-c++ glibc automake autoconf libtool makeyum -y install libxslt-devel libjpeg libjpeg-devel libpng libpng-devel yum -y install freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel yum -y install glibc glibc-devel gl原创 2022-02-22 13:26:05 · 3142 阅读 · 5 评论 -
FlowerMQ 基于workerman和redis实现的消息队列
FlowerMQFlowerMQ 一个基于Workerman和Redis实现的消息队列,一个小小工具,用来给主项目解耦的,也支持延迟队列,失败尝试这些。运行依赖php7.2Redis5上,因为用到Redis Streampecl依赖,redis扩展composer依赖,workerman/workerman 4.0以上安装composer安装composer create-project mrtwenty/flower下载安装下载或者 git clone项目根目录执行命令,c原创 2022-01-07 20:57:38 · 827 阅读 · 0 评论 -
一个验证token类
新写了一个超级简单的验证类,最近的一个需求用到了生成二维码核销的功能,想着给二维码做一个时效性处理,避免用户投机倒把,把核销码拿去卖给别人,出了问题,又要平台承担责任。为了避免以后用到,特地写做笔记。<?phpclass Token{ protected $secret; //这个秘钥很重要 public function __construct($secret) { $this->secret = $secret; } pu原创 2021-08-31 23:42:21 · 145 阅读 · 0 评论 -
Centos7 编译安装php7.4
安装wget命令yum install wget 安装依赖包yum install gcc autoconf gcc-c++yum install libxml2 libxml2-devel openssl openssl-devel yum install bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel yum install libpng libpng-devel freetype freetype-devel g原创 2021-08-24 11:56:52 · 1056 阅读 · 1 评论 -
php数组的差集与并集
当我们需要对多个数据进行操作,其中有包含了修改、删除、新增,就需要将新数据和原有的数据进行差集和并集操作,筛选出其中需要对应操作的数据,例如:<?php$old = [1, 3, 4, 5, 6];$new = [2, 3, 4, 5, 7];//移除的$remove = array_diff($old, $new);print_r($remove);//添加的$add = array_diff($new, $old);print_r($add);//修改的$updat原创 2021-07-16 16:25:57 · 1577 阅读 · 2 评论 -
php输出浮点数,丢失精度的问题
今天输出一个从数据库里面查询的数据,居然没有完整显示出来,丢失了后四位,一路排查下来,发现是php有个配置项,叫做`precision`, 这个配置值管理了浮点数的精度输出,我们可以用`ini_get('precision')` 来获取这个值的设置,情况复现:<?php echo ini_get('precision'); //我这里的环境是14位 $a = -0.021740039999997407; echo $a; //输出的时候,后四位被截断了。所以为了解决这种问题,我们可...原创 2021-03-07 13:11:06 · 713 阅读 · 1 评论 -
thinkphp缓存直接操作redis
tp的缓存,如果使用了redis,需要使用redis的高级操作,建议直接使用 handler 获取到对象句柄,然后直接操作redis,例如下面的list列表,可以这么写:详细的redis操作手册,请参见: https://github.com/phpredis/phpredis/#installingconfiguring echo "<pre>"; $handler = Cache::handler(); //一次性设置多个元素 $handler->rPush('name'原创 2021-01-07 10:48:05 · 266 阅读 · 0 评论 -
php获取指定年份下所有的周和当前周的开始和结束
composer安装包composer require nesbot/carbon下面是代码例子,注意,仅限于国内,周一开始作为这个星期的开始,周日作为结束,不同国家可能不一样,需要注意。我国算当年的第一周,是按包含1月4日的那个星期为当年的第一个星期。上代码:<?phpdate_default_timezone_set('Asia/Shanghai');require __DIR__ . '/vendor/autoload.php';function getFullWee.原创 2020-06-01 16:49:26 · 547 阅读 · 0 评论 -
thinkphp queue 使用注意事项
thinkphp queueenv文件配置,会一次加载到内存里,如果做了变更,消息队列需要重启日志文件会出现大量写入,需要重新调整日志文件,在配置文件,config/queue.php ,写入,重新调整日志配置 use think\facade\Log; Log::init([ 'single' => 'queue', 'file_size' => ...原创 2020-04-09 09:43:12 · 1131 阅读 · 0 评论 -
php入门之奇偶数判断
&按位与 ,php位运算符,可以用来判断数字的奇偶。<?php/** * 是否是偶数 * @param int $num [description] * @return boolean [description] */function is_even(int $num){ return !boolval($num & ...原创 2019-12-23 11:07:57 · 1864 阅读 · 0 评论 -
MD5碰撞,不同的原始数据,MD5后,值一样,出现碰撞
以前总以为MD5后的值一样,就表示原始数据也是一样的,但是实际想想,有限的集合去映射无限的数据,确实可能出现碰撞。<?php$data1 = "\xd1\x31\xdd\x02\xc5\xe6\xee\xc4\x69\x3d\x9a\x06\x98\xaf\xf9\x5c\x2f\xca\xb5\x07\x12\x46\x7e\xab\x40\x04\x58\x3e\xb8\...原创 2019-12-23 10:46:06 · 1870 阅读 · 1 评论 -
php类关键字static与self的区别,延迟静态绑定
static和self都能类内部都能作为代表类本身,例如:<?phpclass Father{ public static function init() { return new self(); } public static function init2() { return new static();...原创 2019-10-22 22:27:22 · 246 阅读 · 0 评论 -
php对数据进行过滤输出
为了避免跨站脚本攻击、xss等安全问题,yii框架对输出到视图层的数据提供了一些方法供我们使用,例如Html::encode、HtmlPurifier::process,研究了下yii框架的源码,将其抽取出来,作为一个小组件,记起来,以后可以单独使用:1、首先是 Html::encode ,是使用php的原生函数htmlspecialchars,我们跟着模仿一个:<?...原创 2019-07-31 16:15:22 · 1023 阅读 · 0 评论 -
php实现毫秒定时器(时间堆)
最近研究workerman源码,学习了定时器部分,从里面抄了一个定时器出来,单独出来,有利于理解定时器原理。 下面是代码,调用方式跟workerman一样,都是添加定时事件进去,可以使延时调用一次,也可以是定时调用,间隔一段事件就执行一次。测试执行,在命令行里面,执行php timer.php即可。<?phpclass Timer{ con...原创 2019-08-12 10:18:18 · 1976 阅读 · 0 评论 -
php实现毫秒定时器,基于event扩展实现
最近学习workerman框架,由于windows上也可以安装event扩展,所以下面的代码也支持在win上执行,代码是参考workerman源码的:<?phpclass Timer{ const EV_TIMER = 1; const EV_TIMER_ONCE = 2; /** * Event base. * @var ob...原创 2019-08-13 22:09:08 · 741 阅读 · 0 评论 -
php信号处理
信号是一种软中断,ipc通信中的一种,也是唯一的异步通信方式。在linux下,我们可以使用 kill -l 查看系统里面支持的所有信号,发送信号给某个进程可以使用 kill -信号类型 pid 给指定的pid。在php中,我们使用 posxi_kill 来实现信号的发送。posix_kill向进程发送信号的几种作用: 1、发送信号给指定的进程 ...原创 2019-08-07 10:37:58 · 881 阅读 · 0 评论 -
APP接口开发(待完善)
1、接口版本管理 v1、v2 2、app版本管理,检测更新,强制更新、普通更新 3、异常收集,在做Android和ios的后端接口,需要设计一些接口,用来收集客户端收集客户端(Android/ios)的卡顿、异常、ANR、crash,统计数据呈现到后台里,收集到这些信息后,有利于排查程序出现的异常。 1)、设计一个表z_app_log存储数据i...原创 2019-08-01 17:03:12 · 466 阅读 · 0 评论 -
php开发之Composer包
应用 相关的包 数据库 catfan/Mdeoo jwt firebase/php-jwt 日期时间 nesbot/carbon 地理位置 mjaschen/phpgeo 随机数 paragonie/random_compat excel phpoffice/phpspreadsheet (文档) word phpof...原创 2019-07-26 22:17:50 · 29251 阅读 · 0 评论 -
php标准库spl(Standard PHP Library )之优先队列SplPriorityQueue
php的标准库提供了一些数据结构,例如堆栈、队列等,下面我们写的是一个优先队列的demo,利用这个类,可以直接实现排序,下面看代码,1、实例化类,设置取出数据的时候,要数据还是要优先级,还是两者都要,然后循环输出,会自动排序好。<?php//优先队列$p1 = new \SplPriorityQueue();$p1->setExtractFlags(SplPriori...原创 2019-08-10 16:32:40 · 436 阅读 · 0 评论 -
php解析yaml
两种方式1、使用pecl的yaml扩展,https://pecl.php.net/package/yaml ,需要编译安装,稍显麻烦,但是性能比第二种好一些。2、使用composer包symfony/yaml,安装只需要composer require symfony/yaml ,都是php写的,直接安装即可。下面我们来学习第二个种方式:1、安装 composer req...原创 2019-08-10 17:40:49 · 2053 阅读 · 0 评论 -
php cli编程 命令行模式相关知识点
在命令行下执行php脚本,一般我们可以这么做:1、demo1.php<?phpecho "hello php\n";然后执行脚本就是:php demo1.php执行结果:2、demo2.php ,执行which php查看php脚本命令在哪里,例如我的就是:/usr/local/php/bin/php,那我们就可以这么写demo2.php:...原创 2019-08-21 13:39:06 · 602 阅读 · 0 评论 -
php实现守护进程
守护进程(daemon)是一种生存期长的一种进程。下面的守护进程代码,参考了workerman源码,进行编写的:<?phpclass Daemon{ public static $stdoutFile = '/dev/null'; public static $daemonName = 'daemonPHP'; public static functio...原创 2019-08-12 16:50:27 · 662 阅读 · 0 评论 -
php定时器 phptimer
phptimer是本人参考workerman的源码, 从里面分离出来的一个定时器,在linux上,守护进程化,可以添加多个定时器。使用方式很简单:1、composer安装composer require mrtwenty/timer2、编写测试代码,如果是win,可以在命令行上查看,linux上会定时写入时间到/tmp/test.txt上的<?phprequire ...原创 2019-08-17 00:16:10 · 840 阅读 · 0 评论 -
php做的通用后台权限管理系统,基于thinkphp5.1+layui实现
zhao通用后台系统是一个通用后台系统,使用thinkphp5.1+layui实现,方便可以快速开发系统,自带RBAC权限,后台登录、登录日志、操作日志,还有集成了微信开发的相关的功能。界面如下:有需要的朋友可以参考看看。...原创 2019-08-17 15:31:00 · 4402 阅读 · 2 评论 -
php的C扩展库PECL
https://pecl.php.net是php的C扩展仓库,有一些并未与php绑定,需要我们自己安装,安装教程请参考这个,下面我们列一些常见常用的扩展,他们安装方式几乎是一样的:redis扩展 操作redis的扩展 mongodb扩展 操作mongodb的扩展 atom扩展 一个实现snowflake算法的扩展,实现分布式唯一id seaslog扩展 ...原创 2019-08-04 13:59:03 · 665 阅读 · 0 评论 -
php使用openssl进行aes加解密
php的加密扩展mcrypt已经过时,不再推荐使用,libmrcypt是mcrypt扩展的核心库,但是libmrcypt已于2007年被废弃,很多的bug没有得到及时的修复,php官方也不在推荐使用,在php7.2中也将删除此扩展。所以我们该拥抱openssl扩展了,下面我们使用openssl来进行加解密:<?phpclass Aes{ protected $m...原创 2019-07-26 14:09:47 · 1946 阅读 · 0 评论 -
php7生成随机字符和随机数
php7新增了函数random_int 、random_bytes,是具有密码学安全的伪随机数生成器,虽然比起原先的mt_rand和rand稍慢一些,但是很值得采用。使用方式很简单,直接调用即可:<?php//生成随机字符,由于输出的是二进制数据,我们使用bin2hex来转换成十六进制值echo bin2hex(random_bytes(16));echo "<br>...原创 2019-07-26 10:25:56 · 1395 阅读 · 0 评论 -
微信公众号JSSDK定位与百度LBS结合实现线下店铺一键导航功能
微信的JSSDK有两个关于地理位置的接口: 一个是 getLocation , 用户授权同意后,可以获取用户的地理位置 一个是openLocation,可以使用微信内置地图查看位置接口。百度的LBS的服务接口,有LBS.云服务,利用这个云存储存储线下店铺的位置,云检索可以根据用户的位置,进行距离搜索。好了,我们该怎么实现的这个功能呢?第一步,基于百度...原创 2018-08-29 17:20:24 · 4253 阅读 · 2 评论 -
基于角色的权限访问控制 RBAC
五个表:管理员表: z_admin CREATE TABLE `z_admin` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT '管理员ID', `username` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名', `pass...原创 2018-08-06 14:34:33 · 433 阅读 · 0 评论 -
MySQL数据字典生成工具
最近做了一个小工具,连名字都没起,纯手写,本来做了一个简单的文件搞定的,想着扩展些功能,就越做越复杂了,有需要的网友可以拿去玩玩,简单好用, 当然不建议在外网部署,只适合内部开发的时候,对数据库进行字典文件生成。因为有时候会接触到不同的PHP项目,但是只有源码,没有开发文档,数据字典等等这些工具,就被迫需要补齐它,所以就做了这样一个工具。项目地址: ...原创 2018-07-09 09:18:25 · 5110 阅读 · 0 评论 -
win7下使用手动安装composer
假设我们的php放置在D:\php 目录下,1、添加环境变量,桌面--> 我的电脑右键---->属性2、点击高级系统设置 3、点击环境变量4、选择path,在变量值里面追加内容: ;"D:\php"5、测试在cmd下是否支持php命令:php -v如下图就表示成功:6、查看php扩展是否包括o...原创 2018-06-18 09:49:54 · 2366 阅读 · 0 评论 -
手动折腾LNMP
懒人专用: https://lnmp.org自己手动折腾实现,至于为什么呢?学习,积累,折腾自己。本人的电脑是win7系统,1、安装一个vmware,里面装一个centos 72、安装nginx3、安装PHP4、安装MySQL5、结合起来nginx配置虚拟主机,支持php-fpm, php连接数据库。在win7系统上的host上,配置一个域名解析到虚拟机的centos上,文件路径: C:\Wind...原创 2018-06-01 15:48:13 · 435 阅读 · 0 评论 -
PHP 怎么判断两个时间戳是不是在同一周?
假设 : 一星期开始是周一凌晨00:00 结束周日晚上00:00解法1: 取其中一个时间,算出这个时间的周一和周日,然后跟另外一个时间对比,符合条件就算。(自己的思路)<?phpheader('Content-Type:text/html;charset=utf-8');date_default_timezone_set('PRC'); //第一个时间戳 $one...原创 2018-05-26 16:11:48 · 1892 阅读 · 0 评论 -
PHP之Composer
Composerphp的包管理器,相关网址:https://www.phpcomposer.com/https://pkg.phpcomposer.comhttps://getcomposer.orghttps://packagist.org中国镜像:https://pkg.phpcomposer.comhttps://mirrors.aliyun.com/comp...原创 2018-06-01 01:03:56 · 175 阅读 · 0 评论 -
php7.2编译安装swoole
wget https://gitee.com/swoole/swoole/repository/archive/v2.1.2.zip phpize make make install 在/usr/local/php/etc/php-cli.ini 下添加 extension=swoole.so测试: php -m|grep swoole原创 2018-05-26 12:13:59 · 2336 阅读 · 0 评论 -
php7.2 编译安装event扩展
下载地址:http://pecl.php.net/package/event安装event扩展,需要安装基础库libevent安装libevent:cd /usr/local/srcwget -c https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-s...原创 2018-05-26 11:59:25 · 2021 阅读 · 0 评论 -
Centos7 编译安装PHP7.2
1、安装wget命令yum install wget2、在 /usr/local/src 目录下载php源码包wget http://cn2.php.net/distributions/php-7.2.4.tar.gz解压源码包tar zxvf php-7.2.1.tar.gz3、安装编译php需要的依赖包:yum install gcc autoconf...原创 2018-05-26 11:14:20 · 13035 阅读 · 2 评论 -
php安装igbinary扩展(windows)
pecl.php.net 是php的扩展仓库,访问此网站后,搜索需要安装的扩展,截图如下:igbinary:http://pecl.php.net/package/redisgithub的网址:https://github.com/igbinary/igbinary/我们选择最新的3.0.1进行安装,由于系统是windows的,所以下载对应的dll包,放到php的ext目录下...原创 2019-07-02 14:28:27 · 4423 阅读 · 1 评论 -
php安装redis扩展(windows)
php操作redis,一般来说有两个库可以使用,一个是http://pecl.php.net/package/redispecl扩展一个是https://packagist.org/packages/predis/predis composer包pecl扩展,在windows上需要下载dll包,linux需要编译安装,composer包的可以直接下载下来使用。前者性能稍好。w...原创 2019-07-02 14:43:52 · 147 阅读 · 0 评论 -
php安装igbinary扩展、redis扩展(linux)
安装igbinary扩展: cd /usr/local/src/ mkdir igbinary && cd igbinary wget https://github.com/igbinary/igbinary/archive/3.0.1.tar.gz tar zxvf 3.0.1.tar.gz cd igbinary-3.0.1 /usr/local/php/bi...原创 2019-07-02 15:07:04 · 1559 阅读 · 0 评论