PHP
文章平均质量分 78
奔跑吧笨笨
I am your tree,Ten years later, if I change, you bring me back.
展开
-
yaf 框架捕获全局异常
PHP版本:5.4yaf版本:2.3.5注意:以下代码示例为,开启命名空间:yaf.use_namespace=On一、开启异常捕获(如果业务代码中没有try catch,但是有throw,则有框架统一捕获)文件:conf/application.iniapplication.dispatcher.catchException = true二、新建文件ErrorController文件、新建方法 errorAction (默认该方法,统一处理)文件:app/.原创 2022-04-14 17:56:04 · 771 阅读 · 0 评论 -
CI框架引入service层
一、前戏:C I框架是典型的MVC模式,随着业务的不断更新迭代,慢慢发现C层变得越来越臃肿,身高和体重一个数值。更痛的是,同一个业务逻辑,不能复用,需要复制一份,进而影响了后期可维护,修过一个逻辑,就要想着所有的地方,恐怕遗漏。扯皮:这个bug确实是我写的,但是抛开这点不谈,你们就没有一点责任吗?review的时候大家也都在场,你们当时是不是没有认真对待,还有,测试是怎么做的测试?难道这些都是摆设吗,是走过场吗?幸好这次线上事故没有造成资损,但是希望大家引以为戒,这周的周报我要看到大...原创 2022-01-05 14:49:05 · 733 阅读 · 0 评论 -
面经·PHP
排版有瑕疵,可以查看链接:有道云笔记fast-cgi与cgi的区别 在web服务器方面 cgi fork一个新的进程进行处 fastcgi 用tcp方式跟远程机子上的进程或本地进程建立连接 在对数据进行处理的进程方面 cgi 读取参数,处理数据,然后就结束生命期 fastcgi 要开启tcp端口,进入循环,等待数据的到来,处理数据 对比 CGI相较于Fastcgi而言其性能瓶颈在哪呢? CGI针对每个http请求都是fork一个新进程来进行处理,.原创 2021-12-27 17:06:27 · 307 阅读 · 0 评论 -
PHP 批量写入Redis-GEO数据
redis: 方法:GEOADD (geoadd)redis>GEOADD redis_key 经度1纬度1 "位置名称1" 经度2纬度2"位置名称2"redis>GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"PHP: ...原创 2020-04-21 21:47:05 · 1357 阅读 · 0 评论 -
PHP 多维数组所有key转为小写
常用于变量命名规范:/** * PHP 多维数组所有key转为小写 || 大写 * @param $array //数据 * @param int $case //CASE_LOWER 小写、CASE_UPPER 大写 * @return array */function array_change_key_case_all(&$array, $case ...原创 2020-04-10 14:04:18 · 1325 阅读 · 0 评论 -
Mysql挖坑填坑——心酸历程
一切来源于信任,一切来源于自信,一切来源于膨胀……悉数一路走来的Mysql挖坑填坑的心酸历程,吃一堑长一智,愿程序zero bug!(痴心妄想)1、 多表:表字段相同原SQL:两表联查,pay_status 字段,A 表有,B 表没有,并没有使用别名alias,限定where 使用那个表的该字段名事故:新业务,B 表加入同样字段,没有考虑到这条SQL,且新需求不涉及这块业务,测试也...原创 2019-10-23 10:53:29 · 339 阅读 · 0 评论 -
在URL传输过程中解析问题 url_encode "+" 号
背景:客户端登陆,密码需要,加密处理,非明文传输。加密后的字符串中含有" + “,并且传输时使用 url encode 编码,字符串编码为含有 " %2B"。但是后端服务收到的值,有且仅有" %2B "自动解析为了" + "。服务端使用URL decode 解密,把" + " 号解析为了空格。导致解析数据错误,加密字符串逆向解析失败。(文字描述,生涩,数据直观)案例:客户端登陆,密码...原创 2019-01-15 11:36:16 · 8724 阅读 · 0 评论 -
基于redis的Session共享
开发环境:PHP、Centos、nginx 。实际上说这些没用。废话不多说,关注的就是怎么实现session数据共享,以达到多台服务器之间的session共享,提高用户体验,没必要一直登陆。当热,基于Nosql只是解决session共享的方案之一。 以下前言可忽略: 前言:PHP的session默认存储在fiels当中,如果你安装PHP环境之后,没有任何修改,那么所有s...原创 2018-07-24 16:02:36 · 14469 阅读 · 1 评论 -
PHP性能提升之opcache
php的不同版本的迭代,都有优化(这是废话),php7,已经出来这么久了,可以说说是相当成熟了,php7的性能提升相对于php5.6等版本的状况,不只是一点儿,而是极大的提升了php的性能。 php自带的缓存有apc,O+。在PHP5.5开始, 已经随着PHP的源代码一起发布, 并且改名为:Opcache.OPcache 为什么可以优化? ...原创 2018-07-18 18:22:13 · 11392 阅读 · 0 评论 -
PHP--GC(引用计数)
最近又回顾了一下,PHP的垃圾回收机制,记录下来。实际上PHP的官方文档已经写的十分清楚了,还有鸟哥的博客。在此,仅作为记录,学习笔记。 引用计数: 每个php变量存在一个叫"zval"的变量容器中。一个zval变量容器,除了包含变量的类型和值,还包括两个字节的额外信息。第一个 是"is_ref",是个bool值,用来标识这个变量是否是属于引用集合(refer...原创 2018-07-23 16:36:47 · 11695 阅读 · 0 评论 -
php字母排序
1.utf8 和 gbk的区别?2.汉字使用的是utf8能否实现按照拼音首字母排序?3.utf8 和 gbk 相互转化?4.mysql中怎样实现?5.php如何实现简单说:utf8 国际范,谁都可以解析。gbk 国产,中英文皆两个字节只有使用gbk,才可以实现按照汉字首字母排序在mysql中,一条sql语句,可以临时改变字符编码,排序。默认使用的...原创 2018-07-09 12:05:48 · 12581 阅读 · 0 评论 -
PHP排序大数据量分页
大数据量分页,除了使用mysql的order by 排序,也可以使用php排序,来实现业务。代码:使用到的函数 usort、array_slice public function getPage(int $pageSize, int $offset){ $sql = 'select scores,count(id) as num from org_share grou...原创 2018-05-23 11:44:08 · 8289 阅读 · 0 评论 -
PHP SPL学习(一):写一个函数 遍历一个文件夹下所有文件和子文件
1. 什么是SPL?SPL是Standard PHP Library(PHP标准库)的缩写。根据官方定义,它是"a collection of interfaces and classes that are meant to solve standard problems"。但是,目前在使用中,SPL更多地被看作是一种使object(物体)模仿array(数组)行为的interfaces和...原创 2018-10-12 14:07:08 · 3699 阅读 · 0 评论 -
Mac切换默认PHP版本为MAMP
序:Mac自带PHP环境,后为开发方便,安装了MAMP软件,同时支持任意切换PHP版本。在终端运行php -v,查看到的PHP版本为PHP7.1;在MAMP中选择的是PHP5.6,所以,在127.0.0.1/phpinfo.php中,输出的是PHP5.6。预期结果:cli模式和php-fpm模式,所输出的PHP版本一致。 查看环境变量,PHP运行的文件位置:which php修改...原创 2018-10-30 14:35:58 · 8310 阅读 · 4 评论 -
ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION :浏览器下载报错
ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION:Excel导出报错,浏览器崩溃。服务端设置的响应头: header('pragma:public'); header('Content-type:application/vnd.ms-excel;charset=utf-8;name = "'.$xlsTitle.'.xls"...原创 2018-11-30 10:38:55 · 8538 阅读 · 0 评论 -
swoole定时器+异步任务处理订单超时
背景:一个紧俏的商品,短时间内抢购,需要支付,技术方案,问题:1、防止超卖 2、防止重复购买 3、订单超时处理总结:订单限额,一人一单,订单超时处理流程图:https://www.processon.com/view/5c9452cbe4b0afc7441bd157本方案在不使用专业的队列的情况下,简单实现上述三个问题前端:1...原创 2019-03-11 19:29:41 · 7385 阅读 · 0 评论 -
RabbitMQ延时队列+supervisor守护进程消费
场景:用户A购买商品,点击下单,此时库存减少,商品只为等君支付,可惜,日复一日,辗转反侧,侧夜难眠,不见知音归来,该商品长厢厮守,孤独终生。桃叶儿尖上见,柳叶儿遮满了天,日思夜想用户A,何时把单结啊~~,(采用下单减库存的方法,超时未支付,库存还原)你无情无义,我也不必为你等待。技术方案:RabbitMQ 消息队列实现订单延时处理,因为RabbitMQ也没有这样的实现方法,需要组合使...原创 2019-04-19 20:32:14 · 4473 阅读 · 2 评论 -
RabbitMQ防止消息丢失PHP实现
RabbitMQ防止消息丢失,保证消息传递的可靠性,保证每条消息都正常传递,并最终至少消费一次。背景:订单支付状态同步,微信、支付宝、银联等第三方平台异步回调之后,进入队列,为其他服务调用提供数据。为了保证支付状态同步业务的可用性,肯定不希望有订单在传递过程中丢失。问题:什么情况下消息可能丢失呢?角色:生产者、RabbitMQ服务、消费者 (显然,三大主角都有可能演砸)华丽的下...原创 2019-05-13 14:43:39 · 2405 阅读 · 8 评论 -
如何正确使用PHP -- 引用
什么是PHP引用角色: 姓名:王笨笨 爱称:狗蛋儿自我介绍:大家好,我是王笨笨,很高兴认识大家,大家可以叫我狗蛋儿。我就是我,不一样的烟火。生涩的概念:引用就是别名,多个名字指向同一个变量内容,没有重复冗余的内存开销。$a = 'runBaby';$...原创 2019-07-10 16:21:16 · 372 阅读 · 0 评论 -
支付宝接入文档中TRADE_SUCCESS和TRADE_FINISHED的本质区别
之前一直不知道这2种状态到底有什么不同。支付宝中担保交易和即时到账交易对其的描述为:TRADE_SUCCESS 交易成功(或支付成功)TRADE_FINISHED 交易完成一头雾水。。。。。。OK,找例子来说明吧:例子一:即时到账普通版。 普通版不支持支付完成后的退款操作,即用户充值完成后,该交易就算是完成了,这笔交易就不能再做任何操作了。即时到账高级版。 这个版本在用户充值完成后...转载 2018-02-28 16:17:08 · 479 阅读 · 0 评论 -
消息队列设计精要
消息队列设计精要王烨 ·2016-07-01 16:10消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发的Notify、MetaQ、RocketMQ等。本文不会一一介绍这些消息队列的所有...转载 2018-05-25 18:23:45 · 13753 阅读 · 0 评论 -
PHP字符串与整型比较大小
PHP字符串与整型比较大小,是否可以?会不会计算出差值? 答案:肯定的,因为PHP是弱类型语言。背景:redis的string类型,存储时间戳,知道redis的string类型存储的value值是字符串型,取出来时肯定也是字符串型。当前时间戳 - redis存储的时间戳 = 时间差 (用来比较游戏时长的合法性)存储游戏开始时间:<?phpheader("Content-t...原创 2018-05-18 21:42:03 · 10624 阅读 · 1 评论 -
swoole 点对点发送消息推送
swoole+webSocket 消息推送,或则聊天室,实现。先上代码,(上菜。。。。)点对点,简单(客户发送,服务回复。)点对所有,广播见图所示:参数详解/** * 1.实例化 对象 * $host 127.0.0.1 (本机) 外网:0.0.0.0 (ipv4的所有可访问) * $port 9501 (1024以下 需要root权限) * $...原创 2018-03-22 15:35:08 · 16615 阅读 · 0 评论 -
git 本地新建分支 不影响第一个分支开发
git 本地新建第二个分支修复bug 不影响第一个分支开发工作背景:在工作中,经常会出现,自己正在开发,忽然有一个紧急小需求要改,需要及时合并。但是,目前自己的开发还未完成,不能提交合并到远程master.解决方案:自己需要新建一个分支,然后修改,提交。很简单,其实就是新建一个分支。但是在这样的场景下,总有小白迷惑。bug1:1.自己在自己的分支,git checkout -b new_name...原创 2018-03-10 12:23:33 · 16599 阅读 · 0 评论 -
Centos7 升级php版本到php7
一、首先查看是否有老版本yum list installed | grep php二、如果安装的有yum remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-gd.x86_64 php-ldap.x86_64 php-mbstring.x86_64 php-mcrypt.x86_64 php-mysql.x86_64 php-p...原创 2018-03-01 16:58:11 · 7111 阅读 · 0 评论 -
php strtotime 时间函数错误使用
php 时间函数 strtotime :将任何字符串的日期时间描述解析为Unix时间戳;注意:日期格式 ===》 时间戳; 如果是不按照规定输入 时间戳呢?会不会还返回时间戳呢?答案是肯定:会个大毛线啊!!!种下西瓜能长出人参嘛。错误背景:数据表的设计,最初的设计时间的存储采用 int型,存入时间戳,认为这样可以节省资源。然而随着时间的推移,时光荏苒,花开花落,再设计表时,认为存入TEM...原创 2018-03-15 11:58:43 · 1105 阅读 · 0 评论 -
post 数据传递丢失
博主不懈追求的理念是:我为人人,人人为我。美美与共,天下大同。大家都知道,get 与 post 的区别。在文件上传的时候,大家都用 post。因为post的传递的数据量相对来说较大。这其实可以在 php.ini 中修改。 默认值 post_max_size = 8M.但是,我想说的是,我在传递的过程中,并没有达到8M,这个峰值,依旧有值丢失,被截取。为什么呢?这就很郁闷了,这可怎么办呢。...原创 2018-02-08 15:28:20 · 3638 阅读 · 0 评论 -
从数据库读出来的字段名,全部变为小写
在用Thinkphp的项目中,从数据库读出的数据,全部变为了小写。博主不懈追求的理念是:我为人人,人人为我。美美与共,天下大同。故事开始:本来设计字段的时候,需要两个单词表示,已更好的理解字段的含义,达到见名识意的理想效果。没想到跟自己挖了一个小水坑。在前台渲染的时候,发现没有渲染成功,最后排查,发现是字段的问题,找不到相关的字段信息。解决办法:=================方法一: 修改...原创 2018-02-08 15:07:09 · 7402 阅读 · 0 评论 -
strpos 函数的特性
第一次用这个函数时,我相信肯定会有小白,踩这个坑。为了更好的展现PHP的宗旨、理念,博主追求的目标:我为人人,人人为我,美美与共,天下大同。大家都知道,世界上最好的语言----php,是弱类型语言。大家都知道,一个 = 是赋值 两个 == 是比较数值 三个 === 是比较数值 并且 比较类型...原创 2018-02-08 14:49:33 · 384 阅读 · 0 评论 -
phpexcel 导出常见错误
phpExcel 导出个例出错1.phpExcel内置函数问题 Excel5 ==>Excel2007 (错误展现,直接报致命错误,无法导出)2.导出文件名 尽量使用 字母_时间 格式3.金额 等变为 科学计数法 或者 $new_price = number_format($new_price,2);4.单元格 偏差 ,审查代码,是否出现移位...原创 2018-02-08 14:27:33 · 4742 阅读 · 0 评论 -
linux 可读可写可执行权限 chmod
面试题: 砖石王老五,聘请了一个码农为自己建个网站,约定七天干完,每天支付一两黄金,不可预付,不可拖欠农民工工资。目前王老五有三根不同的金条,一两的黄金、二两的黄金、四两的黄金。问王老五怎么支付比较合适?Linux答:如果没有标题关联linux权限,自己会想到是怎样的分割嘛。也许会,说明自己是对权限十分了解了。如果不是,说明革命尚未成功,同志仍需努力。解:一天: 一两黄金 ...原创 2018-03-13 11:00:47 · 9972 阅读 · 0 评论 -
redis 无法远程连接
1.修改配置 redis.confbind 127.0.0.1 注释或则,改为自己的ip (不写ip,依然连不上。bind 0.0.0.0)2.查看是否有使用,或则之前意外断电的情况,导致进程存在。此时关闭服务器重启。 ps -ef | grep redis 注释前:注释后:这就是允许所有访问,当然线上环境咱们要设置为自...原创 2018-04-30 23:58:47 · 11574 阅读 · 0 评论 -
基于redis的高并发投票设计
基于微信的投票系统,可谓是随处可见,每个人都应该看到多过,这样的活动。宝宝投票、最美校园投票、等等。各大机构,学校,企事业单位,都采用这种方式,评选。已达到推广,或者什么目的地吧。目前,甲方想举办一个全国性活动,预计报名人数达到六万+,预估计,该活动期间 PV 量在 30w+.公司目前有做好的产品,但没有用Nosql,到时候肯定无法支持,所以,要重构。现有数据表中,报名量在 4千多,投票记录是...原创 2018-04-30 19:51:49 · 16867 阅读 · 3 评论 -
TCP协议详解三次握手、四次挥手
郑重声明:本文章为转载,仅作为自己学习,整理之用。再次特别感谢原作者的奉献,写的十分详尽。出处:https://www.jianshu.com/p/ef892323e68f。万分感谢。////////////////////////////////////////////////////////////////////////////////////////////////////////////...转载 2018-03-29 10:12:45 · 10761 阅读 · 0 评论 -
canvas 图片跨域(一)
在项目中,需要生成海报。有动态信息(微信头像、微信昵称、上传图片(oss链接)、二维码)+ 海报背景图生成一张海报。技术支持:canvas 生成。问题:canvas 图片跨域。解决过程(填坑历程): 1.从网上存在如图解决办法 img.crossOrigin = "" (专业采坑,数年)。亲测无效。很是不解。 ...原创 2018-04-16 11:12:14 · 17444 阅读 · 2 评论 -
phpCOW机制(写时复制)
写时复制(Copy-on-Write,也缩写为COW),顾名思义,就是在写入时才真正复制一份内存进行修改。 COW最早应用在*nix系统中对线程与内存使用的优化,后面广泛的被使用在各种编程语言中,如C++的STL等。 在PHP内核中,COW也是主要的内存优化手段。 在前面关于变量和内存的讨论中,引用计数对变量的销毁与回收中起着至关重要的标识作用。 引用计数存在的意义,就是为了使得COW可以正常运作...转载 2018-03-27 15:17:55 · 11210 阅读 · 0 评论 -
php 数组时间排序 array_multisort
思路:1.2018-03-20 16:19:00 格式。 2.php 函数 array_multisort(); 排序$arr = array( 'a'=>array( 'uid'=>12, 'name'=>'zhangsan1', 'ctime'=>'2018-03-20 11...原创 2018-03-20 17:04:11 · 8452 阅读 · 0 评论 -
Linux下全局安装composer方法
/下载composercurl -sS https://getcomposer.org/installer | php//将composer.phar文件移动到bin目录以便全局使用composer命令mv composer.phar /usr/local/bin/composer//切换国内源composer config -g repo.packagist composer https://p...转载 2018-03-13 15:30:39 · 464 阅读 · 1 评论 -
lnmp 常用命令
一、查看php 已安装扩展 php -m二、查看php 版本号php -v (version)三、查看cpu的相信信息cat /proc/cpuinfo四、查看所有进程ps -ef原创 2018-03-13 11:40:37 · 382 阅读 · 0 评论 -
短Url 系统设计
方案一:自己写算法,把长Url 转换为短的 1--10,A--Z,a--Z 62个元素。这有点难啊,需要跑多久。并且对方输入的URL长度的不固定,所以,很难。方案二:表的映射,使用K-V,形式。一个短的Key,去映射长的URL,长的url依然还是那个url,只不过起了一个外号(别名)。注意:1.key的唯一性, MY function :我采用的是方案二,项目背景(公司...原创 2018-02-05 14:44:08 · 9173 阅读 · 0 评论