PHP全局管理微信公众平台token

由于微信平台对获取token有限制,而且每次获取的token不一样,需要对获取到的token,ticket之类的数据进行服务器全局保存,而且有7200秒的限制,如果token不同步或超时,会导致相关接口不可用. 对于java这类语言而言,维护全局变量是很简单的事,但是PHP做全局一直是个麻烦事,需要借助第三方的功能才能实现,如数据库,缓存,文件系统等,我这里提供一种文件系统全局保存ticket的方式,对单台服务器有效,如果要用在多台服务器上,可以实现成一个http接口给其他服务器获取token 下面是PHP代码 如果需要多个服务器共享token,可以某一台服务器实现一个内部http接口,引用该文件,输出token等信息,如下示例

开发验证码时需要注意的问题 — 为什么总有些人验证码输得很快?

验证码的出现是为了防止电脑程序模拟人工操作,实现批量,快速的数据请求. 一般验证码按以下流程开发: 1. 表单页面请求验证码图片生成程序 2. 验证码生成程序随机生成一个验证码,保存到服务器session中,并将验证码按一定随机规则画到一张图片上,返回给页面 3. 如果用户看不清,请求换一张,跳到步骤1,如果用户看得清,输入验证码,提交表单,跳到步骤4 4. 表单处理程序判断用户输入的内容跟session中保存的验证码是否一致,如果一致,通过数据提交,如果不一致,回到步骤1,要求重新填写. 看似简单的几个步骤,实现时却要注意以下两个问题: 1.验证码自动识别问题 这个是最容易想到的问题,机器通过图像识别,仍然可以得到验证码内容.一般验证码识别通过将图片二值化,降噪后,再进行特征提取,根据特征来对应具体的字符,所以简单的验证码操作根本就难不到计算机,以至于现在好多的验证码加了很多扭曲和添加杂色杂线的工作,甚至用了汉字来增加难度.只有这样做才会有效果. 对于机器识别的防治,最好是走正统方式,建议不要自己随便想一种机制就拿来应用,有可能我们想到的办法别人一下子就找到了很简单的识别方式.记得以前我就遇到一个游戏的验证码,是点击图片中只出现过一次的物品的区域,其他物品都出现过多次,感觉好像很难破的样子,其实只要把图片中的颜色进行分组,出现次数最少的那一组所在的区域就是需要点击的区域… 防制机器识别,还有一种办法是多做几套识别码,关键时刻换着用.对于像12306这样的网站非常合适,比如一年内做个10套验证码,平时用第一套,春运的时候换着用其他9套,让刷票软件花好多心思做出来的识别程序最终毫无用处. 2.验证码刷新时间问题 这个是很容易忽视的问题,特别在做抢有限资源的功能的验证码时要注意.比如12306的抢票或淘宝的抢购功能的验证码.操作方式就是提前通过验证码的链接获得验证码图片,并把验证码准备好(例如打好后复制起来),当开抢时,不加载新的验证码图片,直接提交开抢之前准备好的验证码,如果程序没有注意到时间问题,就会认为该验证码有效,从而达到”快速输入验证码”的效果. 对于这种情况,生成验证码保存session的时候,可以多保存一个刷新时间,当用户提交验证时,判断如果这个验证码是在开抢之前生成的,则此次验证结果无效. 当然,验证码也有一种无法防止的问题,那就是人工打码.这个也是好多年前就在游戏行业出现的服务,软件通过将验证码传输到打码团队某个成员的电脑上,由打码人员输入验证码并回传,程序再自动将验证码输入,这种方式往住有一定的利益关系才能维持下来,所以开发人员也不用太过担心这个问题.

PHP的Ajax跨域转发程序

Ajax有一个安全特性就是跨域访问的限制问题,虽然有很多解决的方法,但都没有使用代理的方式简单。 后来发现一个更简单的,就是给chrome浏览器添加 –allow-file-access-from-files –disable-web-security 启动参数,即可实现关闭安全检查的功能。 它的这个特性过份到访问同一个域下的不同端由都做了限制。有时候做测试开发很不方便。所以我就自己写了一个php的代理程序,由php接收ajax请求并转发到其他域的服务器,并将结果返回。 proxy.php代码如下:

IP归属地数据库,附带C,PHP访问代码

最近有打算给博客做个统计插件,看看都是哪儿来的朋友在看我的博客儿,需要一个详细的IP地址归属地数据库。网上找了个纯真的MySQL版的,30多万条数据占了20M左右的数据库空间,觉得有点浪费数据库空间,而且数据库查询时间太慢,特别是要一次性查多个结果时,更是不得了.最主要的是这种应用场合不适合做成数据库形式的。 所以就准备自己做数据库了,自己也有50000亿条数据的数据文件的设计经验。这才30多万条没什么问题。。。按自己的想法生成了文件,并写了PHP和C语言的访问API,心情好的时候再补写上Java啊,汇编啊什么的API也是挺好的。 数据库下载:GBK版 UTF8版 PHP API(函数):这个是函数形式的PHP代码,博客版面上是写描述,具体代码在这里:ips.php ip_area.php 代码调用示例:

在Discuz论坛上集成了个团购功能

最近团购真的是太疯狂,太流行了,但从技术上讲,它却是那么的简单,不过还是有很多网站长愿意花重金去购买团购网站源代码,并自己运营起来,说明这个模式还是挺不错的。 朋友的论坛需要,那我也义不容辞的做了个,架构是这样的,前台使用flash,嵌入到论坛中,然后使用独立的后台程序管理用户的订购,我当然用的也是PHP。 这样的架构是尽量减少论坛修改,把团购模块独立出来的最好办法,只需要在论坛中修改很少量的代码,就可以把团购功能集成进去,而后台的代码,因为以前给这个网站做了世界地图啊,老虎机游戏什么的,后台都有个PHP框架了,所以也简单多了。 界面也是我用fireworks自己画的,虽然也参考了别人的网站,打折牌那一块说我是照抄都不过份,呵呵。但是没办法啊,实在是想不到比打折牌看起来更有意思的界面了,下面是这个flash,这儿把按钮功能去掉了,完整的应用等新功能上线后再把链接加上来。

[flash]登高游戏,是男人也上不了一万米!

又挤时间做小游戏了,这个游戏创意谈不上,来自一个日本的小游戏,叫什么什么tower来着,被人翻译成是男人就上100层。那游戏中男人使劲时发出的声音,和掉下去后惨叫的声音让人印象很深,哈哈。不过我在他们的创意上加了些小玩意儿,比如说疯狂的石头啦,可以飞啦什么的。高度单位是米。游戏有服务器程序提供支持,可以提交分数,前10名和后10后会直接显示到游戏中,让玩家知道自已到达哪个层次了。如下图所示。 不多说了,flash传上来了。

主题完成了,准备把博客上线了

现在看来内容也差不多了,准备把博客脱离我的cent os,发布到互联网上去了。这个主题还是感觉不是很满意,自己已经尽力了,虽然看起来还是不大搭配。目前测试的浏览器有IE6,IE8,Opera,Firefox,效果都达到预期。下周到公司去看看其它的浏览器效果。在我的印象中,我的css写法好像不大适应google流览器。 网页做成wordpress主题倒还很简单,wordpress的框架还是挺不错的。个人觉得模板这儿没自己写的PHP框架好,至少我写的MVC框架,标签是订制的,而不是让美工去嵌入PHP代码,呵呵,自恋一下,其实这个是习惯问题而已。

最近做的Widgets展示模块

我的目的就是要实现跟iGoogle一样的概念,可以由用户订制自己的展示界面,用户想看什么就订制什么模块,谁用谁赞。 为节约开发效率(主要是省自己的事儿~),前台的窗口拖动方面的功能是基于iNettus的,而iNettus又是基于jQuery的。不过为了实现自己的附加功能,我还是改了iNettus的类,以便可以与PHP交互。 窗口的创建和删除都是要通知服务器的,因为需要服务器来保存用户的订制信息,另外还有订制模块的一些列交互,大多数交互都是通过ajax实现的,正好又是jQuery的功能,省了。

ictclas分词COM封装

中文分词,是程序对中文语义的分析的第一步,把一个句子按语法语义分成多个词语,便可方便进行下一步的处理。中文分词在中文搜索引擎方面广泛应用,还可以应用在聊天机器人、信息自动搜集等很多方面。 记得我的毕业设计就是中文搜索引擎,当时自己只用PHP实现了正向最大匹配分词法,效率不是很高,而且分出来的词也不是很精确(不过最简单,哈哈)。但对于一个毕业设计来说,这样已经足够了。但要对一个实际应用来说,分词肯定要越精准越好。中科院的ICTCLAS中文分词库,应该是最好的选择。 这个组件是因为PHP需要用到ictclas分词功能,但官方只提供dll版本,那就有两种方式,一种是封装成php模块,另一种就是封装成com组件了。既然是运行在windows上的,就决定装成com了。 组件提供3函数,init,split,exit.具体看例子一下子就知道了。