编写php拓展实例
程序员文章站
2022-04-27 08:45:21
...
最近公司换了yaf框架,突然对用c实现php拓展感兴趣了,如果一个功能已经很稳定很成熟而且用的地方很多,那么我们就可以尝试用拓展实现(不一定每种情况都可以写成拓展),写成拓展后就不用每次用都包含一下,工具类直接随php启动加载进内存里。 我这次是把用
最近公司换了yaf框架,突然对用c实现php拓展感兴趣了,如果一个功能已经很稳定很成熟而且用的地方很多,那么我们就可以尝试用拓展实现(不一定每种情况都可以写成拓展),写成拓展后就不用每次用都包含一下,工具类直接随php启动加载进内存里。
我这次是把用户会话加密类写成了php的拓展,用户类是基于des加密的,主要实现了,
- isLogin //判断是否登录
- setLogin //就是种个加密的cookie
- getUid
- getUsername
我给这个项目起名slime(史莱姆),勇者斗恶龙里的小怪,黏黏的。。。。。。
ok,先来看下php的实现,因为我们是php -> c,所以先看下php的实现,其实就是很普通用户类
1 php 2 class Session_DES 3 { 4 var $key; 5 var $iv; //偏移量 6 7 function Session_DES( $key="AAAAAAAA", $iv="BBBBBBBB") { 8 //key长度8例如:1234abcd 9 $this->key = $key; 10 if( $iv == "" ) { 11 $this->iv = $key; //默认以$key 作为 iv 12 } else { 13 $this->iv = $iv; //mcrypt_create_iv ( mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM ); 14 } 15 } 16 17 function encrypt($str) { 18 //加密,返回大写十六进制字符串 19 $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC ); 20 $str = $this->pkcs5Pad ( $str, $size ); 21 return strtoupper( bin2hex( mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv ) ) ); 22 } 23 24 function decrypt($str) { 25 //解密 26 $strBin = $this->hex2bin( strtolower( $str ) ); 27 $str = mcrypt_cbc( MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv ); 28 $str = $this->pkcs5Unpad( $str ); 29 return $str; 30 } 31 32 function hex2bin($hexData) { 33 $binData = ""; 34 for($i = 0; $i strlen