php高级应用
峰之流觞
这个作者很懒,什么都没留下…
展开
-
谈谈多线程和异步
异步操作的本质 所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础。 熟悉电脑硬件的朋友肯定对DMA这个词不陌生,硬盘、光驱的技术规格中都有明确DMA的模式指标,其实网卡、声卡、显卡也是有DMA功能的。DMA就是直 接内存访问的意思,也就是说,拥有DMA功能的硬件在和内存进行数据交换的时候可以不消耗CPU资源。只要CPU在发起数据传输时发送转载 2017-07-10 18:35:25 · 205 阅读 · 0 评论 -
PHP实现文本快速查找 - 二分查找法
起因先说说事情的起因,最近在分析数据时经常遇到一种场景,代码需要频繁的读某一张数据库的表,比如根据地区ID获取地区名称、根据网站分类ID获取分类名称、根据关键词ID获取关键词等。虽然以上需求都可以在原始建表时,通过冗余数据来解决。但仍有部分业务存的只是关联表的ID,数据分析时需要频繁的查表。所读的表存在共同的特点数据几乎不会变更数据量适中,从一万到100多万,如果全加载到内转载 2018-02-05 17:15:44 · 608 阅读 · 0 评论 -
PHP的运行机制与原理(底层)
说到php的运行机制还要先给大家介绍php的模块,PHP总共有三个模块:内核、Zend引擎、以及扩展层;PHP内核用来处理请求、文件流、错误处理等相关操作;Zend引擎(ZE)用以将源文件转换成机器语言,然后在虚拟机上运行它;扩展层是一组函数、类库和流,PHP使用它们来执行一些特定的操作。比如,我们需要mysql扩展来连接MySQL数据库;当ZE执行程序时可能会需要连接若干扩展,这时ZE将控制权交...转载 2018-03-02 09:33:09 · 159 阅读 · 0 评论 -
深入理解php内核
原文:http://www.php-internals.com/book/目录第一部分 基本原理第一章 准备工作和背景知识第一节 环境搭建第二节 源码布局及阅读方法第三节 常用代码第四节 小结第二章 用户代码的执行第一节 PHP生命周期第二节 从SAPI开始Apache模块嵌入式Fastcgi第三节 Zend引擎与脚本执行词法分析和语法分析opcode附:找到Opcode具体实现第四节 小结第三章...转载 2018-04-07 15:42:49 · 1960 阅读 · 0 评论 -
php cli模式下获取参数的方法
php在cli模式下接收参数有两种方法1.使用argv数组 2.使用getopt方法 1.使用argv数组例如:需要执行一个php,并传递三个参数(type=news, is_hot=1, limit=5) 创建test.php<?phpprint_r($argv);?>123在命令行执行php test.php news 1 51输出:Array( [0] =>...转载 2018-04-01 21:11:53 · 2940 阅读 · 0 评论 -
PHP flock 文件锁详细介绍
flock — 轻便的咨询文件锁定 说明 bool flock ( int $handle , int $operation [, int &$wouldblock ] ) PHP 支持以咨询方式(也就是说所有访问程序必须使用同一方式锁定, 否则它不会工作)锁定全部文件的一种轻便方法。 Note: 在 Windows 下 flock() 将会强制执行。 flock() 操作的 handle...转载 2018-04-01 22:00:50 · 132 阅读 · 0 评论 -
php结合redis实现高并发下的抢购、秒杀功能的实例
抢购、秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:1 高并发对数据库产生的压力2 竞争状态下如何解决库存的正确减少("超卖"问题)对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用Redis。重点在于第二个问题常规写法:查询出对应商品的库存,看是否大于0,然后执行生成订单等操作,但是在判断库存是否大于0处,如果在高并发下就会有问题,导致库存量出现负数?123...转载 2018-04-01 22:09:53 · 186 阅读 · 0 评论 -
深入理解php的浅复制与深复制
我们经常性赋值给另一个变量,比如说:class a{public $pp;}//创建一个对象$A;$A = new a();$A->pp = "123";$B = $A;$B->pp = "456";同时输出$A,$B的值都是“456“ 充分说明他俩共用一段空间,也就是说$B是$A的一个引用,并没有给B单独开辟一段空间所以说这是一个浅复制;我们来看一段深复制$B = clone $A;...转载 2018-04-11 14:00:34 · 130 阅读 · 0 评论 -
23种设计模式的uml图表示及通俗介绍
创建型模式 1、FACTORY 2、BUILDER 3、FACTORY METHOD 4、PROTOTYPE 5、SINGLETON结构型模式 6、ADAPTER 7、BRIDGE 8、COMPOSITE 9、DECORATOR 10、FACADE 11、FLYWEIGHT 12、PROXY行为模式 13、CHAIN OF RESPONSIBLEITY 14、COMMAND ...转载 2018-04-05 15:34:02 · 295 阅读 · 0 评论 -
php多线程解决之stream_socket_*
有没有办法在php中实现多线程呢?假设你正在写一个基于多台服务器的php应用,理想的情况时同时向多台服务器发送请求,而不是一台接一台。可以实现吗?回答:当有人想要实现并发功能时,他们通常会想到用fork或者spawn threads,但是当他们发现php不支持多线程的时候,大概会转换思路去用一些不够好的语言,比如perl。其实的是大多数情况下,你大可不必使用fork或者线程,并且你会得到...转载 2018-08-27 10:03:05 · 1012 阅读 · 0 评论 -
PHP 反射机制Reflection
简介PHP Reflection API是PHP5才有的新功能,它是用来导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。class Reflection { } interface Reflector { }class ReflectionException extends Exception { }class ReflectionFunction implements...转载 2018-10-14 18:40:11 · 235 阅读 · 0 评论 -
php 接口token生成验证
接口特点汇总:1、因为是非开放性的,所以所有的接口都是封闭的,只对公司内部的产品有效;2、因为是非开放性的,所以OAuth那套协议是行不通的,因为没有中间用户的授权过程;3、有点接口需要用户登录才能访问;4、有点接口不需要用户登录就可访问; 针对以上特点,移动端与服务端的通信就需要2把钥匙,即2个token。第一个token是针对接口的(ap转载 2018-01-19 19:25:55 · 3730 阅读 · 0 评论 -
php钩子的应用
钩子程序的定义:钩子是是一种消息处理机制,用户可以将钩子挂载到一个指定的目标处理程序,当监听到该目标处理程序触发时候,钩子可先于目标程序进行消息处理。钩子程序即是钩子用于处理消息的一个程序段。钩子程序的作用:钩子函数可以截获并处理其他应用程序的消息。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改原创 2017-10-15 22:46:21 · 546 阅读 · 0 评论 -
PHP实现异步调用方法研究与分享
这样就出现了一个问题,一个客户端的相应服务端可能执行1秒也有可能执行1分钟,这样浏览器就会一直处于等待状态,如果程序执行缓慢,用户可能就没耐心关掉了浏览器。 而有的时候我们不需要关心程序执行的结果,没有必要这样浪费时间和耐心等待,那我们就要想出办法让程序不收等待在后台静默执行。比如现在有一个场景,给1000个用户发送一封推荐邮件,用户输入或者导入邮件账号了提交服务器执行发送。转载 2017-07-10 18:59:25 · 347 阅读 · 0 评论 -
PHP通过cURL访问https时出现SSL certificate problem: unable to get local issuer certificate的解决方法
PHP通过cURL访问https时出现SSL certificate problem: unable to get local issuer certificate的解决方法:只要设置以下两个属性就可以解决。将 CURLOPT_SSL_VERIFYPEER 设置为 false,将 CURLOPT_SSL_VERIFYHOST 设置为 false.代码如下:$cURL = cur转载 2017-07-13 13:35:25 · 1908 阅读 · 0 评论 -
php中curl的应用
cURL可以使用URL的语法模拟浏览器来传输数据,因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET,DICT, FILE 以及 LDAP等协议都可以很好的支持,包括一些:HTTPS认证,HTTP POST方法,HTTP PUT方法,FTP上传,keyberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,下转载 2017-07-14 20:12:09 · 513 阅读 · 0 评论 -
php中的curl使用入门教程和常见用法实例
起先cURL是做为一种命令行工具设计出来的,比较幸运的是,php也支持cURL了。通过cURL这个利器,我们能在php程序中自由地发送HTTP请求到某个url来获取或者提交数据,并且支持其它多种协议,比如FTP,Telnet以及SMTP等。在这篇博文中,我将简述下,在php中具体怎么使用cURL来处理一些事情。一、curl的优势你也许会说,在php中可以很容易的获取某个url的内容,只转载 2017-07-14 20:14:27 · 315 阅读 · 0 评论 -
php5.5新特性之yield理解
今天,在阅读别人代码时,其中出现了一个陌生的关键字yield,想一探究竟,于是找到:http://php.net/manual/zh/language.generators.overview.phpyield生成器是php5.5之后出现的,yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低。yield生成器允许你转载 2017-07-17 01:31:43 · 274 阅读 · 0 评论 -
php协程
理解生成器参考官方文档:Generators 生成器让我们快速、简单地实现一个迭代器,而不需要创建一个实现了Iterator接口的类后,再实例化出一个对象。一个生成器长什么样?如下123456function foo() { …… yield [$someValue]; ……}与一般函数的区别在于:它不能return $notNU转载 2017-07-17 01:34:05 · 1074 阅读 · 0 评论 -
PHP静态成员变量和非静态成员变量
数据成员可以分静态变量、非静态变量两种. 静态成员: 静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会 分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员.非成静态员:所有没有加Static的成员都是非静态成员,当类被实例化之后,可转载 2017-08-01 19:25:32 · 249 阅读 · 0 评论 -
谈表单验证案例之ThinkPHP3.2使用ThinkPHP5.0+的Validate类
对表单进行验证是非常繁琐,重复,但有不得不做的事情,自从用了laravel的验证类后,瞬间觉得脑洞打开,以前在javascript的有实现相关功能的函数,但没完整整理出封装出类的思路,下面由几个案例入手,最后在整理下该类实现的思路,tp5.0中的validate类有借鉴laravel的意思,下面的例子为在tp3.2中加载使用tp5.0中的validate类:下载ThinkPHP5.0+,找原创 2017-08-02 13:19:37 · 1751 阅读 · 1 评论 -
php中的匿名函数和闭包(closure)
一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函数(Anonymous functions), 也叫闭包函数(closures), 允许指定一个没有名称的函数。最常用的就是回调函数的参数值。(http://php.net/manual/zh/functions.anonymous.php) 匿名函数的定义:$closureFunc = func转载 2017-10-19 10:43:51 · 261 阅读 · 0 评论 -
php-cli模式学习(PHP命令行模式)
之前知道php—cli模式是一种类似shell命令式的执行php程序,不过一直以为这个是一种落后的方式,应该没有什么意义,因为从没有遇到过使用这个cli模式编程的。不过今天遇到了使用cli模式的应用。php_cli模式简介php-cli是php Command Line Interface的简称,如同它名字的意思,就是php在命令行运行的接口,区别于在Web服务器上运行的php环境(p转载 2017-10-15 00:14:52 · 1530 阅读 · 0 评论 -
整个表达式?高级用法
文本: <br/>您好,非常好,很开心认识你<br/><a target=_blank href="www.baidu.com">百度一下</a>百度才知道<br/><a target=_blank href="/view/fafa.htm">发发</ a>最佳帅转载 2018-10-16 00:41:18 · 286 阅读 · 0 评论