PHP学习历程
文章平均质量分 55
记录我学习PHP的历程,从最基础开始,慢慢深入,分享我的学习成果。
diligentyang
主要研究PHP编程,网站后端开发,网站维护,mysql。会熟练使用CI框架。yii入门级。
展开
-
【Swoole】多进程process
多进程初试用Swoole内置的函数写多进程是一件非常苦逼的事情啊,进程间的通信,异步回调(callback)做的都不是很好。还好有Swoole,拯救了PHP在这方面的薄弱,真是让PHP如虎添翼啊。Swoole,适合中高级程序员,不适合初级程序员,编写者也是冲着这么一个思想来的,他们认为你已经有了调试和看懂原理的能力了,对于我这种小白来说,学习还是非常吃力的。直接来代码吧<?php/*** swo原创 2017-10-23 22:44:36 · 4423 阅读 · 2 评论 -
【Swoole】用swoole简单实现MySQL连接池
MySQL连接池在传统的网站开发中,比如LNMP模式,由Nginx的master进程接收请求然后分给多个worker进程,每个worker进程再链接php-fpm的master进程,php-fpm再根据当前情况去调用其worker进程然后处理PHP,如果需要MySQL,在与MySQL建立连接,这个时候,如果有1000个请求打过来,就需要与MySQL建立1000个连接。如果请求达到万级或者百万级,这时原创 2017-10-21 17:24:00 · 16352 阅读 · 5 评论 -
【WEB】Web性能压力测试工具
webbench原理webbench首先fork出多个子进程,每个子进程都循环做web访问测试。子进程把访问的结果通过pipe告诉父进程,父进程做最终的统计结果(转至百度百科)安装[root@VM_114_93_centos local]# wget http://home.tiscali.cz/cz210552/distfiles/webbench-1.5.tar.gz[root@VM_114_原创 2017-10-20 20:35:41 · 1991 阅读 · 1 评论 -
【PHP】PHP7 下安装并使用 xhprof 性能分析工具
该 xhprof 版本是从 https://github.com/longxinH/xhprof 获取git clone https://github.com/longxinH/xhprof安装 xhprofcd xhprof/extension/phpize./configure makemake install然后在/etc/php.ini中根据情况加入extension=xhprof.原创 2017-05-24 19:09:30 · 14506 阅读 · 4 评论 -
【PHP】实现ajax长轮询
传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上查询最新的数据。这种拉取数据的方式需要很短的时间间隔才能保证数据的精确度,但太短的时间间隔客服端会对服务器在短时间内发送出多个请求。反转AJAX,就是所谓的长轮询或者COMET。服务器与客服端需要保持一条长时间的请求,它使得服务器在有数据时可以返回消息给客户端。这里使用AJAX请求data.PHP页面获得‘success’的值,请求的时间达转载 2017-05-22 13:03:13 · 3609 阅读 · 3 评论 -
【PHP】无限分类
无限分类,是指从一个最高分类开始,每个子分类都可以分出自己的若干个子分类,可以一直分下去,称为无限级分类;比如一棵树,从一根树干开始,分出多个树枝,而这些树枝又分出其他的分支,理论上是可以无限分裂下去的;再比如,一个家庭可以有若干个子女,我们把这些子女看做是第一级分类。而这些子女,又会各自组建自己的家庭,当他们有了自己的后代,就是第二级分类,如果每个家庭都有一个以上的子女,理论上是可以无限分裂的;在转载 2017-05-22 12:46:10 · 1571 阅读 · 0 评论 -
【PHP】PHP中static和self的区别
面试被问到了,无奈,没有答上来,特此总结一下。使用 self:: 或者 __CLASS__对当前类的静态引用,取决于定义当前方法所在的类:使用 static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为“静态绑定”,因为它可以用于(但不限于)静态方法的调用。静态绑定是PHP 5.3.0,增加的一个功能 用于在继承范围内引用静态调用的类简单通俗的来说,self就是写在哪个原创 2017-04-18 14:26:00 · 1172 阅读 · 0 评论 -
【PHP】深入理解ob_flush和flush的区别
ob_flush/flush在手册中的描述, 都是刷新输出缓冲区, 并且还需要配套使用, 所以会导致很多人迷惑…其实, 他们俩的操作对象不同, 有些情况下, flush根本不做什么事情..ob_*系列函数, 是操作PHP本身的输出缓冲区.所以, ob_flush是刷新PHP自身的缓冲区.而flush, 严格来讲, 这个只有在PHP做为apache的Module(handler或者filter)安装的转载 2017-03-27 16:52:29 · 1554 阅读 · 0 评论 -
【PHP】is_callable()与method_exists()函数
在很多产品应用中,我们经常能够看到以下这种用法,它用来检查一个对象里的方法是否存在。<?phpif (method_exists($object, 'SomeMethod')) { $object->SomeMethod($this, TRUE); }?>这段代码的目的比较容易理解,有一个对象为$object,我们想知道它是否有一个方法为SomeMethod,如果有,就调用此方原创 2017-03-23 15:35:00 · 9117 阅读 · 0 评论 -
【PHP】匿名函数
匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。——php.net匿名函数由PHP5.3引入,也称为动态函数,在PHP 5.4后有了进一步扩展。下面是一个简单的匿名函数的例子。<?php$greet = function($name){ printf("Hello原创 2017-03-23 15:09:52 · 1339 阅读 · 0 评论 -
【PHP】缓冲区详解
PHP缓冲区是默认开启的,它的默认参数在php.ini配置文件中,值是4096字节。在其中找到output_buffering配置参数来修改PHP缓冲区的大小。开发者也可以在脚本中通过ob_start()函数手动处理PHP缓冲区机制。这样即便输出内容超过了配置参数的大小,也不会把数据传输给浏览器,ob_start()将PHP缓冲区空间设置到足够大,只有脚本执行结束后或调用ob_end_flush()原创 2017-03-27 20:58:56 · 5541 阅读 · 2 评论 -
【PHP】设计模式--单例模式
单例模式按字面来看就是某一个类只有一个实例,这样做的好处还是很大的,比如说数据库的连接,我们只需要实例化一次,不需要每次都去new了,这样极大的降低了资源的耗费。单例类至少拥有满足以下三个要求:必须拥有一个构造函数,并且必须被标记为private。拥有一个保存类的实例的静态成员变量。拥有一个访问这个实例的公共的静态方法简单的可以按”三私一公”来记忆。<?phpclass Mysql{原创 2017-02-23 17:21:20 · 1303 阅读 · 0 评论 -
【PHP】浅谈生成随机密码的方法
使用PHP开发应用程序,尤其是网站程序,常常需要生成随机密码,如用户注册生成随机密码,用户重置密码也需要生成一个随机的密码。随机密码也就是一串固定长度的字符串,这里我收集整理了几种生成随机字符串的方法,以供大家参考。方法一在 33 – 126 中生成一个随机整数,如 35,将 35 转换成对应的ASCII码字符,如 35 对应 #重复以上 1、2 步骤 n 次,连接成 n 位的密码说明: 该原创 2017-02-08 15:14:16 · 1599 阅读 · 0 评论 -
opcache让php如虎添翼
众所周知php是一种解释型语言,它的执行可分为如下几个流程:Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens)Parsing, 将Tokens转换成简单而有意义的表达式Compilation, 将表达式编译成OpocdesExecution, 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。这样一来的话,对于同一个文件,反复请求,就要不断解析、编译和转载 2017-01-25 10:49:10 · 1470 阅读 · 0 评论 -
从php到浏览器的缓存机制,不得不看
所有的php程序员都知道在php脚本里面执行 echo “1”;访客的浏览器里面就会显示“1”。 但是我们执行下面的代码的时候,并不是显示“1”之后5秒再显示“2”,而是等待5秒后直接显示“12”echo '1';sleep(5);echo '2';这就涉及到几个缓存机制,为了更高的薪水,同学们非常有必要把这个缓存机制学习好。 通常情况下,我们的web应用由以下几个要素构成: php->a转载 2017-01-25 10:32:02 · 2398 阅读 · 0 评论 -
【PHP】PHP命令行下的世界
PHP作为一门web开发语言,通常情况下我们都是在Web Server中运行PHP,使用浏览器访问,因此很少关注其命令行操作以及相关参数的使用,但是,特别是在类Unix操作系统上,PHP可以作为一门脚本语言执行与shell类似的处理任务。php命令行(CLI)参数详解查看PHP的所有命令行参数,使用php -h命令。我们将会对大部分常用的命令行参数进行一一解释,以加深对PHP能力的认识,更加快捷的在原创 2016-12-22 13:07:12 · 1701 阅读 · 0 评论 -
【docker】初识docker
docker经过这么几年的发展,到如今更是火热到即使你没吃过猪也见过猪跑的地步,本节会给大家介绍docker的一些含义,让大家了解docker什么是DockerDocker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。Docker利用Linux核心中的资源分离机制,例如cgroups转载 2016-12-21 17:41:10 · 2332 阅读 · 0 评论 -
【docker】使用docker快速搭建nginx+php开发环境
前面说了一下docker的简介以及在Windows中的安装过程,下面就开始简单说一下如何用docker搭建常用的开发环境,以便读者快速上手。事先准备docker已经下载完毕并正确安装。找一个适合自己的镜像。 阿里镜像中心网易蜂巢时速云DaoClouddocker hub注:docker默认的镜像中心是docker hub由于需要翻墙,大部分资源都在国外,下载速度还相当的慢。国内的就可原创 2016-12-18 15:27:37 · 38700 阅读 · 6 评论 -
【PHP】五分钟教你编写一个实时弹幕网站
由于博主是个忠实的英雄联盟粉丝,所以经常观看一些明星大神的直播。而一谈到直播,肯定会看到满屏幕飘来飘去的弹幕。那么问题来了,这些视频弹幕网站如何做到实时同步的?PHP如何开发一个类似的网站?首先要搞定的是前端页面,最起码得有个框,让弹幕飞起来吧。一想到前台,博主头就大(毕竟我不喜欢去扣前端代码,而且做出来的东西还巨丑)。那咱们就百度一下吧,看看有什么好用的弹幕插件,现在开源的东西那么多。经过搜索,找原创 2016-12-08 19:39:57 · 18376 阅读 · 9 评论 -
【Swoole】简单安装与创建TCP服务器
PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端。Swoole可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏原创 2016-12-07 12:56:59 · 5463 阅读 · 0 评论 -
详解PHP的执行原理和流程
简介 先看看下面这个过程: • 我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的; • PHP通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口); • PHP总共有三个模块:内核、Zend引擎、以及扩展层; • PHP内核用来处理请求、文件流、错误处理等相关操作; • Zend引擎(ZE)用以将源文件转载 2016-11-27 13:01:42 · 13048 阅读 · 3 评论 -
负载均衡——Nginx理论
nginx是什么?nginx是一个强大的web服务器软件,用于处理高并发的http请求和作为反向代理服务器做负载均衡。具有高性能、轻量级、内存消耗少,强大的负载均衡能力等优势。nginx架构?如上官方示意图所示,nginx启动以后,会在系统中以daemon的方式在后台运行,其中包括一个master进程,n(n>=1)个worker进程。其中,master进程用于接收来自外界的信号,并给worker进转载 2016-11-15 20:50:40 · 1999 阅读 · 0 评论 -
你所不知道的 PHP - 自动加载
前言很多的小伙伴在,学习 PHP 的时候最早面对的问题之一就是 require 、 include 和 require_once 、include_once 的相爱相杀。在了解了它们相爱相杀的故事后,往往就开始使用起了框架。框架固然是干活的好工具,但是你知道你平时 new 一个新类的时候,发生了什么吗?有想过为什么我们 遵循规范 就会自动的帮我们做好一切的加载吗? 让我们一切来探索发现其中的奥秘。时转载 2016-11-10 13:51:43 · 2276 阅读 · 0 评论 -
PHP你所不知道的事--双等号
PHP 的双等号比较,不会比较类型,只会比较值是否相等,但是双等号会做一个非常隐蔽的隐式转换。首先先看几个实例代码: <?phpvar_dump( 0 == "a" ); var_dump( "0" == "a" ); 请想想这两个比较的返回结果。答案:第一个返回 true。第二个返回 false。原因:因为 PHP 弱类型的原因,使得开发方便的同时,也使很多人忽略了类型之间的问题,因为 PHP原创 2016-11-09 12:46:17 · 2575 阅读 · 0 评论 -
PHP你所不知道的事--empty
关于 empty 的判断类型,就不赘述了,网上解释有很多。例如:0, ”, false, null 等都会被判定为 true。 这次探讨的是PHP中关于empty 对于对象私有属性的判断。比如:<?phpclass a{ private $a1 = "123"; public function __get($name){ return $this->$name;原创 2016-11-09 12:31:46 · 1872 阅读 · 0 评论 -
PHP内核变量访问宏
使用"zval.type=IS_LONG" 方式可以设置一个变量的类型,不过这样做不是很合适,因为不能预测PHP以后的版本会发生什么变化,有可能在以后的版本中type成员变量的名字歌城type_gc或者其他的名字,那么之前写好的扩展就不能适应这些版本了。为了解决这个问题,PHP内核中提供了一个访问和设置变量类型的方法,具体如下:Z_TYPE(zval) 对应zval结构体的实体Z_TYPE_P(&原创 2016-10-31 11:20:55 · 3214 阅读 · 0 评论 -
PHP变量在内核中的存储方式
PHP是弱类型语言,也就是说一个PHP变量可以保存任何的数据类型。但是PHP是使用C语言编写的,而C语言是强类型的语言,每个变量都有固定类型,不能随意改变变量的类型(可以通过强类型转换改变,不过有可能出现问题),在Zend引擎中是怎么做到一个变量保存任何的数据类型呢?打开Zend/zend.h文件,会发现以下一些结构体:typedef union _zvalue_value { long l原创 2016-10-28 19:30:23 · 4148 阅读 · 0 评论 -
正则表达式的常用模式
正则表达式的常用模式模式(Pattern Modifiers)就是可以改变表达行为的字符,用来关闭或打开模式(Pattern Modifiers)就是可以改变表达行为的字符,用来关闭或打开,下面介绍一些基本修饰符及常用模式。1.忽略大小写模式(i)在此模式下,正则匹配将不区分待匹配内容的大小写,这在HTML里常用。由于HTML本身的容错性很好,对大小写混用有很好的兼容处理能力,也就经常会出现无论是标原创 2016-10-26 13:14:24 · 3245 阅读 · 0 评论 -
正则表达式的逻辑关系
在构造和理解正则表达式的过程中,通常都是由简到繁的过程,如果理解正则表达式内部间的关系,就可以把比较复杂的正则表达式拆分成几个小块来理解,从而帮助消化。正则表达式的逻辑关系正则表达式之间的逻辑关系可以简单地用与、或、非来描述,如表所示。通常来说,正则表达式可以看做这三种逻辑关系的组合。下面分析这三种逻辑。1.与“与” 是正则表达式中最普遍的逻辑关系。一般来说,如果正则表达式中的元素没有任何量词(比如原创 2016-10-25 20:08:22 · 33893 阅读 · 2 评论 -
正则表达式匹配规则
前面已经讲过"*","-","?" 等元字符,它们都有各自的特殊含义。如果想匹配没有预定义元字符的字符集合,或者表达式和已知定义相反,或者存在多种匹配情况,应该怎么办?字符组查找数字、字母、空白很简单,因为已经有了对应这些字符集合的元字符,但是如果想匹配没有预定义元字符的字符集合(比如元音字母a、e、i、o、u),方法很简单,只需要在方括号里列出它们。例如[aeiou] 匹配任何一个英文元音字母,[原创 2016-10-24 18:41:12 · 7799 阅读 · 4 评论 -
正则表达式中的元字符
假设要在一篇文章里查找”he”,可以使用正则表达式”he”。这几乎是最简单的正则表达式,它可以精确匹配这样的字符串:由两个字符组成,前一个字符是”h”,后一个是”e”。通常,处理正则表达式的工具会提供一个忽略大小写的选项,如果选中这个选项,它可以匹配”he”、”HE”、”He”、”hE”这四种情况中的任意一种。但是很多单词里包含”he”这两个连续的字符,比如”her”、”heet”等。用”he”来查原创 2016-10-23 16:23:13 · 5463 阅读 · 5 评论 -
认识正则表达式
正则表达式起源于科学家对人类神经系统工作原理的早期研究。美国新泽西州的Warren McCulloch和出生在美国底特律的Walter Pitts这两位神经生理方面的科学家,研究出一种用数学方式来描述神经网络的新方法,他们创新地将神经系统中的神经元描述成小而简单的自动控制元,从而做出一项伟大的工作革新。后来,数学科学家Stephen Kleene在Warren McCulloch和Walter Pi原创 2016-10-23 15:04:33 · 2157 阅读 · 0 评论 -
PHP 修改和删除XML内容的原理和方法
例如:example.xml<?xml version="1.0" encoding="utf-8"?><root> <book id="1"> <title>title1</title> </book> <book id="2"> <title>title2</title> </book> <book id="3">原创 2016-10-22 15:24:05 · 4158 阅读 · 0 评论 -
PHP DOM创建生成一个XML文件
XML标签内容介绍PHP DOM生成XML方法介绍实例实例1<?php$doc = new DOMDocument('1.0','utf-8');$doc -> formatOutput = true;//格式化输出格式$root = $doc -> createElement('root');//创建一个标签$book = $doc -> createElement('book');//创建一原创 2016-10-21 20:14:29 · 6472 阅读 · 0 评论 -
PHP XML的DOMDocument读取功能
XML常识XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是标准的同用标记语言。Xml是Internet环境中跨平台的,依赖于内容的技术。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML及其简单易于掌握和使用。XML与HTML的设计区别原创 2016-10-21 20:09:06 · 3829 阅读 · 0 评论 -
HTTP协议简述
前言HTTP协议是整个Web的基础,是客户端和服务器端协同工作的基石,要想了解Web的工作原理、优化Web应用,就要完全理解HTTP协议。简单来说,HTTP就是一个基于应用层的通信规范:双方要进行通信,大家都要遵守一个规范——HTTP协议。HTTP协议从WWW服务器传送超文本到本地浏览器,可以使浏览器更加高效。HTTP协议不仅保证计算机正确快速地传输超文本文档,还能确定传输文档中的哪一部分,以及哪部原创 2016-10-18 20:11:28 · 5623 阅读 · 0 评论 -
Memcache线上常见问题(缓存雪崩、缓存无底洞、永久数据被踢)
缓存雪崩现象一般是由于某个节点失效,导致其它节点的缓存命中率下降,缓存中缺失的数据直接去数据库查询,短时间内造成数据库服务器崩溃。或者是由于缓存周期性失效,比如设置每隔6个小时失效一次,那么每6个小时将会有一个请求峰值,严重的话,也会导致数据库崩溃。重启DB后,短期内又被压垮,但缓存又会恢复一点,DB反复重启多次,直至缓存重建完毕,才能恢复稳定。如果小网站,平时访问量不大的情况下,数据缓存的时间不同原创 2016-10-15 11:51:00 · 6795 阅读 · 0 评论 -
Memcached分布式布置方案--一致性Hash分布机制及其改进
一致性Hash分布简介在服务器数量不发生改变时,普通的Hash分布可以很好地运作。当服务器的数量发生改变时,问题就出来了,试想,增加一台服务器时,同一个key经过Hash之后,与服务器取模的结果跟没增加服务器之前的结果会不一样,这就导致之前保存的数据丢失。为了把丢失的数据减少到最少,可以采用一致性hash算法。一致性hash算法分为6个步骤:步骤1:将一个32位整数0~2^32 -1想象成一个环,将原创 2016-10-14 12:42:40 · 3262 阅读 · 1 评论 -
Memcached分布式布置方案--普通Hash分布(余数分布法/取模分布法)
普通Hash分布简介普通Hash分布比较简单,Hash函数大致如下:function mHash($key){ $md5 = substr(md5($key),0,8); $seed = 31; $hash = 0; for($i = 0; $i < 8; $i++){ $hash = $hash*$seed + ord(md5($i));原创 2016-10-12 19:59:20 · 2810 阅读 · 0 评论 -
Memcached的常用操作
Memcached系统类添加memcached服务器并查看服务器的运行状态<?php$m = new Memcached();/*添加memcached服务器,参数为ip和端口号*/$m->addServer('127.0.0.1',11211);/*也可以用如下方式一次性添加多台服务器*//*$array = array( array('127.0.0.1',112原创 2016-10-11 13:28:33 · 2642 阅读 · 0 评论