关于“如何开发 PHP 扩展”的学习小结

近期,工作上的业务并不是很忙。做了大半年的业务逻辑,尽管在 PHP 编码习惯和技巧上有所进步,初步熟悉了在高并发下 Redis 和 Memcache 缓存的使用和注意事项。但,应该借此闲暇时间探索下 PHP 底层的一些原理。这样,才是会有质的提升,写出更好的代码。正如那句话“PHP 取得成功的一个主要原因之一是她拥有大量的可用扩展”,那就从 PHP 扩展入手了解下。在此之前,大家肯定都了解“PHP 是 C 写的”。于是打开了 PHP 的源码,列出跟目录列表如下图PHP(5.6.4)跟目录列表看到了熟悉的以后缀 .c 结尾的源文件。如图,有个名为“Zend”的文件夹很重要,这个就是 PHP 的核心。于是在网上搜到了两个若干 PHP 扩展的教程http://www.laruence.com/2009/04/28/719.htmlhttp://www.walu.cc/phpboo起初,耐心... Read More

关于 rsync 工具的安装、配置与进行文件同步与备份的使用流程

安装linux yum install rsyn配置编辑文件vim /etc/xinetd.d/rsyn内容如下# default: of# description: The rsync server is a good addition to an ftp server, as it # allows crc checksumming etc.service rsyndisable = nflags = IPvsocket_type = streawait = nuser = rooserver = /usr/bin/rsynserver_args = --daemolog_on_failure += USERI创建配置文件touch /etc/rsyncd.con... Read More

[开发中] Java 实现仿 QQ 界面多人聊天客户端程序

记得几年前,在校期间写过一个聊天程序,也发布了一篇博客在 csdn 上。然而,近期有好多网友加我 QQ 索要源码,可惜的是源码早已消失在网络中了。所以,借此闲暇时间重写一次 Java 多人聊天客户端程序,以供爱好者学习交流之用。如下是每日程序的进展日志。项目源码客户端 ->github.com/genialx/Ch服务端 ->github.com/genialx/ChatXServe前面的话对于 Java,笔者算是新手,没有用 Java 做过实际的项目。所以,在做这个项目的过程中,进行了大量的调研工作,有很多问题都无法短时间内解决。固然,项目中的代码是很糟糕的。不过,有时间会进行深入的学习来优化项目甚至重构代码。进展日志2016.02.1项目不是起于今日,目前已经完成了客户端的登陆界面,正在着手完善朋友列表的界面。登陆界面朋友列表遇到的一些不是问题的问题...容器组件半透明的问题... Read More

GO 语言实现的多人 WEB 聊天室

前段时间的工作,大部分都在“热门微博推荐流”的性能优化上。前期通过源码分析对源码的逻辑进行了优化,其中可优化的地方大多都是落在了 Redis 的多次调用、外部接口的调用以及自身过多的 IO 操作。近期,提出利用 GO 语言做一层 RPC 服务,将较数据层进行封装。所以,为了尽快熟悉并上手 GO,先写个小程序熟悉熟悉程序名称:聊天室源码地址:http://github.com/genialx/gurin截图程序中固然存在不合理的地方,仅供参考 Read More

PHP 数组函数 array_diff()、array_merge() 与数组操作符 +

array_diff() 函数是以值为判断依据,比如<?use Libs\Helper;include '../vendor/autoload.php';$a = array(0 => '1760', 1 => '1199', 2 => '4188', 3 => '1552', 4 => '6388',);$b = array(1760, 9999, '8999');Helper::p(array_diff($a, $b));Helper::p(array_diff($b, $a));输出Arra[1] => 1[2] => 4[3] => 1[4] => 6Arra[1] => 9[2] => 8同样,array_merge 函数也是以值为判断依据进行合并数组,如下<?use Libs\Helper;include '../ven... Read More

利用 xhprof(PHP)扩展进行 WEB 性能分析

最近工作有些小忙,经常加班,偶尔还会通宵。但最终热门微博“混合流”顺利地全量上线了。可是,从性能角度来说,还是有不少的提升空间的。下面说下利用 xhprof 来进行 WEB 性能的分析。安装 xhprof 扩展官方的文档胜过一切 => http://php.net/xhpro注意:如果想利用 xhprof 绘图,那么需要将系统默认禁用函数打开。;disable_functions = phpinfo,system,exec,shell_exec,passthru,proc_close,show_sourc部署xhprof的运行环境经过上面的配置,在你跑过项目后,xhprof 会输出一份报告文件。不过,这份文件的内容是被序列化的数组。所以,需要搭建一个能够读取该数据文件的 WEB 环境。这里给一份 xhprof 环境的代码:http://pan.baidu.com/s/1bnLvmr之后通过访问 xhprof 的环境,你会看到如下报告界面。... Read More

高并发场景下的缓存使用误区

十一聚会,某谈及人生理想。我要的是“地位,身份和爱情!”,其实就是金钱,面子和美女。O.正文9月份,连续两天(AB 两天)线上出现业务故障,redis 监控曲线瞬间上涨。业务场景:一千万 UV / 日redis监控曲线(修改图片好麻烦,曲线意会下吧~)redis日志业务代码<?(self::$_debug) ? Helper_Log::writeApplog('newFeatureOfMixedFeed', "初始化配比数据.") : null;if (self::$_redisDb == null) self::$_redisDb = new Comm_Redisdb(self::REDIS_SERVER);/** 判断是否有缓存数据 **$total = self::$_redisDb->lSize(Conf_Sailmixfeed::REDIS_CONF_RAT... Read More

Git 与 SVN 的使用感受

工作环境需要,分别接触了 Git 和 SVN 版本控制工具。接触不久,尽管这两种工具都不是很熟悉,目前仅能达到满足简单的工作需求(有时还需要查引擎)。但,还是有一些感受以记录。分支(branches)与里程碑(tagsGit 的分支和里程碑很有趣和简单,可以快速地在当前工作区切换不同的分支和里程碑。SVN 的分支和里程碑本身就是一个目录(拷贝),目录下分别有一个 .svn 的文件夹以存储版本信息。所以,SVN 切换分支很麻烦,需要切换工作区(每一个工作区只对应服务器的某一分支)。而 Git 却很方便。集中式与分布式这个事情和上面的分支和里程碑是有重叠的地方的。Git 采取的是分布式。简单的说就是每台 checkout 过代码的笔记本上都有着一个完整的代码库。而 SVN 却是集中式的,只有一个是代码仓库,就是服务器。所以,Git可以本地提交,SVN需联网提交。Git 是没有中心服务器的,每... Read More

WEB 开发之前端与后端通信解决方案

每天都得找点乐子,今天的乐子就是“WEB开发中前端与后端通信的解决方案”。首先,说一下“神圣”的需求。假设,我们面前是一个报名活动的页面。所有的逻辑都发生在这报名按钮上,下面是导图做法一按钮是一个链接,当我们用可爱的手指轻轻触碰它时。它会告诉浏览器,我是一个链接。之后,浏览器被跳转到一个新的地址上。与此同时,后端会执行当前的逻辑,渲染对应的 WEB 页面。这种做法很糟糕1、用户体验不好,跳转页面的吞吐量比较高,加大用户的等待时间2、同时,也加大服务器的负担3、代码冗余度较高,需要写若干个前端页面和后端方法做法二那么,用 Ajax 来实现前后端的通信(异步)也许是个不错的做法。既然,谈到通信,那么必定要有个标准。那,标准是个什么东西?举个例子(秒懂!哈哈公认的标准脸型不符合标准的脸型所以,你知道。如果程序没有标准,是一件多么令人“恼怒”的事情。需要两个 PHP 类库标准接口<?... Read More

微信支付 JSAPI 开发中的问题

前言:这篇文章讲的是利用微信官方提供的 JSAPI 接口,实现微信网页支付。希望在看之前,要确认以下几件事情,否则会在解决问题时很费解。① 接口文档版本号是 V3.3(在官方提供的 PHP DEMO 中的 README.txt 文件中查看。当然,也可以参考压缩包的名字(wxm-payment-biz-api218f8e.zip)来确认版本② 微信支付 PDF 文档的版本为 V3.3.7(如果上述版本对了,这步应该也是一致的,因为这两个文件是在一个包里③ 该文章说的是 JSAPI 的开发简单看了下微信支付的文档和源码(压缩包名:wxm-payment-biz-api218f8e.zip;PDF 文档名:【微信支付】微信公众号支付接口文档V3.3.7.pdf;)。然后,修改了微信的配置文件。有如下几个配置项值得注意1、 MCHI注释是“受理商 ID,身份标识”。可以在邮件中查看,这个邮件... Read More