PHP

DWRA:Random Avatar Service

DWRA是一个简单的随机头像服务端,对外提供与gravatar几乎一致的随机头像输出功能,支持随机头像和静态解析固定头像,可以作为被墙的gravatar的替代方案。DWRA还支持简单的服务授权验证机制,可以防止第三方未经授权调用服务。

gravatar被墙:构建自己的随机头像服务(中)

OK,上一篇我们一起将wp_identicon剥离出来作为自己的随机头像引擎,此篇我们要将其改造成一个直接返回图片数据的单独服务,再为其增加限制缓存数量的函数,并为其增加静态解析的功能,像这样:https://function.dreamingwish.com/gravatar/c78fccb17b567e263d0bd863e776d77a?s=80&d=identicon&rating=pg&auth=7830559911c151d8b45ad606ec2d40b25b453d32aa25ebc8d4ddc53959497257&ak=e15b48f0 实际上我采取的静态解析非常简单(仅适合访问量不大的情况):将传入的字符串先进行hash(或者假设传入的字符串已经hash过)。先从静态解析目录中找到hash所对应的图片文件。如果找到这样的文件,直接返回此文件的内容。如果找不到,则正常调用wp_identicon进行随机生成。但是重点根本就不是这个简单的要死的逻辑,而是怎么修改wp_identicon的代码对吧?让我们来修改wp_identicon的函数:// init random seed
if ($random

gravatar被墙:构建自己的随机头像服务(上)

gravatar老早就被墙了,以前很好用的随机头像服务随之完蛋,网上搜罗一番,找到了一些解决的办法:使用gravatar的https服务,试过一段时间,发现不稳定,有时候会连接不上,而且可能很快继续被墙。使用duoshuo的镜像,参数和结果跟gravatar一样,这个还算靠谱,但是有很少的情况下也会刷不出来,至于原因我已经懒得研究了,因为我决定自己建立随即头像服务。还有一种比较复杂的方法,大家网上搜索gravatar七牛镜像,看起来稳定性还不错,不过既然要创建一个服务自己用,我更喜欢创建在自己的服务器上 :)那么我来简单教大家建立自己的类gravatar随机头像服务,不过这种方法是需要一点php基础的。首先下载wp_identicon插件,解包拿出wp_identicon.php文件,额,当然这里你直接把这个插件装上用也是可以的,不过我的博客前端已经脱离wordpress,所以直接装上去除了能提醒我更新以为,并没有什么鸟用。接下来我们要把wp_identicon的核心算法函数和类剥离出来,wp_identicon最重要的两个类是:class identicon
class identicon_mersenne_twister
接下来找到文件头部的两个define,这是两个路径,一个用来拼接出图片网址路径,一个用来拼接图片的本地路径:define('WP_IDENTICON_DIR', str_replace('\\','/',preg_replace('@.*([\\\\/

为php安装pecl http扩展遇到undefined symbol问题

用源码编译的pecl http扩展,若报undefined symbol:php_iconv_string或相似的iconv库符号找不到,那么需要保证http.so的加载在iconv.so之后,方法有二:

在php.ini中,保证extension=http.so在extension=iconv.so之后
在php.d目录中,将http.ini重命名为z_http.ini(php在读取配置文件时,按文件名字母顺序读取)


用yum安装的pecl http扩展,若报Undefined symbol:output_globals一般是http.so的编译版本与当前php版本不兼容

DWPF:轻量级wordpress前端

作为wordpress默认前端的替代,DWPF的优点在于访问速度快、安全、原生缓存。DWPF功能精简,去除了各种HOOK,页面执行速度快,数据库查询次数少,并原生支持页面缓存。DWPF的缓存粒度为模块,这意味着使用DWPF可以实现具有动态模块的静态页面。另外服务端可以为DWPF配置单独的Virtual Host,使用更低权限的数据库Account,提升安全性。

将zend session 存储在数据库中

zend session 存储在数据库中:不用像网上说的那样 php.ini 中要 session.save_handler = user
关键是Zend_Session::start()执行的地方应该在 $app->bootstrap()之后 $app->run()之前(session resource 在

php的三重des加密

最近要做一个加密解密程序,发现php的3DES加密结果和java c#不一致。。。
谷歌一番,发现如下:
由于PHP使用mcrypt扩展进行3DES加密,填充模式是跟JAVA以及.NET是不一样的,JAVA和.NET填充模式使用的是PKCS7。
所以PHP端必须自定义一个函数对加密字符串进行PKCS7模式补位填充。
另外一点就是双方的KEY注意进行base64编码,最后PHP端经过3DES加密后得到的结果也需要进行base64编码。
以上几点都做好之后,加密结果就一致了。