![](https://img-blog.csdnimg.cn/20200629153938782.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
phper那些年
php开发那些年积累的经验,踩过的坑,悉数在此,与君共勉
码哥说
路漫漫其修远兮
展开
-
hexo结合git搭建blog基础
背景如何不用花钱(服务器,域名)就能拥有自己的blog?gitpage+hexo,实现你的愿望准备工作自行安装git客户端自行注册git账户自行安装npm、node.js操作步骤建库新建一个名为(你的用户名.github.io)的仓库,比如说,如果你的github用户名是username,那么你就新建username.github.io的仓库访问地址就是 http://use...原创 2019-03-14 12:29:24 · 222 阅读 · 0 评论 -
php与设计模式-单例模式
单例模式应用:日志,数据库等公用类主要优点:提供了对唯一实例的受控访问。由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。允许可变数目的实例。主要缺点:由于单例模式中没有抽象层,因此单例类的扩展有很大的困难。单例类的职责过重,在一定程度上违背了“单一职责原则”。滥用单例将带来一些负面问题,如为了节省资源将...原创 2019-03-14 11:45:12 · 89 阅读 · 0 评论 -
php与设计模式-工厂模式
工厂模式创建一个类统一实例化的方法。统一调用,控制。常与单例模式相配合。简单工厂模式Demo: /** *简单工厂又叫静态工厂方法模式,这样理解可以确定,简单工厂模式是通过一个静态方法创建对象的。// 简单工厂模式interface ICar { function run();}class BMWCar implements ICar { public...原创 2019-03-14 11:44:55 · 96 阅读 · 0 评论 -
php与设计模式-装饰器模式
装饰器模式装饰器模式就是对一个已有的结构增加装饰。装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 基本说来, 如果想为现有对象增加新功能而不想影响其他对象, 就可以使用装饰器模式.Demo:abstract class Beverage{ public $_name; abstract publ...原创 2019-03-14 11:44:35 · 192 阅读 · 0 评论 -
php与设计模式-观察者模式
观察者模式在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。Demo://抽象通知者 abstract class Subject { private $observers = array(); public function Attach(O...原创 2019-03-14 11:44:15 · 116 阅读 · 0 评论 -
php与设计模式-适配器模式
适配器模式将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原来由于接口不兼容而不能一起工作的那此类可以一起工作【适用性】你想使用一个已经存在的类,而它的接口不符合你的需求你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作你想使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口(仅限于对象适配器)...原创 2019-03-14 11:43:51 · 107 阅读 · 0 评论 -
php与设计模式-原型模式
原型模式通过复制已经存在的对象来创建新对象有的时候创建一个对象有很多步骤才算是完成一个完整的创建过程,我要再创建一个的话,还得从头开始,不如复制,使用原型模式实现Demo:interface Potrotype{ public function copy();}//通过在原型类中加一个copy方法,使得这个原型类的实例可以被复制class Demo implements Po...原创 2019-03-14 11:43:29 · 78 阅读 · 0 评论 -
php与设计模式-建造者模式
建造者模式将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示Demo//用户类class UserInfo{ protected $_userName; protected $_userAge; protected $_userHobby; public function setUserName($userName) { ...原创 2019-03-14 11:43:11 · 85 阅读 · 0 评论 -
php与设计模式-门面模式
门面模式提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。Demo/**阿里股票* Class Ali*/ class Ali { function buy() { echo "买入阿里股票<br/>"; } function sell() { ...原创 2019-03-14 11:42:52 · 118 阅读 · 0 评论 -
php与设计模式-代理模式
代理模式为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。Demo/** * Interface Subject 抽象主题角色 * * 定义RealSubject和Proxy共同具备的东西 */interface Subject{ public function say...原创 2019-03-14 11:42:30 · 75 阅读 · 0 评论 -
php与设计模式-七大原则
设计模式设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。七大原则单一职责:一个接口或类应该只有一种职能一个类只完成它应该完成的职责Demo:class Phone{ //拨号 ...原创 2019-03-14 11:45:38 · 287 阅读 · 0 评论 -
php大文件上传配置
nginx配置nginx.conf:client_max_body_size 50m; //文件大小限制,默认1mclient_header_timeout 1m; client_body_timeout 1m; proxy_connect_timeout 60s; proxy_read_timeout 1m; proxy_send_time...原创 2019-03-14 11:46:13 · 106 阅读 · 0 评论 -
hexo结合git搭建blog进阶
前提hexo有多个配置文件站点配置文件:在站点根目录下的_config.yml主题配置文件:在对应主题文件内的_config.yml安装配置next主题//切换到你的站点目录cd your-hexo-site//下载主题git clone https://github.com/iissnan/hexo-theme-next themes/next//修改站点配置_config...原创 2019-03-14 12:28:57 · 368 阅读 · 0 评论 -
protobuf安装和嵌套定义
背景博主因为公司项目原因,客户端和服务端通信采用了protobuf协议,关于protobuf协议,不明白的自行百度,这个协议因其高效安全性,还是蛮常见的。博主也是第一次安装使用,定义协议文件时发现不知道如何嵌套定义结构了,摸索。安装建议直接参考git上的README下载https://github.com/google/protobuf,解压需要以下依赖工具autoconf auto...原创 2019-03-14 11:58:56 · 1376 阅读 · 0 评论 -
web常见攻防
背景博主早年从事web安全相关的工作,近日得闲,简单梳理几个常见的web安全问题。XSS首先说下最常见的 XSS 漏洞,XSS (Cross Site Script),跨站脚本攻击,因为缩写和 CSS (Cascading Style Sheets) 重叠,所以只能叫 XSS。XSS 的原理是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面...原创 2019-03-14 11:57:49 · 697 阅读 · 0 评论 -
docker-yaf环境
背景博主多年一直使用vm虚拟机开发(一套环境走天下),近日听闻docker这门技术,发现好处不少极其轻量体积小运行速度极快资源丰富,你能想到的容器别人都共享了部署简单,本地和线上的环境不一致引起的问题再也不用担心。玩转之。安装centos7下安装环境检测目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在 CentOS 7 上,要求系统为64位、...原创 2019-03-14 11:57:20 · 645 阅读 · 0 评论 -
apache虚拟域名配置
背景项目开发时,本地开发环境常常都会尽量和线上环境一致,那么问题来了,线上的每个模块往往都有域名,那么本地如何模拟这些呢?幸好,web服务软件早以想到这个问题了,无论apache还是nginx,都能轻松的配置。博主使用的时apache,所以就讲下apache的虚拟域名配置。apache虚拟域名配置找到apache安装目录下的 httpd.conf文件,编辑//先指定总根目录Docume...原创 2019-03-14 11:56:59 · 297 阅读 · 0 评论 -
cgi-fastcgi-fpm概念区别
在搭建 LAMP/LNMP 服务器时,会经常遇到 PHP-FPM、FastCGI和CGI 这几个概念。如果对它们一知半解,很难搭建出高性能的服务器。接下来我们就以图形方式,解释这些概念之间的关系。基础在整个网站架构中,WebServer(如Apache)只是内容的分发者。举个栗子,如果客户端请求的是 index.html,那么WebServer会去文件系统中找到这个文件,发送给浏览器,这里分发...原创 2019-03-14 11:49:26 · 144 阅读 · 1 评论 -
https通信原理
http简介HTTP通信过程:三大阶段:建立连接阶段,tcp三次握手数据传输阶段,http明文传输释放连接阶段,tcp四次挥手HTTP请求和响应的7个步骤:HTTP三大弊端:被监听http通信都是明文,数据在客户端与服务器通信过程中,任何一点都可能被劫持被伪装http通信时,无法保证通行双方是合法的,通信方可能是伪装的。被篡改hacker中间篡改数据后,接收方并不知...原创 2019-03-14 11:48:57 · 294 阅读 · 0 评论 -
nginx配置文件解读
nginxNginx是一款开源代码的高性能HTTP服务器和反向代理服务器,同时支持IMAP/POP3/SMTP代理服务Nginx由内核和模块组成,完成工作是通过查找配置文件将客户端请求映射到一个locationblock(location是用于URL匹配的命令),location配置的命令会启动不同模块完成工作。Nginx模块分为核心模块,基础模块和第三方模块。核心模块:HTTP模块、EV...原创 2019-03-14 11:47:08 · 287 阅读 · 0 评论 -
php-fpm配置文件详解
php-fpm约定几个目录/usr/local/php/sbin/php-fpm/usr/local/php/etc/php-fpm.conf/usr/local/php/etc/php.iniphp-fpm的启动参数#测试php-fpm配置/usr/local/php/sbin/php-fpm -t/usr/local/php/sbin/php-fpm -c /usr/local...原创 2019-03-14 11:46:36 · 313 阅读 · 0 评论 -
php与设计模式-合成模式
合成模式合成模式把部分和整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和有他们复合而成的合成对象同等看待。用户复制文件及文件夹都是同样的操作。Demo/*** 抽象组件角色*/interface Component { /** * 返回自己的实例 */ public function getComposite(); /** ...原创 2019-03-14 11:42:10 · 125 阅读 · 0 评论 -
php与设计模式-享元模式
享元模式享元模式使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。Demo/**所有享元父接口角色* Interface IBlogModel*/interface IBlogModel{ func...原创 2019-03-14 11:41:51 · 86 阅读 · 0 评论 -
php与设计模式-桥模式
桥模式用于将抽象和实现解耦,使得两者可以独立地变化。模拟毛笔:现需要提供大中小3种型号的画笔,能够绘制5种不同颜色,如果使用蜡笔,我们需要准备3*5=15支蜡笔,也就是说必须准备15个具体的蜡笔类。而如果使用毛笔的话,只需要3种型号的毛笔,外加5个颜料盒,用3+5=8个类就可以实现15支蜡笔的功能。实际上,蜡笔和毛笔的关键一个区别就在于笔和颜色是否能够分离。即将抽象化(Abstractio...原创 2019-03-14 11:41:09 · 276 阅读 · 0 评论 -
sso单点登录解决方案
单点登录概念单点登录的概念,通俗来讲就是,用户只需登录一次,就可以在相关联的各个系统间畅行无阻。产生的技术背景主要是针对有多个子系统的大公司,可想而知,绝不可能要求用户每进入一个子系统就重新登录一次。解决方案针对不同的应用场景,有不同的解决方案。大致有如下两种:子系统不涉及跨域有个公司A,它有个顶级域名www.a.com,同时它有多个子系统部署在a.a.com,b.a.com等等,这种...原创 2019-03-14 11:35:42 · 767 阅读 · 0 评论 -
客户端服务端消息推送模块设计
背景业务需要,客户端上需要加上消息推送模块,大概功能就是用户充值或者触发了一些操作,服务器需要主动推送通知到对应的用户。技术选型常用的消息推送,技术上大致分为两类1、客户端主动拉取类采用这种的话,服务端开发比较轻松,只需要提供一个查询api,客户端ajax定时拉取即可,稍微好点的ajax长轮询拉取。弊端也很明显,浪费了很多请求,增加了服务端压力。2、服务端主动推送类真正意义上的服务端...原创 2019-03-14 11:35:19 · 889 阅读 · 0 评论 -
php延迟静态绑定
问题背景某天。新来的小A问了我一个问题 :子类重载了父类的方法,父类如何调用呢?案例<?phpclass base{}class aClass extends base{ public static function create(){ return new aClass(); }}class bClass extends base{ ...原创 2019-03-14 11:34:49 · 91 阅读 · 0 评论 -
php错误与异常
php错误与异常set_error_handler()和trigger_error()E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、 E_COMPILE_ERROR、E_COMPILE_WARNING是不会被这个句柄处理的,也就是会用最原始的方式显示出来。不过出现这些错误都是编 译或PHP内核出错,在通常情况下不会发生。使用set_erro...原创 2019-03-14 11:34:25 · 313 阅读 · 0 评论 -
php-zend-debug配置
背景很多ide都支持打断点开发,zend如何折腾呢?zend断点调试phpChrome安装好Xdebug Helper扩展,并且配置IDKEYphp.ini配置好Xdebug[Xdebug] xdebug.var_display_max_children=128xdebug.var_display_max_data=512xdebug.var_display_max_depth=...原创 2019-03-14 11:34:01 · 142 阅读 · 0 评论 -
php discuz插件开发
页面嵌入demo问题1.discuz后台没有设计新插件!解决方案:在config\config_global.php 最下面添加 $_config[‘plugindeveloper’] = 2; 刷新后台应用即可问题2.怎么知道discuz在那些点设置了钩子呢?设置完成1后 工具->清理缓存 然后刷新下页面就出现好多 类似string global_usernav_extra1的东...原创 2019-03-14 11:33:24 · 681 阅读 · 0 评论 -
php实用函数
超实用PHP函数总结整理PHP加密解密PHP加密和解密函数可以用来加密一些有用的字符串存放在数据库里,并且通过可逆解密字符串,该函数使用了base64和MD5加密和解密。function encryptDecrypt($key, $string, $decrypt){ if($decrypt){ $decrypted = rtrim(mcrypt_decrypt(MC...原创 2019-03-14 11:32:59 · 189 阅读 · 0 评论 -
SEO实践-持续更新
背景博主blog迁移到新站,引入了百度的被动JS和主动推链工具,实近半月,发现百度上索引寥寥无几。于是,自查优化之。方案非技术方案原创内容百度爬虫对原创内容友好,所以有文采的兄弟尽量自己写文章,实在不行参考别人的文字数量也不要超过总篇幅的30%更新勤快保持有规律的更新文章,千万不要学博主,一年不更新,更新管一年。技术方案合理的内/外链内链:爬虫会严格遵循链接依层次爬取的...原创 2019-03-14 11:32:25 · 279 阅读 · 0 评论 -
ApacheMPM
apacheMPM就最新版本的Web服务器Apache(版本是Apache 2.4.10,发布于2014年7月21日)来说,一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式。它们分别是prefork,worker和event,它们同时也代表这Apache的演变和发展。查看我们Apache的模式,可以使用httpd -V命令来查看:Shell# h...原创 2019-03-14 11:31:38 · 470 阅读 · 0 评论 -
php优化36计
代码优化36计不要使用相对路径常常会看到:require_once('../../lib/some_class.php');该方法有很多缺点:它首先查找指定的php包含路径, 然后查找当前目录.因此会检查过多路径.如果该脚本被另一目录的脚本包含, 它的基本目录变成了另一脚本所在的目录.另一问题, 当定时任务运行该脚本, 它的上级目录可能就不是工作目录了.因此最佳选择是使用绝对路...原创 2019-03-14 11:36:12 · 206 阅读 · 0 评论 -
php与设计模式-备忘录模式
备忘录模式又叫做快照模式或Token模式,在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。Demo<?php /** * Created by PhpStorm. */ //游戏角色 class GameRole { #region 游戏角色状态属性(生...原创 2019-03-14 11:36:32 · 136 阅读 · 0 评论 -
php与设计模式-策略模式
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。Demo:<?php abstract class baseAgent { //抽象策略类 abstract function PrintPage(); } //用于客户端是IE时调用的类(环境角色) class ieAgent extends ba...原创 2019-03-14 11:40:43 · 97 阅读 · 0 评论 -
php与设计模式-迭代器模式
迭代器模式迭代器模式是遍历集合的成熟模式,迭代器模式的关键是将遍历集合的任务交给一个叫做迭代器的对象,它的工作时遍历并选择序列中的对象,而客户端程序员不必知道或关心该集合序列底层的结构。Demo<?php //抽象迭代器 abstract class IIterator { public abstract function First(); public ...原创 2019-03-14 11:40:23 · 115 阅读 · 0 评论 -
php与设计模式-模板方法模式
模板方法模式将部分逻辑以具体方法以及具体构造形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。Demo<?php /** * Created by PhpStorm-> //抽象模板类 abstract cla...原创 2019-03-14 11:39:56 · 94 阅读 · 0 评论 -
php与设计模式-中介者模式
中介者模式用一个中介者对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。Demo<?php /** * Created by PhpStorm. //中介者接口:可以是公共的方法,如Change方法,也可以是小范围的交互方法。 //同事类定义:比如,每个具体同事类都应该知道中介者对象,也...原创 2019-03-14 11:39:32 · 113 阅读 · 0 评论 -
php与设计模式-访问者模式
访问者模式表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。Demo<?php /*** Created by PhpStorm.*/ /*男人这本书的内容要比封面吸引人;女人这本书的封面通常比内容更吸引人男人成功时,背后多半有一个伟大的女人;女人成功时,背后多半有一个失败的男人男人失败时,闷头喝酒,谁也不用劝;女人失...原创 2019-03-14 11:38:26 · 124 阅读 · 0 评论