目录

前言

php已经成年好多年,虽然php5之后的版本还年轻,但各种解决方案还是层出不穷,看到一篇文章(四年精华PHP技术文合集-杂文篇),本着空闲时每一篇看看,备注点我们个人的一些经验总结,毕竟有些文章是旧文章,有些技术有更新有不一样,分享给新手php开发们。

PHP是在服务端执行的脚本语言,也是最有争议性语言。

PHP革新

有幸参与2015年的PHP技术峰会(PHPCON),听了鸟哥(惠新宸)的关于PHP7的新特性和性能优化的分享

php5.6跨版本到php7,在wordpress的比对测试中,PHP7对比PHP5.6,QPS提升了2.27倍,不说提升个50%大家就高兴的不得了,更何况是2倍以上

PHP7带来了哪些重大的变革
PHP: 从PHP 5.6.x 移植到 PHP 7.0.x - Manual
PHP 7 新特性 PHP 7+ 版本极大地改进了性能,在一些WordPress基准测试当中,性能可以达到PHP 5.6的3倍。 PHP 7+ 版本新加特性如下表所示: 序号 内容 1 PHP 标量类型与返回值类型声明 2 PHP NULL 合并运算符 3 PHP 太空船运算符(组合比较符) 4 PHP 常量数组 5 PHP 匿名类 6 PHP Closure::call() ..
PHP-8将于今年年底发布,其最令人期待的功能之一就是JIT编译。

php8最令人期待的应该就是JIT编译了,经过测试比对,php8在使用JIT编译情况下,比PHP7.4提升了45%左右的速度,很满意的。了解JIT编译详见:理解JIT编译

整理:PHP开发者(ID:phpDevs)最近知名 IDE 厂商 JetBrains 发布了 2019 年开

根据调查到2020年,已经有至少85%的开发者使用php7.x版本

开发者常用的框架:Laravel、wordpress,显然中国的统计缺失,个人觉得ThinkPHP与CI应该还是有不少开发者在使用特别是TP

常用IDE:56%以上使用phpstorm,还有10+%的VSCode,除了VSCode个人还常用那个3%的NetBeans、VIM

常用测试框架:phpunit

相信每一家成长中的公司多少都会经历以下事宜:解决方法:使用opcache缓冲转换后的代码,文件如果没有更新则

这是一篇使劲吹Swoole的文章哈。更具体的可以阅读 Swoole相关文章

微信生态相关技术

过年前后做了个微信公众号项目,已经过去一段时间了,抽空回忆总结下基本流程吧,不然很快估计自己就忘了。。

微信开发流程并不复杂,复杂的地方在于调试。该文章中提到的:测试账号的重要、开发环境的内网穿透比如使用netapp等,对于初学者要着重注意accessToken的理解和使用,基本上和微信服务器交互都需要accessToken,比如登录验证、支付、分享、公众号消息等

微信H5支付接口如何申请?

基本所有和电商有关的产品,都会使用到微信的支付,微信支付有App、公众号H5、小程序支付相关接口(还有一种是移动端普通浏览器上的微信支付,比较少见)。至于文中提到的斑马支付,应该是广告,官网在百度关键词上也不是首页,信任度不高,目前最有名的聚合支付应该还是ping++

个人之前收藏的官方开发文档,非微信H5支付比较少见,但那些产品只在微信生态体系下,且想把触角伸到微信生态外的,可以普通H5+非微信支付实现在非微信环境下的支付:

公众号H5支付:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=3_1

App支付:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1

企业支付:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1

非微信H5支付:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_1

开发前配置进行代码接入前,需在微信后台填写授权回调域名,此域名必须经过ICP备案
本文实例讲述了PHP与微信支付,在公众号支付的功能,接入Api是很简单的
本文实例为大家分享了php实现小程序支付的具体代码,供大家参考,具体内容如下环境

微信支付,都是先生成统一订单,发起支付,支付回调,商品发放

注意:订单号、验签、价格单位、主动请求微信服务器确认支付成功

提现必须得用双向证书、所以大家一定要在微信的商户平台找到相应的地方去设置、因为我做这个提现已经有一段时间了、
1.基本配置//公众账号appid $data[\x26quot;mch_appid\x26quot;] = \x26#39;appid\x26#39;;//商户号
微信支付企业付款到零钱功能应用广泛,比如微信红包奖励,业务结算等。通过企业向个人付款,付款资金将直接进入用户
微信支付企业付款到零钱功能应用广泛,比如微信红包奖励,业务结算等。通过企业向个人付款,付款资金将直接进入用户

这些提现,都是企业支付,企业支付:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1 ,企业支付才支持提现

注意:双向证书(退款也是)、商户余额判断(事务+锁+提现申请+频率限制,避免被恶意提现)、微信提现规范限制、价格单位

当然网上可能也有很多大神自己重写和封装了demo,或许更加好用简洁,但是我还是不提倡用
微信小程序支付的主要逻辑集中在后端,前端只需携带支付所需的数据请求后端接口然后根据返回结果做相应成功失败处理

前面的文章已经介绍了好多微信支付,这里着重推荐退款操作。

退款注意事项:退款可信(事务+锁+退款申请+频率限制,避免恶意退款),主动查询退款可信、双向证书、商户订单号、交易流水号、单位、用户id、退款超时、及微信可能要求多久的订单号才允许退款

做支付对账,即检查第三方支付与数据库中账单是否一一对应,涉及到微信对账单的处理,成功时,微信账单接口返回数据

有了支付,项目越大,企业财务需要对业务流水进行对账。一般是要求研发提供业务系统的支付流水账单,财务到财付通得到微信提供的相应账户的账单,通过Excel或python进行对账。这里介绍了微信对账单接口使用,返回有具体流水数据和统计信息,通过业务加工可以实现每日自动对账。

这篇文章主要为大家详细介绍了PHP后台实现微信小程序登录,具有一定的参考价值,感兴趣的小伙伴们可以参考一下微

理解微信(第三方平台Oauth)用户体系验证逻辑(时序图)比较重要,思想理解了,剩下就是技术方法了,参考官方文档即可.

小程序的用户体系可能会有一点差异,但万变不离其中。

注意:第一次登录、二次登录、业务session或token处理(可以用session机制,也可以使用JWT的方式)

首先我们先确认我们的百度云人脸库里已经上传了我们的个人信息照片然后我们在后台写刷脸登陆的接口login我们要

人工智能应用已经很成熟(并不是说很厉害了哈,但在声音、视觉、图片领域解决很多普通应用计算解决不了的问题)。对于php来说,由于各方面的原因,php并不能直接参与机器学习甚至深度学习等人工智能方面的计算,只能在业务层面去调用第三方API或模型才能实现输入=>智能输出的效果。本文介绍了微信小程序结合百度AI人脸库实现刷脸登录,如果没有业务后端的登录,都可以不需要php参与。

阿里生态相关技术

php与阿里云短信接口接入

阿里大于,可以二次封装,让使用更轻松更友好。该文章可能是只需要一个模板,我们还可以封装更多模板,让团队其他短信功能使用更方便。

正文内容先来个效果图做这个支付宝支付我总共用到了三个控制器:1:支付宝支付控制器。2:支付宝支付配置参数控制
1.首先你要加载你的支付宝配置项 include(\x26#39;alipay/aop/AopClient.php\x26#39;);
本文实例为大家分享了php实现单笔转账到支付宝的具体代码,供大家参考,具体内容如下:1.首先 去蚂蚁金服签约

支付宝支付原理与微信支付大体原理是类似,只有在部分技术细节及参数和平台有关,当然支付还是坚持严谨,不论是单位、二次确认、事务、锁、频率等繁琐的细节,都不能少,毕竟涉及钱的问题,再小的隐患都是大隐患。尽量让更多技术开发参与逻辑评估,或者公司内部形成统一的php支付sdk

电子商务相关

近期遇到银联支付以及相关退款(此文仅以手机控件支付作为前提)操作,下面会依次写出期间遇到的问题以及基本流程,
功能需求:用户输入混合的收货地址,能智能识别出地址,手机,姓名

类电商系统都会用都地址模块,也都会碰到智能识别收货地址问题,或说是校正地址问题。该文的整体思路建立在字符串处理(匹配),之前实现过类似的地址校正问题,效果还行,但不能说是智能。期待机器学习式的智能地址识别模型。

拆分订单服务是为了适应不同商品、库区及灵活的发货方式,我们将对订单状况进行更加细致的跟踪。

拆单逻辑挺清晰的,我们曾经也遇到类似问题,也能理出拆单的逻辑,但主要瓶颈在于拆单前快递费用如何精确计算,考虑不同商家、不同仓库、不同重量、不同快递商,这些因素只有在拆单后才能确定,有点像薛定谔的猫,只有打开盒子才知道猫是活的还是死的。这个问题有一种方案是通过数学的近似求解来处理(可能部分用户会存在不满,因为不精确),

时间日期

最近开发中,经常用到时间的一些例子,比如昨天,今天,前天,近七天,一周等等。这里整理了一个时间的完整类实例,

php的date函数很强大的,我们也都很喜欢用,基本不会去记太多参数配置,常用的记住就可,不用过度封装,除非重复代码多。

在php中我们要把时间戳转换日期可以直接使用date函数来实现,如果要把日期转换成时间戳可以使用strtot

常用的可能就是xx分钟前,xx小时前,xx小时后,xx天后等这种需要稍微思考下才能写出来的代码。除非经常使用,不然很难一直记住使用方式,毕竟php的函数参数很多都不是很自然,有点牵强的的方式,但能用的程度。

基础实践

有兴趣的童鞋可以买个类似树莓派这样的低功耗设备去运行。

语音播报,php自身很难做到的,还是需要外部接口,比如百度语音接口、科大讯飞语音接口等

摘要:通常在做内容网站的时候,需要在每一篇文章中出现与该文章相关的文章列表。对于大多数人来说,使用的方法通常

如果在10年前,你看这篇文章会觉得还有点意思,现在看到标题你以为是机器学习实现的文章推荐。这篇文章主要借用similar_text函数实现标题字样相近判断,简单粗暴,并不是从文章语义、分类、用户等维度判断,应用场景不大。

简单聊聊PHP下的截断问题

大部分情况,大部分开发者不会遇到这些奇葩的问题。但经常会忽略编码(UTF-8、GB2312、GBK)问题,导致字符串截断出现乱码的情况,这个是很经常出现的哦,比如mb_substr、mb_strcut等函数,都有个encoding的参数,这个参数的默认值在多个php版本上是在配置中声明的,如果服务器上php的配置你不清楚的,最好每次都给函数补充明确的编码。

关于怎样实现楼中楼的评论系统具体操作

知乎采用了楼中楼的回复方式,但用的不舒服,在我们使用的应用中,发现体育论坛虎扑的楼中楼回复做的很舒服(套中套),还有点亮的亮点功能,虎扑的回复结合了原来回复当成一层楼,也能点开[回复]查看所有回复,并允许递归深度查看回复,逻辑清晰,层级清楚,界面简洁,数据设计清晰明白简单。楼中楼回复在前端实现,有一种是楼中楼回复嵌套展开,这对前端实现和后端取数据有一定难度,如果这种成虎扑的这种方式,前端回复仍然是列表展示,不存在递归嵌套展示,多了个【查看回复】按钮,设计一个回复的回复列表(依然是回复列表的子列表设计),一层层

本文实例讲述了PHP实现的消息实时推送功能。分享给大家供大家参考,具体如下:入口文件index.html\x26lt;!

ajax的短连接通过php的死循环(while true)模拟长连接方式。长连接的实现,现在很成熟了,有workerman,还有swoole等,如果实在需要简单近似长连接的实现,可以参考微信二维码扫码验证的方式:前端ajax轮询方式,补充异常或一定规则下自动停止轮询,并提供手动再次轮询的方式,相对简单

点击上面关注我关注我哟小编 隔天推送php教程,php技巧,php视频教程,MySQL,笔试题等诸多优质内容

这篇文章简单介绍了公司内部业务系统的SSO实现。关于SSO策略参考:单点登录策略,有三种情况,1:同公司同域名下,一般采用cookie方式的JWT;2:同公司不同域名,CAS一般提供一个公共的用户体系,业务服务端向CAS服务器请求ticket,并通过业务客户端向CAS服务器验证ticket;3:不同公司不同域名,我们常见的有微信、QQ、微博等基于OAuth的授权方式。

这个操作还可以

又看到一篇简单介绍单点登录文章,虽然简单不是非常完整,但对于初次接触的phper来说,可以通过其中体会一些东西,之后慢慢体系的看sso单点登录的文章,加深印象并刻在脑子里。

最重要的是原理思路要记在脑海里,不论什么语言,什么系统,都是这个理,通过这篇文章里的一张图,我们可以在具象的描述:五一放假,我们出去游玩,去厦门,厦门有好多景点,2020的5.1假期,景点都需要预约及买票,我们今天要去鼓浪屿、胡里山炮台、植物园、园博园等,我们去这些景点(业务网站A、B、C…)需要带有门票,现在呢,厦门提供了一个统一门票服务中心(SSO服务中心)负责售票、验票,我们要去门票服务中心购票,去鼓浪屿前,在门口检票员扫一扫我们手机上门票二维码验票,验票成功我们就可以上鼓浪屿小岛了,如果这个时候检票员发现我们并没有买票或票无效,会提醒我们到门票服务中心购票(SSO服务中心),现在手机那么方便,我们现场就购票,并验票就又可以去鼓浪屿了。

关于PHP实现读取一个1G的文件大小操作

该文章在没有迭代器的php版本里,只能通过其他取巧的方式实现内存低消耗快速的实现方式。但我们更想要的是在php里就把他实现了。

python在处理大文件方面就是使用迭代器的方式实现,php的实现参考:通俗易懂PHP迭代生成器

PHP会员找回密码功能的简单实现

找回密码是一个拥有用户体系产品必不可少的一个功能。有多种实现方式,比如发送邮件重置密码、发送短信验证码重新设置密码。

发邮件注意事项:邮件发送格式、重置密码链接、token验证、重置密码界面及安全,相对短信来说复杂了些,但免费。(越来越多产品只考虑手机号、巨头产品用户体系如微信、微博、头条、钉钉)

发送短信验证码:短信费用考虑、短信攻击(图形验证码、频率、ip限制、用户限制、第三方智能验证),相对简单有效,但有费用

文章来自:脚本之家http://www.jb51.net/article/88436.htm正常的网址带上参

移动互联网时代,短网址很流行,2020年了,百度短网址已经不再免费供应,其他靠谱的大平台的免费短网址也不再那么容易找到。

公司内部产品多的话,可以考虑实现简易的短网址服务,提供短网址接口

简单来说是表url地址映射。生成地址:一个id对应一个url地址,生成短地址(id根据一定规则转换成字符串,比如自定义36的进制);解析地址:根据规则解析地址为id,通过id到数据库表中查询到原地址。当然表会越来越大,可以考虑分表(根据域名进行一定转换取首字母)智能分配到不同表中,这里就要考虑解析时如何找到是哪个分表中的id。

这种简单的表(id,url),mysql5.6至少可以支持4千万条,且查询依然很快(一条记录),毕竟是主键索引树查询

Yet Another URL Shortening Service in Golang. Contribute to tsingchan/shortme development by creating an account on GitHub.

补充一个golang+mysql的现成的短网址服务:

一、原理提交次数是肯定要往数据库里写次数这个数据的,比如用户登陆,当用户出错时就忘数据库写入出错次数1,并且

这篇文章,只是一个思路,但实际并不会使用数据库。

哪些场景会使用到限制ip呢?高并发(秒杀、抽奖、投票、抢购、恶意请求如验证)场景

数据库因为需要额外的连接消耗且是硬盘操作,效率肯定不如内存级别的存储,比如memcache、redis,建议可以使用redis,支持秒级、自动过期、快速读写、单线程、分布式。

限制ip,除非是恶意程度严重,否则容易误伤正常用户,所以如果设计中,有必要要求用户登录才可操作,通过限制用户来得更精确。而且方便后续验证是否僵尸、恶意用户,进行用户限制

今天小编向大家普及一下,采用swoole框架的一些 用户和案例半次元 半次元:t 半次元是国内第一中文COS

这篇文章介绍的是一些采用Swoole的案例,而不是使用php读取和解析大文件实战。

YY语音部门内多款移动APP使用swoole作为底层框架,实现了手机客户端与服务器段长连接,直接通信的模式。大大提升了移动网络下应用程序的用户体验。

另外部门内部的数据统计监控平台,实时日志上报和实时推送,爬虫引擎都是基于swoole的。是因为韩天峰大佬在YY语音主导的项目?

通过这些案例都是早几年的Swoole的应用,特别是在实时推送、日志上报,php也有自己的不错的库(workerman虽然更成熟些,但是基于php实现)。现如今swoole4.x已经不仅仅局限于长连接,还提供了协程异步、高性能网络通信,可以方便快速的实现 TCP/UDP服务、高性能Web、WebSocket服务、物联网、实时通讯、游戏、微服务等,使 PHP 不再局限于传统的 Web 领域。查看更多Swoole入门信息

由于用户量较大,经常会有导出50万加数据的情况。而常用的PHPexcel包需要把所有数据拿到后才能生

从数据库中按page读取数据,实时写入php的output输出流(php://output),再通过ob输出给web浏览器。解决了大数据表格输出占用大内存的问题。

当然大数据下载,面临php的长时间连接带来的风险,建议:如果是外部用户下载,提供一个专门冷数据查询或下载的备库;建议严格限制用户访问频率及合法性;另外大数据,特别是日志类的数据表往往都很大,如果一直翻页查询,越往后速度越慢,文章作者最后提到了如何优化的问题,虽然是个细节,却是大部分开发者需要学习的地方,细节往往决定成败,作者利用B+树的原理,补充lastid进行查询,保证sql语句利用了主键索引树。参考:高性能mysql笔记

1.启用 PHP 的安全模式PHP 环境提供的安全模式是一个非常重要的内嵌安全机制,PHP 安全模式能有效控

大部分在php7之后都得到调整或废弃了。当然如果版本还低的可以参考调整设置,在不影响业务的情况下。

在文章评论,分享内容中有时候会遇到屏蔽敏感词,关键字等之类的

在2020年看,这两个方案(词库正则匹配与词库循环匹配)都是小打小闹,只能是有局限的使用。当然要自己设计一套敏感词方案(如微信公众号后台敏感词)确实不容易,首先要有个基础敏感词库,其次还需要一个支持自动与手动增删改敏感词的服务,再次有个高效检测敏感算法机制。

当然用钱也是解决的,比如微信、网易、阿里云、七牛等各种平台都会提供敏感词检测、鉴图等有偿服务

php与视频播放器插件的功能,说白了就是前端是播放器的插件,直接调用后端传递过来的播放地址

这篇文章简单易懂的告诉我们视频播放的整体思路。前端负责播放器的插件初始化及运行;后端负责播放数据信息的封装,比如封面图面,名称,播放时间,视频地址等等。

现在流行直播(当然很多也都是录播视频而已),视频播放在技术上仍然不变动,只是直播会有直播源地址及相关信息,业务端只要调用平台方的直播数据即可。

上干货,直接看代码\x26lt;?php /** * PHP 非递归实现查询该目录下所有文件 * @param unkn

作者并不是说递归有问题,而是作者的专研精神,告诉我们非递归也可以很自然很好理解遍历多层目录的实现方式。非递归方式更符合人类第一个遍历目录的想法,递归是经过论证积累下的抽象的优秀算法(代码更简洁)

PHP在控制器中怎么添加token验证//获得token

这篇文章介绍了表单提交增加token验证,为了防止外站提交、重复提交、双击提交问题。重复提交、双击提交这种正常用户的异常操作能得到限制,但除了正常用户(君子),黑客(小人)就难防了。目前ajax请求模拟、表单提交也能模拟,不信你看那些公众号聚合编辑器、爬虫等,我们曾经使用自定义浏览器内核可以模拟各种http提交请求(不论是ajax、表单、特殊body、cookie限制、csrf、token等),现在有了机器学习,甚至图片验证码也不是问题;甚至普通浏览器上也可以通过油猴插件+自定义js脚本也能达到模拟提交表单等能力。

这里要说的是,用户输入都是不靠谱的(提交数据),所以后端一定要做好各种校验与限制。(当然你觉得你们的产品将来会是个大项目,或者你觉得你们的产品值得黑客来黑的时候,比如提现、退款、红包等和金钱过得去的功能)

什么是RBAC基于角色的访问控制(Role-Based Access Control)

RBAC,基于角色的访问控制,大部分成熟的php框架里都会带有差不多的RBAC模块,其实我们更喜欢独立的RBAC模块,允许通过composer安装(涉及到数据层设计)。

RBAC很重要的概念:管理员(用户)、角色、权限,管理员只能是一种角色,一种角色对应一套权限配置。

用户(管理员)访问时,根据角色判断是否用户对应的操作权限。

权限粒度:有的系统按模块粗略分(财务、营销…),有的系统按操作细分(增删改查等每个按钮点击操作)

代码审核,是对应用程序源代码进行系统性检查的工作。它的目的是为了找到并且修复

这个很考验经验,没有多年经验,想不出来,甚至看了也察觉不出大部分门道来;当然不同php版本也会有不同的潜在风险问题,这是一个发展性问题,其实IDE完全可以实现这方面的初步审核,不需要使用第三方安全审核工具才能及时纠正,当然现在很多IDE也能建议一些有效的方案了,但还是会有很多潜在风险是没有识别,至少可以全面检查项目代码后,给出潜在风险列表,由开发人员二次判断及纠正(毕竟php门槛低,部分开发者水平暂时还是很低的,性能和安全方面完全不考虑,需要一个有经验的一线实战技术管理人员进行代码审核)

我们以前都会养成一个习惯,每天早上都会把SVN或GIT的提交记录大致过一遍,一方面可以学习别人好的编码及思路,另一方面可以帮助发现模块代码存在风险问题。如果有时间的话,这是技术负责人解项目各个成员的编码情况是一个不错的直观方式,当然审核代码还是需要一些工具,才能提高效率。参考:php代码审计代码审查方式

用户通过指定的URL范式对后台进行访问,URL路由处理类进行处理后,转发到逻辑处理类,逻辑处理类将请求结果返

初学php框架的开发可以了解下,虽然你们看框架源码也能看懂。

这边要注意的是:普通模式和PATHINFO模式

多年php开发人员都知道php的处理本质就是字符串处理。把字符串玩出花来。2020年了,我们会发现编程并不仅仅是字符串的处理,还有数学公式的处理,你看python,你看机器学习,你看大数据处理

PHP随机生成中国人姓名的类

没有很特殊的算法,只是这个取名想想有趣,给小孩取名是最有趣的,赶紧去找个女朋友吧,工程师们,然后准备给孩子取名。没结婚前我们也为孩子准备了两个名字,一男一女,但当有了孩子,我们还是另外取了哈,毕竟时代在发展,不能是6、70年代的建国、建设等,不是80的张伟、李娜,不是90、00后的子萱、梓萱、子璇、子涵等

有时候你在实现一个出库订单之类的功能模块,这里也有可能要你的站点也实现相应的打印出库单预览,今天给大家分享用

有涉及到电商的项目,在出库的时候,需要打印拣货清单、出库清单之类,这是一个范例。如果是对接阿里系电商的可以,考虑菜鸟网络的打印组件,可以满足所有快递单打印,还支持自定义表单打印。

在做一些天气预报或者RSS订阅的程序时,往往需要抓取非本地文件,一般情况下都是利用php模拟浏览器的访问,通

这文章内容简约到你可以不用看,除非你是初学者,想知道一些过去的实现方式。

模拟请求我们建议使用:guzzle,swoole类框架会建议使用guzzle,因为协程异步;

爬虫我们建议python。php爬虫,我们建议:querylist,一个挺优雅的库,当然他用了guzzle

涉及抢购、秒杀、抽奖、抢票等活动时,为了避免超卖,那么库存数量是有限的,但是如果同时下单人数超过了库存数量,

这篇文章从文件锁示例讲起,介绍了mysql的悲观锁、乐观锁,再通过两个锁,延伸到文件锁的阻塞与非阻塞模式,最后引出分布集群及redis实现锁机制。悲观锁实践参考:悲观锁实践

属于示例、思路。更复杂精细的高并发设计参考:设计一个秒杀系统

说到闭包,就不得不说一下匿名函数。匿名函数是没有名称的函数,可以赋值给变量,本身作为参数传递在函数之间,可以

闭包,可能前端js开发更经常听到,在php中也有闭包的概念(php真的是,模仿C,不错过JAVA,学点JS,python这么火,能学点吗)。

闭包,有点抽象,如果你把他看成匿名的回调函数,可能比较好理解些,比如文中addRoute方法中第二个参数$routeCallback是一个闭包函数。如果你熟知js的闭包,那你能瞬间理解。

虽然js中闭包使用广泛,但php中并不怎么使用,一来效率不足,没法缓存opcode,每次都要动态解释,也许php8就能解决,而来函数是一次性的,不能重用

最近有客户反应商城订单金额总是不准确,总是相隔一分钱。检查相关代码逻辑都是正确的,就是运用了四则运算。大概推

php的浮点数问题,经常出现在金钱计算上,订单、提现、统计等,如果采用普通的四则运算,金钱数值总会出现一点偏差,在精确度要求高的系统,显然很难满足。

经常实现金钱交易的小伙伴们都知道如何去处理浮点数运算:首先数据字段类型设计,如果使用double浮点数,则在php业务逻辑运算的时候,建议使用BC数学函数进行运算及比较;如果考虑放大价格单位(比如分),则可以在业务层面使用整数四则运算。目前大部分平台的价格单位都是分,也就是说大部分平台建议使用整数进行运算是个比较的方案。

切换到 Linux 工作,体验暴增 100 倍!

workerman文档成熟齐全,阅读官方文档及demo,基本能掌握workerman相关技术解决方案。本站更多参考:workerman汇总

这里将结合实例介绍如何使用PHP+Mysql完成注册帐号、发送激活邮件、验证激活帐号、处理URL链接过期的功

很多开发者很了解注册账号、发送并验证激活邮件之类的实现。

这边推荐的目的是想让我们不要陷入为了实现而寻找技术方案,而是回顾了解产品功能的本质,为什么我们要发送并验证激活邮件,目的是什么,才更清楚为什么这么设计,这么设计好不好。开发人员养成这样的好习惯,避免为了实现而实现功能,养成主动去思考功能的本地化、个性化、目的等,从而选择解决方案,并实现方案,有理论依据的达到目的。

发送及验证激活邮件:首先是为了确认邮箱有效且是属于用户的,方便后续找回密码可用,其次是为了避免恶意注册的一种很好的方式,再次多收集一个有效邮箱,说不定可以卖,说不定推广告(这些都是以前遗留下来,现在不一定好用)

A curated collection of useful PHP snippets that you can understand in 30 seconds or less. - tsingchan/30-seconds-of-php-code

30秒的php代码

PHP-ML - Machine Learning library for PHP. Contribute to php-ai/php-ml development by creating an account on GitHub.

这是一个php的机器学习库

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器

该文介绍了邮箱邮件的一些基本概念。当然php的话,要快速使用邮件组件,文中提到的phpmailer、swift mailer都是比较顺手的适合现代的实现方式,不需要自己准备邮件需要的相关东西,只要知道邮箱地址、对应smtp地址与端口

微信开发已经是现在phper必须要掌握的一项基本的技术了,其实做过微信开发的都知道微信接口非常的强大做起来也
原因:很简单,公司的账号登录需要用到微信扫码登录与QQ的登录功能,所以,在做好了微信的扫码登录之后,网络

前面一篇文章,没有时序图之类的流程图,对于小白来说,可能是云里雾里的,对于懂的开发者,又显得没有看的必要。

很想画个图,但我们太懒了。

第二篇CSDN的文章逻辑清楚,步骤分明,可以看得很出清楚扫码到拿code换accessToken,获取openid及用户信息。当然缺少了如何去验证PC端的本地登录逻辑

对于PC端微信扫码登录,4个实体:用户手机、业务客户端、业务服务器、微信服务器,业务服务器向微信服务器申请生成场景二维码,用户手机扫描场景二维码,用户手机访问二维码链接(微信服务器),通过微信服务器回调业务服务器方法,实现用户授权登录与本地注册;用户手机扫码后同时PC端场景二维码页面,轮询业务服务器,确认是否授权登录成功(通过场景值+)

PHP如何实现事件监听,参考了jQuery的事件绑定思路,简单的实现了一下。

文章中事件的监听与触发编码很简洁也很好理解。这个看明白了,可以顺手掌握设计模式中的观察者模式详见:23-观察者模式

对于初入门的PHP新手来说,或许有一定的难度。建议大家先看看PHP中session的基础含义,需要的朋友可以

分享这篇新手关于用户登录的文章,主要不是为了让新手去实现,而是为了让新手明明白白的理解session和cookie,详见:通俗理解session与cookie运行机制

电商项目中为了提高抗并发能力,需要对商品列表做缓存,以下是更新缓存用的脚本://PRODUCTION_为缓存

这篇文章虽然凑字数且简单到个人认为是编辑敷衍文章,介绍的功能虽然看似简单,却涉及(只是点到为止):

  • 高并发能力的缓存用途
  • 考虑数量大时更新方案(redis:lpush、rename)
  • crontab计划,文章中一般篇幅在介绍crontab使用,显然是凑字数的
  • 锁,可以通过flock,也可以在脚本中实现
正常的网址带上参数的那种可能会很长,尤其是我们在印刷纸质品如企业宣传册中要印上某个长的url的话非常难看,而

前面我们也有介绍过短地址的实现方式,就是文章中方法3的详细版,该文章方法1、2都不是很好的设计方案

这个功能类虽然是PHP原生的,但是也值得你去学习一下的。

思路:获取远程页面所有图片地址,遍历下载所有图片地址并保存到本地。

  • 原生php采用正则匹配图片src地址,也可使用第三方比如querylist
  • 遍历下载图片
  • 如果是长期需求且下载量大,建议使用python实现爬虫与下载(毕竟爬虫生态更成熟、效率更高,特别是针对反爬虫与多线程)
写在前面: 通知系统是网站信息传播机制的重要的一部分,足够写一大章来说明。本文只梳理设计原则,后续相关内容会持续更新。 这里的通知包括但不限于公告、提醒或消息(不同使用场景下的功能定义不同)。 关于各客户端平台(ios、android、wp等)的通知机制,在其

小小的站内通知,大大的设计考虑

从图中可以看出RoadRunner对比Nginx+FPM,运行效率是有数量级上的提升。

是不是看出来了,其实国内的Swoole拥有这个能力的,效率更高,还支持异步协程编程。其实国内互联网技术现如今在很多方面也是世界的榜样和翘楚了,当然人工智能方面,我们依然在追赶,但在不远的将来,我们也能像电商一样领先全球。

php是如何实现websocket实时消息推送的

这篇文章通过php原生实现websocket服务,实现在线聊天服务。虽然现在有workerman、swoole等库/引擎可以快速实现websocket服务部署,这篇文章中的代码仍然可以让我们了解websocket服务的实现原理。

PHP实现用户异地登录提醒功能的方法

通过ip不一定可靠,通过session_id可以实现,其实只要是登录凭证记录下来即可,比如JWT的token或是其他一些ticket,都可以实现异地(只是区别不同会话)登录标记,通过每次操作验证或轮询或消息推送的方式通知前一个会话异地登录并强制退出。

session和cookie,详见:通俗理解session与cookie运行机制,JWT的好处不少,但我们也要关注他的一些可能不足的地方:JWT是外放token,token里带有验签信息、过期信息等,服务器端难以主动冻结或提前结束某个有效的token(存在只要有令牌就可以调动军队的风险),也有项目是JWT+Redis类内存存储方式用于替代session的方案。

PHP基于openssl实现的非对称加密操作

到目前为止,至少要非对称级别的加密方式才是更可靠的方式。

对称加解密,一般用于不开源的两端通信,比如两服务器之间通信保密(虽然还是有一定风险),再配合签名避免数据被篡改

更好的方案当然是使用非对称加密及机器学习加密

我们经常要对前端请求数据进行加密,然后提交给服务端,但是避免不了被模拟,除了像微信小程序客户端代码全局加密不泄露,我们就可以在客户端和服务端实现一些比如验签就可以保证数据安全与完整性

对于大多数web应用来说,数据库都是一个十分基础性的部分。如果你在使用PHP,那么你很可能也在使用MySQL

并不推荐看这篇文章(瞄一眼排版和内容,我们都不想看下去了),主要是提到了全局变量global关键字,我们也想到了$_SESSION超级数组,好久好久以前,有个项目组两个phper因为是否可以在随便定义$_SESSION元素并使用而争吵大打出手,让我们有意识地重点关注了全局变量如何使用的问题。

位运算想必软件相关专业的同学应该非常清楚。非科班专业出身的也不要着急。
下面小编就为大家带来一篇php 位运算符的用途。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 在实际应用中可以做用户权限的应用

我们觉得开发都应该要懂得简单的一些位运算:与、或、非、异或(通俗理解:相同为0,不同为1)。位运算在lanmp体系常常配合数据库设计实现权限、类配置位设计(比如一个实体表中有很多开关/属性标志位的设置项),可以考虑位的设计替代多tinyint字段,特别是能够预感到表后续会逐步增加新的标志位字段的(需要结合实际产品功能场景情况进行设计,位运算设计并不定是最好的)

随着网站的内容的增多和用户访问量的增多,无可避免的是网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数

静态化,在CMS类产品项目(门户、新闻信息流等)经常使用到静态化,降低服务器压力、提高访问效率、提升系统安全、更有利于SEO。可以通过php原生OB函数实现文件缓存并静态化(访问后缀),也可以利用smarty或PHP框架自带模板引擎配置实现静态化,静态化技术现在已经很成熟(除了页面html静态化外,页面资源js、css、图片、视频都使用cdn服务,进一步降低业务服务器压力并提高资源访问速度)

生成器是 PHP 5.5 引入的新特性,但是目测很少人用到它,其实这是个非常有用的功能。

生成器、迭代器是php的一个进步的表现,虽然来晚了点,且很少有人知道(虽然Swoole等框架也都提供了异步协程编程)。文章中示例提到了读取一个4G的文件(系统内存只有1G)的问题,迭代器的经典场景。更多详见:PHP协程实现-多进程-多线程-并发-生成器-迭代器-协程

PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不

基础知识。

重复提交的问题,有两种,一种是文章中说的表单form的重复提交,可以通过token的方式进行限制,一种是ajax(大部分新项目都采用前后端完全分离的开发方式)避免用户无意的重复提交,要考虑前端的友好交互,还要考虑后端重复提交的数据完整与安全问题。大部分前端新手想不起前端的限制及友好交互处理,因为能实现功能已经很不错了,哪还有空考虑更多细节。

为什么前后端分离?我们先说我们自己的想法:1、随着互联网的成熟,产业分工越来越细越明确,出现工种从开发到前端开发、后端开发,后端开发都不想碰前端开发只专注后端,前端开发不碰后端开发只专注前端(另外可能还有拿一份钱哪有做两份事的私心);2、开发流程的优化,要求前后端分离,并行配合,加大人力投入,提高开发效率与质量的原因;3、前后端分离除了让前端更具模块化外,对后端的微服务推进很有帮助

当然项目是否前后端分离,还需要看项目的规模,凡事都是有个度,有个临界点(比如项目功能模块数、开发团队人数等),过了临界点就需要考虑明确开发流程、确定前后端分离,如果是一个简单展示类门户(不带管理后台),就不需要去考虑太多,直接按传统mvc架构实现,等哪天需要迭代更多或大版本升级再次评估是否前后端分离

什么是前后端分离,我们文章中的一张图片: 什么是前后端分离

WEB 前后端分离三个最大的优点在于:1:最大的好处就是前端JS可以做很大部分的数据处理工作

又一篇前后端分离的文章,这文章是java生态圈的文章,虽然都是前后端分离方案,但这篇和上一篇的前后端分离的含义不一样,甚至更高级些。

本文的前后分离,实际是把以前的MVC分离成前端(c+v)+后端(m+s),c是控制层(业务流程控制),v是渲染层,m是数据模型层,s是数据服务层(业务逻辑服务)。

本文前端采用的nodejs实现了c+v,采用java实现backend的m+s,当然你也可以考虑前端采用php来实现c+v,如果这样的话,团队需要view层的前端开发(js方向),还得要有php开发,然后java开发三拨人,成本高,语言多,效率下降,不如c+v全部使用js实现(比如淘宝当然前端c+v就是全部通过nodejs实现)

瞎谈PHP

vim 是个非常高效、非常好用的工具,很多人一旦开始使用 Vim 之后就再也无法自拔。然而, Vim 仍然有

如果你vim用的不多不熟,那就不用看了,但可以看我们从一本秘籍抽取除来的部分知识编写的系列文章:Vim基础概览Vim基础配置说明Vim进阶概览Vim文件编码步步分解

具有较强可读性的代码,能帮助你调试程序,不让自己活得太累。代码可读性是计算机编程领域中普遍存在的问题。这也是

我们比较挑剔,年轻冲动喜欢挑刺。这篇文章太散乱了,看起来还是公众号凑数的文章,不影响我们去延伸,文章中:

  • 1、注释和文档,注释看个人素养,编码就如果写文章,辞藻除了华丽外还有有物,不能变量都是a、b、c、d,变量本身要有意义,语句尽量人可读(虽然我们的第一目标是让机器更可读),在不可读难以理解的情况下,加入规范的优雅的有必要的注释;代码规整如果作文段落分明、文字清晰规整不混乱,这方面除了人为外,还可以借助IDE
  • 2、保持一致的缩进:IDE、协作者之间的配合沟通
  • 3、不必要的注释:除非你心情好,写首诗、写个歌词
  • 4、代码分组:前面提到了编码如同作文,一个文件有自己的主题意义,需要不同代码模块来配合,每个模块又有自己的目的和意义,每相邻的几句代码也都可能组成一定的含义,代码模块如同作文段落,代码分组如同段落中句号分组,让阅读的人可以快速理解
  • 5\6\7\8\9、保持一致的命名规范:都是属于代码简洁之道的范畴,推荐:代码整洁之道-php版前端编码规范
你想成为一名程序员,并且正在为之奋斗,那么你努力的方式,比如做事方法、思维习惯都将会影响你会成为怎样的一名程

不论现在你学什么语言,主动、积极、多看、多问、多做项目、多加班(年轻身体好的时候,注意作息),其他都不是事,应用层的开发编程,就是你早知道能记住早记住(经验)的比较,而不像人功智能机器学习、算法研究这些可能需要更高的一些门槛(线代、统计、微积分等高数基础知识)

年轻人,多看书、多运动、多睡觉、少玩手机

PHP的设计理念及特点多进程模型:由于PHP是多进程模型,不同请求间互不干涉,这样保证了一个请求挂掉不会对全

标题太大,内容太小。php说到底,本质就是处理字符串。


吐槽下:php开源社区公众号的汇总的这些文章,我们看到这里快看不下去了,2018年的文章都是拼凑,标题说造火箭,内容螺丝钉。后面还是另外开我们自己收集的PHP相关好文。


PHP 中的 Exception, Error, Throwable

php的异常,虽然向好好学java的异常,但天生残疾,详见:解惑PHP的异常

前言前后端数据交互经常会碰到请求跨域,什么是跨域,以及有哪几种跨域方式,这是本文要探讨的内容。

目前如果跨域的内部自己的域名,可以通过jsonp、CORS设置去实现,如果跨域域名是他人域名,可通过反向代理,还有一些可以通过修改浏览器同源策略设置来访问

php 自带的加密函数 不可逆的加密函数为:md5()、crypt()md5() 用来计算 MD5 哈稀。

有时你需要一些简单的不复杂的加密工具函数,这篇文章可以收藏补充道自己的工具函数库中。

Composer是PHP用来管理依赖(dependency)关系的工具。Composer通常情况下通过com

php20+年,php5之后的几年在生态上也在快速追赶java,并学习java、js生态,虽然PHP的PEAR也表现甚佳,但还不够。且现在流行的语言,java、python、go、js都有库管理工具,生态体系一下子舒服多了。composer必须会,如果你还写php的话。详见:Composer常用命令与示例

在本文,我们将建立一个简单的lib静态库,并在扩展中进行封装调用。代码基础代码这个扩展,我们将在say扩展上

这篇文章让新手对php的扩展有了进一步的认识,不再惧怕php扩展,也能稍微了解Swoole库

将为大家介绍如何使用 PHP 语言来编码和解码 JSON 对象。环境配置在 php5.2.0 及以上版本已经

这文章有点不必要,json在php5.2之后已经内置,不需要另外安装扩展或使用第三方库实现。

php的json函数,我们需要了解并知道的是json_encode\json_decode的后面几个参数都有什么用途,当我们有需求的时候,才知道内置的json函数就能够处理,不需要自己亲自动手处理。以及如何运用json_last_error判断识别json处理是否异常,异常后如何友好处理,这些更能体现我们的编码水平,能实现正向功能,只是其一,还得考虑到异常情况,接受异常并如何友好的处理异常。

IOC(inversion of control)控制反转模式;控制反转是将组件间的依赖关系从程序内部

现在的框架很喜欢说自己运用了控制反转/依赖注入,有时直接说IOC/DI,新手看了一脸懵逼。看了这篇文章,我们新手就可以知道这个到底是什么

面试相关

一、PHP核心技术1.写出一个能创建多级目录的PHP函数(新浪网技术部)\x26lt;?php\x0a /**

看起来是至少5年前的面试题,现在的面试题要考“造火箭”的架构、微服务、设计模式、算法、缓存设计、数据库设计

长的好看的人都关注了我们面试之后总是没有下文,你知道自己输在哪吗?面试官最看中你的哪些表现?仪表风度、专业知

我们以面试官的角色来看这篇文章:

  • 1、仪表风度:是人都喜欢干净整洁不邋遢的人,颜值和谐更佳,身体英朗精神抖索(毕竟要996的福利嘛)
  • 2、专业知识:能解决面试官的问题(一般可能都是公司碰到过的问题),有一定深度,能反杀面试官的更佳
  • 3、工作经验:大厂喜欢大厂出来的,小厂大部分更喜欢大厂出来的,但也有小厂喜欢全面的人才(高度不足广度来补,毕竟大厂的全面的人才哪会来小厂)
  • 4、口表达能力:沟通是很重要的一方面,谈吐清楚、逻辑清晰、说话有分寸,更多详见:职场团队/沟通
  • 5、综合分析能力:考虑周全、有细节、有态度、透过现象直击本质(推荐:马哲通俗之美 | 5 辩证法之联系发展全面
  • 6、反映与应变能力:抛出线上问题,让其提供处理方案
  • 7、人际交往能力:开发一般都比较宅,但不乏有些交际能力强的人,喜欢参加社会活动,喜欢组织活动
  • 8、自我控制能力:
  • 9、求职动机:人求职的本质目的:钱和爽(马云说离职的本质原因就是:1、钱没有给够;2、干的不爽)。我们如果硬要问求职者动机,求职者也不会直白的告知,我们就不要去灵魂拷问了;可以尝试了解其对公司、产品、技术、团队、其他工作条件福利等方面的了解和兴趣程度

….

小结

中间有段看不去了,好多文章是凑数的,都不算是推荐,只能是借标题写写我们再这方面的一些想法和经验,分享给有需要的小伙伴们。

其他

PHP性能优化解读与补充


持续补充

@tsingchan 2020