201902-01 PHP高级教程:大型网站你是如何用PHP解决架构的? 在网站业务发展的不同阶段,会面临不同的问题,针对不同的问题,会选择不同的架构。大型网站架构就是在不同阶段时解决不同问题的过程中慢慢演进来的。 继续阅读 >
201901-29 2019最新swoole4.0版本教程—带你了解不一样的PHP HOT swoole4.0可使用协程+通道的全新编程模式,代替异步回调,应用层可使用完全同步的编程方式,底层自动实现异步I/O 继续阅读 >
201901-29 swoole教程:swoole4.0操作mysql连接池之读写分离 为什么要读写分离?一般的系统都是读多写少,利用读写分离,可以提升mysql的效率读写分离后,从库可以水平扩展 继续阅读 >
201901-29 php+swoole实现多线程的操作,赶紧来学习 如果发送邮件耗时2s,发送短信耗时2s,那么我们完成任务大概需要4s左右的时间。如果我们使用多线程的话,可以开两个线程,一个用于处理邮件,一个用于处理短信,则耗时一共需要2s左右,处理时间缩短了一半。 继续阅读 >
201901-26 PHP高级教程:用Swoole和Redis实现并发队列处理 由于PHP不支持多线程,但是作为一个完善的系统,有很多操作都是需要异步完成的。为了完成这些异步操作,我们做了一个基于Redis队列任务系统。 继续阅读 >
201901-21 API接口设计,通信协议的整体架构实现思路 在项目中,需要为APP撰写API。刚开始接触的时候,并没有考虑太多,就想提供URL,APP端通过该URL进行查询、创建、更新等操作即可。但再对相关规范进行了解后,才发现,API的设计并没有那么简单,远远不是URL的问题,而是一个通信协议的整体架构 继续阅读 >
201901-21 PHP高级操作:Memcached分布式部署方案设计 通常一台Memcache通常不能满足我们的需求,这就需要分布式部署。Memcached分布式部署方案通常会采用两种方式,一种是普通Hash分布,一种是一致性Hash分布。本篇将以PHP作为客户端,来分析两种方案。 继续阅读 >
201705-17 PHP性能问题解决方法 什么情况之下,会遇到PHP性能问题?1:PHP语法使用不恰当。2:使用PHP语言做了它不擅长的事情。3:使用PHP语言连接的服务不给力。4:PHP自身的短板(PHP自身做不了的事情)。5:我们也不知道的问题?(去探索、分析找到解决办法,提升开发境界)。对线上站点做压力测试的时候,我们一定要将请求数和并发数,特别是并发数要设置的比较低,我们不能对线上的网站造成压力问题,不管是自己的还是别人的。PHP性能问题一般不会超过占整... 继续阅读 >
201703-07 PHP 魔法函数性能分析 曾经记得鸟哥Laruence提过不建议使用”魔术方法”,自此之后一旦涉及使用魔术方法的地方,我都会下意识的想一下,这样写真的好吗?由于这一到两年来一直忙于工作和学习新的知识,所以在这道坎儿上一直没有做深入的探索一直恍恍惚惚过去了,今年是我进行深入学习的一年,因此现在必须对这个问题做个了结了。我们先来看看鸟哥Laruence博客曾经提到的:当我把PPT分享给公司的同事的时候,会有人质疑,魔术方法都不让用?优... 继续阅读 >
201701-03 秒杀抢购思路以及高并发下数据安全 我们通常衡量一个Web系统的吞吐率的指标是QPS(QueryPerSecond,每秒处理请求数),解决每秒数万次的高并发场景,这个指标非常关键。举个例子,我们假设处理一个业务请求平均响应时间为100ms,同时,系统内有20台Apache的Web服务器,配置MaxClients为500个(表示Apache的最大连接数目)。那么,我们的Web系统的理论峰值QPS为(理想化的计算方式):20*500/0.1=100000(10万QPS)咦?我们的系统似乎很强大,1秒... 继续阅读 >
201612-07 PHP 魔术方法详解 HOT 前言PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用。魔术方法包括:__construct(),类的构造函数__destruct(),类的析构函数__call(),在对象中调用一个不可访问方法时调用__callStatic(),用静态方式中调用一个不可访问方法时调用__get(),获得一个类的成员变量时调用__set(),设置一个类的成员变量时调用__isset(),当对不可访问属性调... 继续阅读 >
201611-26 利用PHP 7中的OPcache来实现Webshell 在这篇文章中,我们将会对PHP7OPcache引擎中的安全问题进行讲解,而且还会给大家介绍一种新型的漏洞利用技术。通过这种攻击方法,我们可以绕过某些安全强化技术,例如禁止web目录的文件读写等安全保障措施。除此之外,攻击者还可以利用这种攻击技术在目标主机中执行恶意代码。OPcahceOPcache是PHP7.0中内嵌的新型缓存引擎。它可以对PHP脚本代码进行编译,并且将编译结果以字节码的形势存入内存中。OPcache通过将P... 继续阅读 >
201611-26 日请求亿级的QQ会员AMS平台PHP7升级实践 QQ会员活动运营平台(AMS),是QQ会员增值运营业务的重要载体之一,承担海量活动运营的Web系统。AMS是一个主要采用PHP语言实现的活动运营平台,CGI日请求3亿左右,高峰期达到8亿。然而,在之前比较长的一段时间里,我们都采用了比较老旧的基础软件版本,就是PHP5.2+Apache2.0(2008年的技术)。尤其从去年开始,随着AMS业务随着QQ会员增值业务的快速增长,性能压力日益变大。于是,自2015年5月,我们就开始规划PHP底层... 继续阅读 >
201611-26 [译] 又一个升级到 PHP 7 后性能提升 50% 的案例:Tumblr 导读:PHP7发布有一段时间了,业界有一些公司已经尝试在线上大规模使用这个版本了。Tumblr也从PHP5升级到PHP7,他们碰到了什么问题,又是怎么处理的,PHP7这个版本又给Tumblr带来了什么?相关的经历对类似需求的团队会有很多启发。在Tumblr,我们一直在寻找新方法来提高网站的性能。这意味着在关键路径大量使用缓存,测试新的CDN配置或升级底层软件。最近,在团队的努力下,我们将整个Web服务器从P... 继续阅读 >
201609-16 10 件在 PHP 7 中不要做的事情 10件在PHP7中不要做的事情1.不要使用mysql_函数这一天终于来了,从此你不仅仅“不应该”使用mysql_函数。PHP7已经把它们从核心中全部移除了,也就是说你需要迁移到好得多的mysqli_函数,或者更灵活的PDO实现。2.不要编写垃圾代码这一条可能易于理解,但是会变得越来越重要,因为PHP7的速度提升可能会隐藏你的一些问题。不要仅仅满足于你的站点速度,因为迁移到PHP7才让它变快。为了理解速度有多... 继续阅读 >
201607-27 其实你距离PHP高级工程师只有一步之遥! 平静的心态要写一手好的程序,没有好的心态是不行的。遇事不可急躁,不可轻言放弃。在程序开发过程中,尤其是初中级程序员,写出的程序或架构会遇到很多问题,其中一些问题比较弱智,而有些问题根本没有碰到过,于是不可太过急躁,应该逐个排查问题的最初源泉,将其干掉。急躁的心态去开发系统是对项目的一种不负责。急躁会让人学会将就,让人学会逃避。这样的心态也会有助于你其他方面的处事能力。为什么将... 继续阅读 >
201604-11 PHP 中的设计模式 本文主要讨论下Web开发中,准确而言,是PHP开发中的相关的设计模式及其应用。有经验的开发者肯定对于设计模式非常熟悉,但是本文主要是针对那些初级的开发者。首先我们要搞清楚到底什么是设计模式,设计模式并不是一种用来解释的模式,它们并不是像链表那样的常见的数据结构,也不是某种特殊的应用或者框架设计。事实上,设计模式的解释如下:descriptionsofcommunicatingobjectsandclassesthatarecustomizedtos... 继续阅读 >
201604-09 PHP内核了解:生命周期及运行模式 HOT PHP运行模式1)CGI(通用网关接口/CommonGatewayInterface)2)FastCGI(常驻型CGI/Long-LiveCGI)3)CLI(命令行运行/CommandLineInterface)4)Web模块模式(Apache等Web服务器运行的模式)5)ISAPI(InternetServerApplicationProgramInterface)备注:在PHP5.3以后,PHP不再有ISAPI模式CGI是个协议,跟进程什么的没关系。那fastcgi又是什么呢?Fastcgi是用来提高CGI程序性能的。PHP中的CGI实现... 继续阅读 >
201512-12 PHP底层的运行机制与原理 PHP说简单,但是要精通也不是一件简单的事。我们除了会使用之外,还得知道它底层的工作原理。PHP是一种适用于web开发的动态语言。具体点说,就是一个用C语言实现包含大量组件的软件框架。更狭义点看,可以把它认为是一个强大的UI框架。了解PHP底层实现的目的是什么?动态语言要像用好首先得了解它,内存管理、框架模型值得我们借鉴,通过扩展开发实现更多更强大的功能,优化我们程序的性能。1.PHP的设计理念... 继续阅读 >
201512-02 PHP多种序列化与反序列化的方法 推荐 序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。1.serialize和unserialize函数这两个是序列化和反序列化PHP中数据的常用函数。<?php$a=array('a'=>'Apple','b'=>'banana','c'=>'Coconut');//序列化数组$s=serialize($a);echo$s;//输出结果:a:3:{s:1:"a";s:5:"Apple";s:1:"b... 继续阅读 >
201511-18 PHP编程中的锁 最近看了《理解Linux进程》这本开源书,链接。该书描述了linux中的进程概念,对锁和进程间通信(IPC)有一些总结。不过该书的描述语言是golang,平时用的比较少,就想对应概念找找php中的接口。文件锁全名叫advisoryfilelock,书中有提及。这类锁比较常见,例如mysql,php-fpm启动之后都会有一个pid文件记录了进程id,这个文件就是文件锁。这个锁可以防止重复运行一个进程,例如在使用crontab时,限定每一分钟执行一个任... 继续阅读 >
201511-04 谈PHP中信息加密技术 推荐 同样是一道面试答错的问题,面试官问我非对称加密算法中有哪些经典的算法?当时我愣了一下,因为我把非对称加密与单项散列加密的概念弄混淆了,所以更不用说什么非对称加密算法中有什么经典算法,结果当然也让面试官愣了一下,所以今天就花点时间说说PHP中的信息加密技术信息加密技术的分类单项散列加密技术(不可逆的加密)属于摘要算法,不是一种加密算法,作用是把任意长的输入字符串变化成固定长的输出串的一种函数MD5stri... 继续阅读 >
201510-22 PHP 性能优化 php是一个很流行的脚本语言,现在很多公司(新浪、优酷、百度、搜狐、淘宝等等)在使用这种语言进行网站开发。我的这篇文章,我只是希望能够提高你的php脚本性能。请记住你的php脚本性能,很多时候依赖于你的php版本、你的webserver环境和你的代码的复杂度。优化你代码中的瓶颈Hoare曾经说过“过早优化是一切不幸的根源”。当你想要让你的网站更快运转的时候,你才应该去做优化的事情。当你要改变你代码之前,你需要做的事... 继续阅读 >
201510-10 PHP header 函数的用法及其注意事项 推荐 voidheader(string$string[,bool$replace=true[,int$http_response_code]]):SendarawHTTPheader下面有一些使用header的几种用法:1、使用header函数进行跳转页面;header('Location:'.$url);其中$url就是将要跳转的url了。这种用法的注意事项有以下几点:Location和":"之间不能有空格,否则会出现错误(注释:我刚测试了,在我本地环境下,没有跳转页面,但是也没有报错,不清楚什么原因);... 继续阅读 >