PHP
文章平均质量分 66
chunyuan314
这个作者很懒,什么都没留下…
展开
-
用PHP实现memcache客户端(续)
1、说明睡了一觉,回想了下昨天的代码,发现有些地方写得不好:出现错误时不必抛出异常,免得打断了正常的执行流程,而是仅仅记录错误信息,把异常交给使用者处理,这样更灵活socket_create, socket_read, socket_write都有可能出现网络错误,有的代码没有去处理这些可能的错误没有提供关闭连接的函数创建socket的动作应该放在connect函数中本次修改除了修正以上不原创 2017-02-16 13:21:09 · 705 阅读 · 0 评论 -
Yaf学习笔记之钩子与插件
Yaf中定义了6个钩子(Hook),相当于事件,在插件(Plugin)类中定义与钩子相同名称的方法,注册之后,这些方法便会被框架自动调用。一、钩子列表 触发顺序 名称 触发时机 说明 1 routerStartup 路由之前 触发最早的一个事件 2 routerShutdown 路由结束之后 3 dispatchLoopStartup 分发原创 2017-04-15 17:26:35 · 2115 阅读 · 0 评论 -
Yaf学习之Bootstrap
Yaf的Bootstrap机制,提供了一个全局配置的入口,它:运行于Yaf_Application:run()之前,必须手动调用,如$app->bootstrap()->run();类名必须为Bootstrap,继承自Yaf_Bootstrap_Abstract类文件默认为APPLICATION_PATH下,文件名为Bootstrap.php。可以通过通过配置 application.boot原创 2017-04-16 09:40:39 · 3698 阅读 · 2 评论 -
Yaf学习之路由
一、前言Yaf的路由组件包括Yaf_Router和Yaf_Route_Abstract路由协议指导框架如何将request_uri解析到module、controller、action,以及如何解析用户提交的参数一个应用可以注册多个路由协议,最后注册的路由协议最先尝试(优先级最高)路由解析出来后会被传递给Yaf_Request_Abstract 实例默认的路由协议是Yaf_Route_St原创 2017-04-15 20:48:25 · 9536 阅读 · 0 评论 -
Yaf学习之控制器
Yaf中的控制器:必须是Yaf_Controller_Abstract的子类类名要以Controller结尾,保存的文件名则不需要执行的动作对应的方法名称要以Action结尾init()方法是控制器被实例化时自动调用的方法,而不是__construct(),所以整个控制器的初始化代码要放在这里。一、Yaf控制器常用方法一览表 序号 方法名称 作用 1 getModuleN原创 2017-04-16 12:32:25 · 5359 阅读 · 0 评论 -
Yaf学习之Action类
Yaf提供了这种机制: 可以在控制器的public属性 $actions 中定义一个或多个键值对,键为动作名字,值为定义该动作所在的文件路径。如果所请求的action在本控制器中没有相对应的方法,而在$actions中存在的话,该控制器就会载入$actions中对应的文件,实例化该动作类,执行该动作类的execute()方法。这种机制对于多个控制器之间共享同一个动作是非常有用的。这种定义在控制器外原创 2017-04-16 14:20:17 · 4049 阅读 · 0 评论 -
用PHP写PHP扩展-Another way writing php extensions
前言目前写PHP扩展主要有三种方法:C语言C++ php-cppZephir Zephir其中Zephir其实也是先翻译成C语言,然后再编译成扩展的。用Zephir 编写的Phalcon,就是以PHP扩展形式发布的一个全栈式MVC框架。Zephir与PHP在语法上很相似,不过还是有些差别。在不同语言间频繁切换,正如CPU频繁切换进程/线程一样,有一定的开销。虽然用Zephir写应用也没问题原创 2017-05-03 23:17:57 · 920 阅读 · 0 评论 -
自定义PHP数组类的实现
php一开始是面向过程的语言,到后期才支持面向对象,数组在php中的类型是 “array”:echo gettype(array());输出array很多操作数组的函数都是以 “array” 开头,第一个参数为要操作的数组。要实现一个数组类,需要实现ArrayAccess这个接口,这个接口的功能是 “提供像访问数组一样访问对象的能力” ,该接口有四个方法:abstract public boolea原创 2017-02-17 16:35:12 · 2566 阅读 · 0 评论 -
用Yar扩展实现RPC
用Yar扩展实现RPCRPC (Remote Procedure Call),远程过程调用。是一种进程间通信技术,允许程序像调用本地方法一样调用远程服务。RPC屏蔽了数据打包、网络通信的细节,使得使用者只需要关注于服务调用,而服务调用又像调用本地方法一样自然。PHP有个Yar扩展,提供了RPC服务端和客户端的功能。1. 安装$ pecl install yar稍后片刻,...原创 2018-08-16 18:05:20 · 3969 阅读 · 0 评论 -
Yaf学习笔记之多模块
问:假如我们需要Yaf支持多模块,该怎么办呢?答:把模块放在 application/modules目录下,模块目录下放置该模块的控制器和视图。同时在conf/application.ini中添加该模块的名字,模块直接以逗号隔开,记得一定添加个index的模块,防止路径只有两段时出错,此时index模块对应的控制器是application/controllers目录下的。Yaf 多模块示例假如我们需原创 2017-04-15 13:56:23 · 6420 阅读 · 0 评论 -
Yaf 入门笔记
一、 前言多年前就听说Yaf,C语言编写的PHP框架,作者为鸟哥,php界牛人! 今天就来入个门。 首先附上几个有用的链接: * Yaf文档-鸟哥主页 http://www.laruence.com/manual/ * Yaf文档-PHP官网http://php.net/manual/zh/book.yaf.php * Yaf扩展地址http://pecl.php.net/package/原创 2017-04-15 12:22:50 · 1661 阅读 · 0 评论 -
PHP与Java面向对象不完全比较
PHP是一门弱类型语言,可以用面向过程方式编程,也可以面向对象方式编程。Java则是一门强类型语言,纯面向对象。这两门语言在面向对象方面有些相似之处,有了Java的学习经验学习PHP很容易上手,光是看这些关键字(class、extends、interface、implements、final、public、protected、private、static)就有一种很熟悉的感觉。初略总结了几个方面的异原创 2017-02-20 23:58:52 · 2530 阅读 · 2 评论 -
PHP获取对象属性的三种方法
今天查看yii源码,发现yii\base\Model中的attribute()方法是通过反射获取对象的public non-static属性。记得以前看到的代码都是用get_object_vars()这个函数获取的,昨天查看php文档,发现还可以用foreach遍历对象属性。于是写个例子练习下。class TestClass { private $a; protected $b;原创 2017-02-21 10:26:13 · 33684 阅读 · 0 评论 -
直接调用阿里云接口爬取数据
记一次愉快的爬虫经历1、初次试探接到任务,要爬取阿里云上所有拍卖的域名。本想试试scrapy,查看了下网页源码,没有找到要爬取的内容。大网站就是不一样啊,数据隐藏的这么深。2、深入分析从源码没看出蛛丝马迹,习惯性地打开了Chrome的调试界面,看看我提交请求时到底干了些啥,果然,露馅了! 原来域名列表是用js在前端渲染的,而不是在后端渲染的,用到了jsonp技术,用来解决Ajax跨域问题。点击se原创 2017-02-13 14:01:32 · 7683 阅读 · 3 评论 -
一种简单分页控件的实现
1、前言分页在展示大量数据的时候是一个常见的功能。幸运的是,常见的PHP开发框架都对分页提供了很好的支持,CodeIginator提供了一个CI_Pagination类,通过配置文件来修改分页html代码的标签;Laravel则提供了Illuminate\Pagination\Paginator类,Yii框架提供了一个yii\widgets\LinkPager类。之前做开发的时候,用过CodeIgi原创 2017-02-14 15:06:01 · 537 阅读 · 0 评论 -
用PHP实现memcache客户端
1、缘起偶然翻看openresty安装文件的目录,看到lualib/resty目录下有一些用lua写的模块,其中有个memcached.lua,原来是memcache客户端的源码,突然想起memcached协议是基于命令行的。他这个模块用到了ngx.socket.tcp模块,粗略看了下,发现也不是特别复杂,就是用socket收发数据。于是心血来潮,百度了下memcached协议,来造个轮子。2、代码原创 2017-02-15 18:06:44 · 621 阅读 · 0 评论 -
PHP7.0.1下的csv解析bug
php中有几个处理csv的函数,fgetcsv($fp)用于从一个文件句柄中读取一条csv记录,并解析成数组,每个元素对应一个字段;fputcsv($fp, $arr)把整个数组转换成一条csv记录,数组的元素对应csv记录中的字段,写入文件中;还有个函数str_getcsv($str),是把一个具有csv格式的字符串解析成数组。最近工作中需要处理csv格式的文件,生成csv,解析csv。遇到的一个原创 2017-03-13 23:25:33 · 2041 阅读 · 2 评论 -
解决CentOS下无法发送邮件的问题
最近有个项目从虚拟主机迁到云主机上,换了个环境,原来用于找回密码的发送邮件功能竟然用不了了!反应极慢,导致tenginx报504网关超时错误。5.5 or 7.5, sockets初次百度,看了别人发的文章,我以为是php版本的问题,原来虚拟主机用的是PHP5.5,现在是7.0。天真的我又下了5.5版本的源码,编译安装了个php5.5,用这个版本的php-fpm替代7.0版本的php-fpm,结果问原创 2017-03-15 21:09:39 · 11307 阅读 · 8 评论 -
Yaf学习之Request
但凡Web框架,PHP也好,Java也好,还是其它语言,都会把请求用一个Request类来封装,响应则用Response类来封装。Web应用的典型流程就是 接收Request,处理之,输出Response。Yaf中表示Request的类有三个,分别是Yaf_Request_AbstractYaf_Request_HttpYaf_Request_Simple其中,Yaf_Request_Htt原创 2017-04-16 19:46:32 · 10087 阅读 · 0 评论 -
Yaf学习之整合yii
Yaf 是一个MVC框架,可惜它对M的支持甚弱,只支持自动加载模型(现在好像是吧),不像其它框架yii、laravel等,支持ORM以及各种方便的查询方法。但我们总有方法。本文章的例子将涉及:将yii整合到Yaf框架中,使得Yaf中可以使用yii的类编写配置文件配置数据库连接参数获取配置文件信息,构造数据库连接对象(yii\db\Connection)编写一个正则路由协议(Yaf_Route原创 2017-04-18 23:17:11 · 2416 阅读 · 0 评论 -
PHP用inotify扩展监控文件
PHP用inotify扩展监控文件可以用inotify扩展提供的功能来监控文件/目录,实现某些特殊的功能:如热编译,安全预警。早期phpStudy有提供防挂马功能,就是用了与inotifyf类似的机制。inotify扩展提供了一系列inotify函数:inotify_init() inotify_add_watch() inotify_rm_watch()。类似C语言里的inoti...原创 2018-08-16 22:44:35 · 4816 阅读 · 0 评论