This is delphi6th blog !

用PHP写的5种模式

用PHP写的5种设计模式。

Adapter Pattern     适配器模式
Iterator Pattern      迭代模式
Decorator Pattern  装饰模式
Delegate Pattern    委派模式
State Pattern         状态模式

» 阅读全文

使用imagewand编写动态的GIF验证码

      记得帮公司开发 篱笆进度条 时遇到了很多困难。当时只对GD有了解,但GD不能生成动态的GIF。而且公司当初又放狠话,说要写出第一套全世界会动的进度条。没办法顶着头皮上,查阅了很多相关资料。研究了imagemagic,当初可能对这个也是一知半解,也算是碰运气使用了imagewand,但当时imagewand资料相当少,可以说是几乎没有吧。也只好一个方法一个方法看手册试验,二个星期后,LIBA进度条面世了,也算通过了上线考验。
       之后应该对imagewand也算是有比较深入的了解。后来怪念头多了起来,想搞一个动态的验证码,原理就是:生成一个四帧的动态GIF,每一帧上都有不同颜色的数字,而且每帧间隔时长也不一样。验证的时候就是打印出色彩顺序,然后只要按色彩的顺序将各个数字组成验证码就可通过。

PS:目前研究方向从imagewand转向了imagick,imagewand基本未更新过.imagick还在不停的停供支持.大家可以看我前几篇BLOG.有imagick的用例.而且因为imagick不停的更新,现可在64位系统下编译,效率更高.建议大家使用.

演示地址:http://www.phpubb.com/backup_old/imagewand
nowColorArray:生成提示验证码的顺序颜色。
nowRandNumberArray:生成的验证码。

» 阅读全文

设计安全的文件上传功能

       这两天我们的老朋友PDP在BlackHat 08上做了一个关于GIFAR的演讲。和往常一样,PDP的东西基本上都很猥琐,这个也是。主题是关于是如何把GIF或者 JPG文件和JAR文件捆绑在一起,然后欺骗服务器以为是GIF或JPG文件,结果却是在客户端的JVM中执行JAR的例子。

他还举了些欺骗的例子,比如在office2007中,doc文件实际上就是zip格式了,里面都是些xml,那么他把jar文件打包在zip文件里,再把后缀改成doc,来达到欺骗的目的。

在这里是客户端的问题,我想到的则是其他的问题,比如安全上传。

» 阅读全文

pack 和 unpack 的使用

任何一款拥有socket操作能力的语言都有一个专门用于组包的函数,php也不例外!          

      用了很久php了却很少有机会用php进行一些二进制操作。 最近用php写一个socket客户端连接一个用C++语言开发的游戏服务端。 服务器端开发人员使用了二进制的形式来定义协议的格式。协议格式如下:

   包头(2bytes)+加密(1byte)+命令码(2bytes)+帧内容

1.包头的内容是记录帧内容的长度;
2. 加密:0表示不加密,1表示加密;
3. 命令码为服务端命令识别符号;

    一开始不了解php原来有pack可以来组装二进制包, 走了弯路,让服务端开发人员用C语言帮忙开发了的几个内存操作函数,按照协议规则返回二进制包,然后我将这几个方法编译成一组扩展函数供php使用。
   
    话归正题,本文是介绍如何使用pack和unpack这两个方法的。php官方手册举例太少,不能很容易理解,特别是那些格式化参数的使用。

» 阅读全文

正则表达式

收集了一点正则
自己也写了一点
全角标点转为半角
所有的中文标点的第二个字节减去0X80(即128)所得的数字就是半角所得的数字了。而/e模式表达的是:如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。

» 阅读全文

CMYK convert to RGB

最近发现产品图片都为很大一个X.查看图片文件后,图片是存在的.用ACDSEE看了一下图片属性发现图片格式为CMYK.网上查阅了资料.CMYK格式是不能在网上直接显示的.就写了一个CMYK2RGB的程序.上传带CMYK格式的图片转换为RGB. 程序采用magickwand中的函数.需要ImageMagick支持.思路比较简单.

» 阅读全文