PHP
学习笔记666
这个作者很懒,什么都没留下…
展开
-
从零开始打造自己的框架 - 类的自动加载
接下来我们希望完成一个“自动加载类”的动能,我们把这个功能放到Imooc这个基础类当中。 core\imooc.php:<?phpnamespace core;class Imooc{ public static $classMap = array(); static public function run() { p('ok'); $原创 2016-12-25 20:54:51 · 1841 阅读 · 0 评论 -
Socket学习 - 多进程补充
单进程要学习socket多进程,先来看看什么是单进程。服务端server.php代码如下:<?php$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);socket_bind($socket,'10.211.55.13',9090) or die('error');socket_listen($socket,5);while(true){原创 2017-02-07 14:46:14 · 510 阅读 · 0 评论 -
WorkerMan学习篇:准备和热身
环境要求: http://www.workerman.net/install workerman对php环境的要求是: 1、PHP CLI>=5.4,可以运行命令 php -v 查看版本 2、Linux系统要求php安装了posix和pcntl扩展 Linux系统可以在命令中运行 curl -Ss http://www.workerman.net/check.php |原创 2017-02-07 16:11:27 · 6046 阅读 · 1 评论 -
Socket学习 - PHP+Socket多进程处理请求学习
前面我们写的Socket代码其实都是单进程的。这导致如果有一个连接很繁忙,那么后面的连接都要等待。于是多进程这个时候就重要了0.回顾 Socket学习 - 开启Socket学习之旅 Socket学习 - 从这个角度学http协议就很简单了 Socket学习 - tcp协议速度入门和http协议的区别 Socket学习 - 撕开websocket神秘的外衣 Socket学习 - 撕开远程原创 2017-01-17 11:30:26 · 4691 阅读 · 3 评论 -
Socket学习 - php+Socket多进程处理速学:防止子进程无限增加
上节课我们讲到如何使用多进程方式来同时处理不同的客户端请求,但是问题也来了:子进程会不断新增。我们该怎么控制这些子进程呢?1.子进程不断新增问题 我们用浏览器访问http://127.0.0.1:9090, 如果不断的刷新。那么子进程会不断新增,在终端用ps -ef |grep server.php |grep -v grep 命令查看。 注:server.php就是我们socket服务端程序原创 2017-01-17 12:54:12 · 1459 阅读 · 1 评论 -
WorkerMan学习篇:连接mysql时到底发生了什么鬼
上节课(http://blog.csdn.net/github_26672553/article/details/54910338)我们已经了解了,使用workerman创建一个HTTP协议的web服务。问题:我们使用php或java来连接数据库的时候,是不是也是通过类似的原理来连接的呢?连接mysql有很多种协议,如果是远程连接是通过tcp,如果是本机一般是socket。1.回顾<?php//本机原创 2017-02-08 15:53:35 · 6281 阅读 · 0 评论 -
WorkerMan学习篇:websocket+workerman聊天功能设计(一):简单认证
初步设计如下1、websocket客户端连接服务端 是无脑的(这很重要) 2、服务端需要记录连接进来的所有客户端(方便日后统一广播消息) 3、服务端肯定能获得客户端ip。为此我们还需要客户端加入用户昵称来区分 4、服务端可以无脑的向客户端发送消息。但是客户端怎么区分? 于是我们自己定义一个格式来完成。 4.1、普通消息我们用msg:xxx。如果开头是msg:那么后面的内容统统认定为普通消息原创 2017-02-08 20:34:21 · 12085 阅读 · 4 评论 -
WorkerMan学习篇:websocket+workerman聊天功能(二):同步在线用户列表
上节课(http://blog.csdn.net/github_26672553/article/details/54932788)我们已经完成了聊天功能的权限(用户名必须)认证。 这节课我们来完成,websocket客户端页面中『所有用户』显示出,连接到我们服务端的所有客户端用户。1.在服务端验证用户登录后,就把保存的客户端信息,发生给客户端//一旦有用户登录就把保存的客户端信息发送过去$co原创 2017-02-09 14:03:05 · 8533 阅读 · 0 评论 -
ActiveMQ - 部署
ActiveMQ环境部署下载地址:http://activemq.apache.org/activemq-5143-release.html 下载apache-activemq-5.14.3-bin.tar.gz。手册:http://activemq.apache.org/getting-started.html一、ActiveMQ需要JDK的支持 详见此文: http://blog.csdn原创 2017-02-27 20:16:54 · 2199 阅读 · 0 评论 -
workerman-json-rpc:使用workerman快速进行RPC开发的套路
之前我们已经简单的了解了一下『远程调用PRC』 1.Socket学习 - 撕开远程调用的逼格外衣(上) 2.Socket学习 - 撕开远程调用的逼格外衣(下)超简易仿制一个RPC客户端 二、今天来学习一下workerman这个框架上的其他应用『Json Rpc远程调用框架』, 下载地址:http://www.workerman.net/workerman-jsonrpc 介绍: JSO原创 2017-02-20 13:47:08 · 3263 阅读 · 0 评论 -
SOAP-ERROR: Parsing WSDL: Couldn't load from 'https:
这个问题,先查看是否安装下面几个模块:SOAPphp_opensslopensslcurl如果都安装了,可能还需要安装php-xmlyum install php-xml还有可能是没有安装libxmlyum install libxml*原创 2017-02-07 09:42:46 · 1946 阅读 · 0 评论 -
Socket学习 - 撕开远程调用的逼格外衣(下)超简易仿制一个RPC客户端
上节课我们学习了基本的“远程调用”http://blog.csdn.net/github_26672553/article/details/54342485 套路如下: 1、服务端创建socket服务,并监听客户端连接 2、利用HTTP协议和自己“胡乱”的协议内容来约定调用的类 3、服务端执行的结果,通过socket发送给客户端这节课我们要来拓展一下客户端市面上常见的客户端代码 比如服务端原创 2017-01-11 14:00:47 · 1022 阅读 · 0 评论 -
从零开始打造自己的框架 - 路由类
在core目录下,新建一个名为lib的子目录,然后把我们前面写个route.php这个文件移动到这个目录下。 因为route类文件路径修改,所以在实例化的时候:new \core\lib\route();然后我们来完善route.php:<?phpnamespace core\lib;class Route{ public $controller; // 控制器 publi原创 2016-12-26 11:24:39 · 837 阅读 · 0 评论 -
类自动载入、开发一个PSR-0的基础框架
类自动载入最早的php项目都是通过手动include或者require来载入依赖的文件的,当项目越来越大,依赖越来越多,这样开发就很不方便了。<?phprequire 'Test1.php';require 'Test2.php';Test1::test();Test2::test();PHP5.2就提供了类的自动载入功能。<?phpTest1::test();Test2::test();f原创 2016-12-26 14:51:45 · 391 阅读 · 0 评论 -
工厂模式、单例模式、注册树模式
三种基本设计模式 1、工厂模式:工厂方法或者类生成对象,而不是在代码中直接new 2、单例模式:使某个类的对象仅允许创建一个 3、注册模式:全局共享和交换对象工厂模式:<?phpnamespace IMooc;class Factory{ static function createDatabase() { $db = new Database();原创 2016-12-26 16:01:32 · 969 阅读 · 0 评论 -
Socket学习 - 开启Socket学习之旅
socket(注入tcp协议)IP地址 + 协议(TCP/UDP) + 端口 == 我们称之为套接字有了“套接字”,我们就能区分谁是谁。 我们要注意几点: 1、首先我们的网要通。宽带欠费了,你还想连接到外面去那是不可能的。 2、就像刚才打电话那样。不管你是接电话的人(服务端),还是打电话的人(客户端),你都得有个“电话机”(很多人以为只要服务端有电话机) 3、接电话的人(服务端)可以同时原创 2016-12-26 09:47:04 · 2881 阅读 · 3 评论 -
Socket学习 - 从这个角度学http协议就很简单了
回顾前面:Socket学习 - 开启Socket学习之旅<?php$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP); // 购买电话机socket_bind($socket,'127.0.0.1',9090); // 绑定电话机socket_listen($socket,5); // 开机while(true){ $clie原创 2017-01-09 13:46:58 · 1456 阅读 · 0 评论 -
Socket学习 - tcp协议速度入门和http协议的区别
前面我们做了这样一件事1、用打电话来描述了PHP构建socket服务端和客户端的方法 2、用浏览器来测试我们的服务端 3、期间我们发现浏览器和服务端采用了HTTP协议进行沟通,且如果我们的服务端不支持HTTP协议也不要紧(大不了响应出错呗)这里我们来了解一下网络7层模型 七层模型:使不同的系统,不同的网络之间实现可靠的通讯。 著名的三次握手第一次握手:客户端发送syn包(syn=j)到服务端原创 2017-01-09 14:23:27 · 2067 阅读 · 0 评论 -
Socket学习 - 撕开websocket神秘的外衣
websocket,我们可以理解嵌入在浏览器中的socket客户端 那么问题来了 1、它有专门的协议? 2、是否和HTTP协议一样,和服务端交互 3、服务端代码怎么写? 1.客户端websocket_client.html:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title<原创 2017-01-09 16:29:49 · 2379 阅读 · 0 评论 -
PHP的钩子实现解析
PHP编程的钩子实现,示例讲解和解释它们的作用,写了一个样板的钩子实现钩子是编程里一个常见的概念,非常的重要。它使得系统变得非常容易拓展(而不用理解其内部的实现机理,这样可以减少很多工作量)。只要有一个钩子样本,能很容易仿照第一个钩子快速的编写第二个钩子,这里对钩子进行一个简单的理解。下面是一个最简单的代码例子:<?phpclass Test{ public static functio转载 2017-01-10 14:46:10 · 8116 阅读 · 0 评论 -
Socket学习 - 撕开远程调用的逼格外衣(上)
撕开远程调用的逼格外衣(上) 很多同学一直不明白为啥我们要先学socket基础。那么当我们看到这节远程调用撕逼课时就明白了。这节课我们先用简单的代码来搞明白原理今天我们来讲“远程调用”英语:Remote Procedure Call 也就是大家一听就会觉得很神秘的RPC调用。 神秘在什么地方? 1、本地某机器调用,竟然在远程某机器执行 2、某些调用形式,用浏览器访问还能看到xml描述原创 2017-01-11 13:14:04 · 1187 阅读 · 0 评论 -
工厂模式结合RPC进行多节点数据调用的代码套路
比如我有2个业务类:GameNews和SportsNews。 这我们网站的2个频道,这2个频道很可能都是不同团队来开发维护的。代码示例:<?phpclass SportsNews{ static function loadNews($id) { return ['news_id'=>$id,'news_title'=>'体育新闻','news_time'=>'20原创 2017-02-20 17:13:18 · 554 阅读 · 0 评论 -
WorkerMan学习篇:websocket+workerman聊天功能(三):点对点发送消息模拟
1.WorkerMan学习篇:准备和热身 2.WorkerMan学习篇:连接mysql时到底发生了什么鬼 3. WorkerMan学习篇:websocket+workerman聊天功能设计(一):简单认证 4.WorkerMan学习篇:websocket+workerman聊天功能(二):同步在线用户列表上节课我们已经完成了同步在线用户列表,因为我们是使用IP作为一个唯一判断标志,所以我们的一原创 2017-02-14 16:25:37 · 9691 阅读 · 1 评论 -
php处理静态页面:页面设置缓存时间
通过php去生成一个纯静态的页面: http://blog.csdn.net/github_26672553/article/details/72876752问:如何触发系统生成纯静态化页面? 1.页面添加缓存时间 2.手动触发的方式 3.crontab定时扫描程序我们来实现方案一:页面添加缓存时间 用户请求页面 => 页面是否过期 => => 否(获取静态页面)原创 2017-06-06 12:51:47 · 2198 阅读 · 0 评论 -
PHP经典设计模式 - 依赖注入
依赖注入的实质就是把一个类不可能更换的部分和可更换的部分分离开来,通过注入的方式来使用,从而达到解耦的目的。一个数据库连接类:class Mysql{ private $host; private $prot; private $username; private $password; private $db_name; // 构造方法 public function __转载 2017-06-10 09:38:39 · 471 阅读 · 0 评论 -
__call()方法实现委托
委托是指一个对象转发或者委托一个请求给另一个对象,被委托的一方替原先对象处理请求。这类似于继承,和在子类中调用父类的方法有点儿相似。 但在继承时,父类与子类的关系是固定的,而使用委托则可以在代码运行时改变使用的对象,这意味着委托比继承具有更大的灵活性。1、创建一个类来将Person类的信息格式化并输出:class PersonWriter{ public function writeName(原创 2017-08-02 13:43:57 · 283 阅读 · 0 评论 -
PHP消息队列实现及应用:消息队列概念介绍
PHP消息队列实现及引用在互联网项目开发者经常会遇到『给用户群发短信』、『订单系统有大量的日志需要记录』或者在秒杀业务的时候服务器无法承受瞬间并发的压力。 这种情况下,我们怎么保证系统正常有效的运行呢?这个时候,我们可以引入一个叫『消息队列』的概念来解决上面的需求。消息队列的概念、原理和场景在高并发的时候,程序往往无法做到及时的处理。我们引入一个中间的系统,来进行分流和减压。 所以从本质上讲:消原创 2017-10-10 16:39:49 · 6718 阅读 · 0 评论 -
PHP消息队列实现及应用:队列处理订单系统和配送系统
解耦案列:队列处理 订单系统和配送系统我们在前面了解过消息队列的使用场景: http://blog.csdn.net/github_26672553/article/details/78194336这里,我们要来处理其中一个场景:系统的解耦。在电商项目中,当客户提交了一个订单之后,客户在个人中心可以看到订单处于配送中。 这个时候就要参与进来一个系统,叫做『配送系统』。如果我们在做架构的时候,把订原创 2017-10-10 17:15:38 · 4990 阅读 · 0 评论 -
PHP基础巩固
变量1、变量检测isset可以检测变量是否存在。注意:对于NUll,isset也返回false。<?phpif(isset($p)){ echo '存在';}else{ echo '不存在'; //不存在}// NULL是指没有值,也没有类型$a = null;if(isset($a)){ echo '存在';}else{ echo ...原创 2018-10-06 15:50:15 · 433 阅读 · 0 评论 -
define和const的区别
常量默认大小写敏感,通常常量的标识符总是大写的。可以用define()函数来定义常量,在php5.3.0之后,可以使用const关键字在类定义的外部定义常量,先前版本const关键字只能在类(class)中使用。常量只能包含标量数据 (boolean,integer,float,string)。可以定义resource常量,但应该尽量避免。定义常量define("PI", 3.14);e...原创 2018-10-07 11:40:09 · 3208 阅读 · 0 评论 -
php中self与static的区别
1、假设我们有个Car类,它有2个方法:model()和getModel()。class Car{ public function model(){ //这里我们使用了关键字self self::getModel(); } protected function getModel(){ echo 'I am car'; ...转载 2018-09-29 23:10:30 · 302 阅读 · 0 评论 -
php实现页面纯静态
1.先来看下面代码index.php<?php// 准备要展示到网页的数据$data = array( array('id'=>1,'msg'=>'hello java'), array('id'=>2,'msg'=>'hello php'), array('id'=>3,'msg'=>'hello python'),);// 渲染到模板// 实际项目一般是在html原创 2017-06-06 11:53:25 · 1659 阅读 · 0 评论 -
php实现页面静态化原理
1,file_put_contents()函数 2,使用php内置缓存机制实现页面静态化:output_bufferingphp中output_buffering内置函数,简称ob函数,主要会用到的下面几个:ob_start #打开输出控制缓冲ob_get_contents #获取输出缓冲区内容ob_clean #清空输出缓冲区ob_get_clean #获取当前缓冲区内容,然后清空当原创 2017-06-05 21:43:11 · 806 阅读 · 0 评论 -
RBAC打造通用web管理权限01 - RBAC介绍
RBAC架构RBAC功能模块权限控制流程原创 2017-02-26 10:41:52 · 1133 阅读 · 0 评论 -
RBAC打造通用web管理权限02 - 数据库设计
CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL DEFAULT '' COMMENT '姓名', `email` varchar(30) NOT NULL DEFAULT '' COMMENT '邮箱', `is_admin` tinyi原创 2017-02-26 10:49:40 · 1254 阅读 · 0 评论 -
好玩的基于状态的责任链审批模式
我们开发网站,除了前后,还有后台,除了内容管理,很多时候要涉及到『审批』。 比如:商务部要做个专题推广活动,活动中需要调用一些商品做优惠。 1、商务部编辑先写文案 2、商务部领导审批文案内容 3、商品部领导需要审批商品的价格和库存(万一没货呢) 4、后面可能还有好多领导要审批(带扩展)今天我们要引入的模式是『责任链模式』 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来,形原创 2017-03-20 21:24:53 · 456 阅读 · 0 评论 -
php中的冒泡和快速排序算法
1、系统内置排序函数<?php//排序算法$arr = [3,1,7,9,5,4];sort($arr);print_r($arr);Array( [0] => 1 [1] => 3 [2] => 4 [3] => 5 [4] => 7 [5] => 9)上面是对简单数据类型的排序,那么给类对象排序呢?class User{ publ原创 2017-03-14 10:11:59 · 669 阅读 · 0 评论 -
PHP实现单例模式(单态模式)
<?phpclass Foo{ //这个静态属性,用来保存本类对象(那一个唯一的对象) private static $obj = null; //构造方法,被私有化了,所以,外面不能直接new本类 private function __construct() { //echo '1'; } //禁止在外面克隆本类对象原创 2017-03-14 10:53:57 · 872 阅读 · 0 评论 -
PHP中Session原理以及和Cookie的关系
<?phpecho 'test';就这样一个简单的php文件,我们来查看cookie的变化。 打开浏览器调试工具后,先清除之前的cookie,然后反复刷新页面,发现都没有新的cookie。我们把test.php 代码修改如下:<?phpsession_start();再去浏览器调试工具里查看有没有cookie? 可以看到,现在就有了(反复刷新浏览器,value值也不变化)。思考: 我们原创 2017-03-14 14:28:51 · 1516 阅读 · 0 评论 -
PHP中使用ActiveMQ实现消息队列
前面我们已经学了如何部署ActiveMQ, 我们知道通过ActiveMQ的一个管理后台可以查看任务队列。今天 用PHP来操作ActiveMQ,我们可以借助一个第三方扩展。 下载:composer require fusesource/stomp-php:2.0.*然后新建test.php:<?phprequire __DIR__.'/vendor/autoload.php'; //引入自动加载原创 2017-03-14 16:28:34 · 20038 阅读 · 1 评论