欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

编写php拓展实例

程序员文章站 2022-04-27 08:45:21
...

最近公司换了yaf框架,突然对用c实现php拓展感兴趣了,如果一个功能已经很稳定很成熟而且用的地方很多,那么我们就可以尝试用拓展实现(不一定每种情况都可以写成拓展),写成拓展后就不用每次用都包含一下,工具类直接随php启动加载进内存里。 我这次是把用

最近公司换了yaf框架,突然对用c实现php拓展感兴趣了,如果一个功能已经很稳定很成熟而且用的地方很多,那么我们就可以尝试用拓展实现(不一定每种情况都可以写成拓展),写成拓展后就不用每次用都包含一下,工具类直接随php启动加载进内存里。

我这次是把用户会话加密类写成了php的拓展,用户类是基于des加密的,主要实现了,

  1. isLogin //判断是否登录
  2. setLogin //就是种个加密的cookie
  3. getUid
  4. 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