订阅本站

微博短链接算法php版本

huangdijia 发表于 2012-4-12 分类 PHP/PHP框架 | 发表评论

思路:
1)将长网址md5生成32位签名串,分为4段, 每段8个字节;
2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理;
3)这30位分成6段, 每5位的数字作为字母表的索引取得特定字符, 依次进行获得6位字符串;
4)总的md5串可以获得4个6位串; 取里面的任意一个就可作为这个长url的短url地址; 查看全文

ThinkPHP是一个国内使用很广泛的老牌PHP MVC框架。貌似国内有不少创业公司或者项目都用了这个框架。

最近官方发布了一个安全补丁,官方表述是:该URL安全漏洞会造成用户在客户端伪造URL,执行非法代码。

可是貌似大多数开发者和使用者并没有注意到此漏洞的危害性,应者了了,更不用说有多少人去升级了。随后我对其进行了分析,发现此问题果然是一个非常严重的问题,只要使用了thinkphp框架,就可以直接执行任意php代码。特此发帖预警各位。 查看全文

[转]FastCGI管理器

huangdijia 发表于 2012-4-9 分类 Web服务器 | 发表评论

原文:http://xiaoxia.org/2010/10/20/night-writing-a-fastcgi-process-manager/
之前一直使用单个进程都php-cgi。存在一个很严重都问题就是,php-cgi不稳定导致程序异常退出时,需要外部程序重新启动php-cgi。而且因为socket还要等待一段时间才能断开,所以要等一段时间(大概30多秒)才能重新启动成功。这样就产生了一段时间无法使用php都网页,很是烦恼。之前就一直想写一个php-cgi都进程管理器。

现在服务器上运行了几个庞大的wordpress,php崩溃都机率又大多了,迫不得已去给homeserver安装一个进程管理器。我测试过使用php-fpm,但是不好使,一是占用内存非常大,二是出现突然间无法响应都现象。后来yousan大牛推荐了用于lighttpd都spawn-fcgi,我在windows测试成功了,终于可以并发处理多个php请求。测试方法是,写一个php文件,里面写,如果刷新两次等待了10秒,那么就说明没有并发处理功能。打开多个页面测试也可以。 查看全文

css中的长度单位

huangdijia 发表于 2012-4-9 分类 HTML(5)/CSS | 发表评论

css3中也对css中用到的单位进行了改进,单位也就是那几个,所以我们要搞清楚再用。

%——百分比
in——寸
cm——厘米
mm——毫米
pt——point,大约1/72寸;
pc——pica,大约6pt,1/6寸;
px——屏幕的一个像素点;
em——元素的font-size;
ex——font-size的x-height值,为小写字母x的高度,通常相当于font-size的一半。
我们常用的有px、%、em,px就不多说了,em和%多说点儿:
查看全文

ThinkPHP3.0.1dev发布

huangdijia 发表于 2012-4-5 分类 PHP/PHP框架 | 发表评论

注意,这次发布的是开发版本,提供开发人员体验和测试,不建议用于正式项目。

[ 更新日志 ]
Action参数绑定支持
模型类命名范围支持
全局系统变量安全过滤支持
增加IS_GET IS_POST IS_PUT 等请求类型常量
日志记录改进 优化日志大小 增加IP记录
U函数对子域名部署的增强和优化
模型类增加filter连贯操作方法 用于对数据的安全过滤
模型类的data方法支持获取当前数据对象
Action类增加_param方法支持 可以自动根据当前提交类型 获取参数
Action类的_get _post方法支持多函数过滤
改进ajaxReturn方法
改进success和error方法
增加自动验证的规则
分组模式下 模型分组可以自动加载
模型类增加close方法 驱动类支持多数据库连接关闭
模型类增加表单提交字段合法性检测 配置insert_fields 和 update_fields
模型强制进行数据字段类型验证
增加DB_SLAVE_NO配置参数 用于指定读服务器的序号
优化模型的create方法的数据对象生成
自动验证的function和callback规则支持多字段

下载地址:http://thinkphp.cn/down-176.html

许多成熟的数据库都支持预处理语句(Prepared Statements)的概念。它们是什么东西?你可以把它们想成是一种编译过的要执行的SQL语句模板,可以使用不同的变量参数定制它。预处理语句具有两个主要的优点:

查询只需要被解析(或准备)一次,但可以使用相同或不同的参数执行多次。当查询准备好(Prepared)之后,数据库就会分析,编译并优化它要执行查询的计划。对于复杂查询来说,如果你要重复执行许多次有不同参数的但结构相同的查询,这个过程会占用大量的时间,使得你的应用变慢。通过使用一个预处理语句你就可以避免重复分析、编译、优化的环节。简单来说,预处理语句使用更少的资源,执行速度也就更快。

传给预处理语句的参数不需要使用引号,底层驱动会为你处理这个。如果你的应用独占地使用预处理语句,你就可以确信没有SQL注入会发生。(然而,如果你仍然在用基于不受信任的输入来构建查询的其他部分,这仍然是具有风险的)。 查看全文

让ThinkPHP支持多伪静态后序

huangdijia 发表于 2012-3-24 分类 PHP/PHP框架 | 发表评论

需求场景
大家都听说过伪静态有利于SEO,很自然的想到ThinkPHP的URL伪静态功能,当然这只是一个引子。
真正蛋疼的需求来了,当你要为自已的站点增加一个网站地图链接的时候,如:

http://www.a.com/index.php/Sitemap/index

通过隐藏index.php之后URL变成了这样

http://www.a.com/Sitemap/index

因为ThinkPHP支持默认操作,URL再简化一点

http://www.a.com/Sitemap

加上伪静态

http://www.com/Sitemap.html

查看全文

Linux下测试硬盘读写速度

huangdijia 发表于 2012-3-16 分类 Web服务器 | 发表评论

time有计时作用
dd用于复制,从if读出,写到of
if=/dev/zero不产生IO,因此可以用来测试纯写速度。
同理of=/dev/null不产生IO,可以用来测试纯读速度。
bs是每次读或写的大小,即一个块的大小,count是读写块的数量。
1.测/目录所在磁盘的纯写速度:

time dd if=/dev/zero bs=1024 count=1000000 of=/1Gb.file

2.测/目录所在磁盘的纯读速度:

dd if=/kvm/ftp/other/1Gb.file bs=64k |dd of=/dev/null

3.测读写速度(这是什么):

dd if=/vat/test of=/oradata/test1 bs=64k

理论上复制量越大测试越准确。

声明:此报告纯粹无聊,并不是为了证明wnmpserver的性能多优越,也不是证明ThinkPHP的性能有多好,ThinkPHP性能测试参考《3.0调试模式和部署模式的性能比较》。

Hello World测试

部署模式
Requests per second: 91.25 [#/sec] (mean)
Time per request: 1095.863 [ms] (mean)
Time per request: 10.959 [ms] (mean, across all concurrent requests)
Transfer rate: 52.22 [Kbytes/sec] received

调试模式
Requests per second: 74.04 [#/sec] (mean)
Time per request: 1350.577 [ms] (mean)
Time per request: 13.506 [ms] (mean, across all concurrent requests)
Transfer rate: 40.26 [Kbytes/sec] received