自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 PHP-记录file_get_contents函数引发的调试现场

问题源自会议上的一个sentry报错案例(类似上图,代码略有不同,主要是file_get_contents请求一个图片URL404导致的问题)。PS:除非特殊说明,后续默认PHP7.2版本,Laravel5.6版本。调试后,觉得还不错,值得记录一下。之前生产曾经有一个需求是用file_get_contents根据URL获取图片,然而由于图片可能不存在,当时是PHP5.6版本,导致了语句长...

2019-11-22 00:41:58 593

原创 LeetCode 142. 环形链表 II总结

好几个月没写总结了,学习一些收费课程也担心摘用内容不太合适。刚好有道习题是LeetCode上的题目,虽然不难,我理解还是花了好长一段时间,特此记录下。题目介绍给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不...

2019-07-10 22:19:34 187

原创 ThinkPHP5源码学习篇--Db操作

学习Db类在ThinkPHP5.0的框架使用过程中,Db类是一定会接触到的,上手不难,但若想随心所欲的用,还是需要了解一番。比如我记忆力不太好,在开发过程中添加where,若出现like,eq等等条件,老是忘了后面是跟数组呢还是逗号分割;再使用join时,想要LEFT或RIGHT时,又忘了如何注明。迫不得己,用一次看一次文档。在之前零零碎碎的源码学习过程中,虽说也记不起许多细节,也说不出到底学了...

2019-03-28 23:07:25 2962 2

原创 PHP--简单实现多个定时调度任务配置

最近回顾近期在开发一个新项目时,多个过程需要与第三方平台交互,由于其回调是众所周知的不可靠,在接收回调的同时,需要主动查询结果。那么理所当然的,定时器触发任务又成了必需。其实在2018年包括之前时间,也有使用总结过自己认为的异步方式和如何使用redis来实现定时任务的并发锁。先来谈谈日常中使用较多的定时任务方式。如果是较为关键的业务,crontab专门设置一行用于PHP命令行运行或HT...

2019-03-13 21:34:27 2555

原创 PHP处理iso8583报文

前文前段时间对接一个第三方公司的接口,其他部分或简单、或麻烦,总之没有花很多功夫都完成了。最后在着手交易接口时,犯了难。报文格式区别另外接口,需使用iso8583报文,咋一看文档,很让人懵逼,又是bcd,又是ascii,两个字节压缩成一个字节。用了将近一周时间慢慢懂了报文规则,开始准备写代码时又有了麻烦事。可能查资料的姿势不对,没找到PHP的DEMO,基本上都是Java实现。PHP又没有字节操...

2019-02-14 22:48:14 613

原创 ThinkPHP5源码学习篇--Response.php

Response使用自从使用TP5后,Response和Request就随处可见了,那么在知道Request是请求相关业务的封装类后,Response是什么呢?通过名字我们也可以看出来,Response是输出的封装类。比如Trace调试的实现、响应码设置、响应头部设置等等。Response的几种类型基于不同的type封装响应逻辑实现定制化向客户端输出。/** * 创建Response...

2018-12-18 22:02:19 2908

原创 ThinkPHP5源码学习篇--业务执行前的过程

了解执行过程我们经常会好奇配置好路由、写好业务代码后,为什么在URL上输出指定内容,就是执行到业务代码呢?App::run()// 模块/控制器绑定if (defined('BIND_MODULE')) {BIND_MODULE && Route::bind(BIND_MODULE);} elseif ($config['auto_bind_modul

2018-12-11 08:18:36 739

原创 ThinkPHP5源码学习篇--请求缓存

数据结构很有意思最近看《PHP核心技术与最佳实践》一书时,有提到PHP的数组实现是依赖于哈希表,包含哈希碰撞、哈希函数、拉链表等等,觉得很有意思,于是重拾大学时期简单学过的数据结构,结果在看Mysql资料时,也涉及到数据结构方面知识,感觉打开了一扇新大门。请求缓存学习今天慢慢看到了TP5的请求缓存内容,特此来总结一下。在App::run()方法内,存在如下代码$request->c...

2018-11-28 09:11:25 2382

原创 ThinkPHP5源码学习篇--Hook.php

Hook类解析在学习TP5源码的过程中,经常有执行Hook::listen()的地方,一查发现这是TP5的行为拓展,为的是当应用程序执行到定义的标签时,能够拦截下来执行一些公共的逻辑。对AOP(面向切面编程)了解的不多,只知道在Java的实现中,可以通过配置文件,非常自由的决定前置、后置,以及应该被环绕的执行方法。从这个方面来说,TP5的行为有点类AOP功能,但是实现度和完整性略有不够。Hoo...

2018-10-16 22:15:05 1153

原创 ThinkPHP5源码学习篇--Request.php

Request类解析request是请求相关的封装对象,比如原本我们想要获取get参数需要使用$_GET,post参数使用$_POST,字符串流数据通过file_get_contents(“php://input”)。而在实例化request对象时,这类参数都被组装到该对象的变量里。类属性名称类型真实含义$instanceobjectRequest对象实例$...

2018-10-16 08:48:38 1097

原创 ModernPHP读后感

特性介绍最近看了一遍ModernPHP,有不少收获,特此简单总结一番,记录下读后感受。命名空间刚开始学习开发PHP时,基于ThinkPHP3.1版本实践,并没应用到命名空间这个玩意儿,在偶尔看博客的时候会有提到,但是觉得好像也没多大意义。这里我的感受是,基于框架写项目能提高开发效率,同时能帮助解决很多系统运行问题,比如记录系统分析日志、渲染模版文件、实现ORM映射、路由等等。但是不可过度依...

2018-10-03 13:21:34 369

原创 ThinkPHP5源码学习篇--base.php

base.php运行过程解析功能有以下三点定义系统运行常量引入Loader类注册自动加载类、注册异常处理类、引入管理配置信息对应四行代码require CORE_PATH . 'Loader.php';\think\Loader::register();\think\Error::register();\think\Config::set(include THINK_PATH...

2018-09-29 08:51:53 2339

原创 锁文件又见死锁--吐槽&记录

       老早时候开发了定时触发的PHP脚本,使用Linux的crontab间隔N分钟通过CURL调用。当时是使用一个文件来作为锁,来避免并发导致多个脚本同时运行,同时项目有负载,而日志目录是NFS挂载的,所以便将锁文件置于日志目录内。基于新需求开发的新版本,已经更换成用Redis来控制并发,旧版本目前来说仍需要维护,然而不...

2018-09-19 08:17:54 740

原创 ThinkPHP5源码学习篇--从执行到输出流程简介

        这一段时间工作上着急的项目一个接

2018-09-17 23:00:32 3432

原创 文件锁阻止PHP脚本并发执行

这个标题不知取的是否恰当。前段时间在工作中,需要做两个定时任务,每隔5分钟执行一次,触发不同的业务逻辑。如果不考虑定时,任务可以当作普通的业务脚本执行即可,但是一考虑了定时任务,就要注意,如果任务已经触发,如何避免当前任务未执行完成,下一个定时器又触发,导致部分数据被重复操作。例如当前需处理十条数据,处理前先对数据库进行查找操作取出存储在数组内轮询,在执行到第五条时,脚本又被定时器触发了,...

2018-08-14 22:08:42 1454

原创 八种排序算法

偶尔有看到排序算法,想起来大学里老师也有讲授过冒泡排序、快速排序等,不过现在已经没什么概念,一查发现排序算法有八种,有的甚至连名字都没听过,感概平时看的少。既然已经看到了,就干脆了解下基础概念,避免在后续学习途中,出现一看就懵逼的情况。 冒泡排序冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到...

2018-08-08 23:32:20 3092

原创 PHP自定义业务日志(monolog源码学习)

聊聊自己从开始工作到如今,对日志的认识。在离校实习前,也多多少少做过一些自个玩的项目,后台管理系统、公众号都有整过,对所谓的日志没有什么概念,需要做什么记录都是操作数据库的自定义log表。开始实习后,慢慢有接触到一些所谓日志的概念,最先接触的是ThinkPHP3.1的框架,不过有使用到的都是自定义打印日志,对想要记录的数组写入到自定义日志文件里。比如每次想要打印数据,调用一个公共函数,依赖...

2018-08-07 01:17:29 4876

原创 LNMP环境搭建整理

起因:最近比较上瘾Linux系统,虽然很久之前租了个服务器,借用PHPSTORM的Deployment实时上传代码,xshell连接使用命令调试,也挺方便的,但是总觉得不得劲,毕竟用的多,就意味着会使用的深入,掌握一些平时不了解的特性。无意间发现有Bash On Ubuntu On Windows这么个东西,可以内置安装一个Linux系统,立马装好后,开始准备lamp环境建设。由于WSL是ub...

2018-07-30 20:34:52 710

原创 composer自动加载过程初步学习

composer听说过好久了,但是一直都没细节的去了解,简单查阅资料大部分是讲解命令,比如:composer install、composer update作用。autoload怎么实现的,暂时没有找到特别详细的。 先来了解下autoload。首先,autoload有psr-0和psr-4两种规范。psr-0:psr-4:其实最早找到的是英文版,不过甭管是中文还是英...

2018-07-28 14:06:30 1503

原创 Redis连接方式pconnect和connect初步探索

总结一下最近比较杂乱的学习。看到有人提PHP_EOL的作用,解释说是所有PHP环境下的空格,我刚好看到,因为PHP_EOL我经常在输出日志的时候用,非常了解作用,是用来兼容不同操作系统换行符的,避免犯错,我还是网上查找一番,确定无误后,我特意@了下,这个是换行符。虽然最后没相信我,大家可以试一下,甭管是百度还是必应更不要说是google,第一行出来的绝对就扣上了换行两个大字。最后他发了一段代码浏览...

2018-07-14 23:09:46 11275 3

原创 nginx负载均衡和配置PHP-FPM

PHP开发基本上都知道两种运行环境,分别是LNMP和LAMP。区别主要在N和A上,当然从细节上来区分,两个P也有不一样的地方。不谈之前的浅淡理解,最近一个项目上要配合进行PHP服务器指向的切换。发现A服务器上安装了apache,B服务器上安装了nginx,每次请求B服务器的nginx,业务逻辑在A上执行。这和我之前所了解到的不太一样,一般来说apache和php通过mod_php方式运行,而要是用...

2018-06-21 01:25:48 5908

原创 Redis初步使用总结

项目组里一直没有使用Redis,经过对Redis的简单了解,我就觉得这么神奇好用的玩意儿,不去用它真的是与IT社会脱轨。再者,看看外面的PHP面试,对Redis、Memcached的要求可不仅仅是说会用就行了,要掌握原理、数据结构、两者不同应用场景,特别是高流量下的优化处理。聊聊自己曾经开发的小功能,现在回想,用了Redis,不管是效率还是代码的简洁度,都会有个大提升。①  同步返回,异步请求第三...

2018-06-07 01:17:11 163

原创 Redis的初步搭建及被入侵经历

越来越觉得Redis的火热,同时日常开发中迫切需要用到,所以赶紧来充充电吧。网上非常详细的介绍了Redis的来源、特点、数据结构、应用场景等。在这里仅以一个新接触的入门者来自我总结下,Redis可以理解为以内存作为数据存储介质,因此读写效率极高,相比较于传统的关系数据库,如Mysql,非常适合存储读取频繁使用的数据。同时实现了持久化,不用担心数据丢失,支持多种数据结构,主从模式、配置集群什么的当然...

2018-05-31 02:19:36 3864 1

原创 PHP缓冲区原理的初步学习

最近在阅读ThinkPHP5.0源码的时候,看到代码: 从注释明白功能要申请一块比较大的buffer,但是为什么新申请的就比较大,原来的就小呢?小有什么关系吗?因此着重学习下ob_*系列的函数,想要深入了解下这部分功能。ob_*函数在以前有了解到是来操作PHP缓冲区的,最先使用场景是,我们要对用户数据进行批量处理,那么使用echo输出信息来展示当前进度无疑是一个简便快捷的办法。但是不管是echo、...

2018-05-26 17:13:01 3213

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除