这几天做加密程序,需要用到大整数运算,PHP 中的 BCMath 扩展提供的功能很少,而且要将字符串表示的2进制数或者 16 进制的字符串转化为 BCMath 需要的 10 进制数字符串既麻烦效率又低。而 GMP 扩展在 Windows 上只有 PHP5 才支持,我的服务器上是 Windows 系统的 PHP 4.4.1。所以 GMP 也没发用。开始打算自己写一组这样的函数,后来在实现了加减乘以后,发现效率比 BCMath 还低。俗话说得好,车到山前必有路,果不其然,正当我不知如何是好时,在 Google 上就找到了 big_int 这个 PECL 扩展,用这个扩展作加密程序,比用 BCMath 和 GMP 扩展都简单,因为许多现成的函数都已经提供了。可惜的是这个扩展默认没有被添加到 PHP 中一起发布,在 PHP 手册中也没有介绍,而且也没有编译好的最新版本的 PHP 扩展文件,只能下载源代码。不过自己编译安装倒也不是很麻烦。下面就介绍一下如何在 Windows 上编译安装这个扩展。
编译安装
准备:
需要一个 VC6 或者 VC.NET 环境,只需要最小安装就可以了。像 MFC、ActiveX 之类的都不需要安装。
需要一套跟你所使用的 PHP 环境同样版本的 PHP 源码。
编译:
解压缩 PHP 源代码到任何一个目录。
在 PHP 源代码的 ext 目录中建立一个 big_int 目录,然后将解压缩出来的 big_int 源代码复制到这个目录下。
将目前正在使用的 PHP 目录中的 php4ts.lib 或者 php5ts.lib 文件复制到 ext/big_int 目录下。
如果使用的是 VC.NET,则打开 php_big_int.sln 文件,如果是使用的是 VC6,则打开 php_big_int.dsw 文件。然后编译生成相应的 php_big_int.dll 文件。
安装:
从 ext/big_int/Release_php4 或者 ext/big_int/Release_php5 目录下复制 php_big_int.dll 文件到 PHP 扩展目录下,PHP 扩展目录在 php.ini 文件中可以找到。
修改 php.ini 文件,在其中加入
extension=php_big_int.dll
重新启动 IIS 或者 Apache 即可。
测试:
建立一个测试页面:
<?php
phpinfo();
?>
访问这个页面你如果能够看到 big_int 扩展的话,就说明安装成功了。
下载:
为了方便大家使用该扩展,我已经编译好了 PHP 4.4.2 & PHP 5.1.2 版本的 big_int 扩展,可以通过点击此处下载。
使用说明:
请参见 PHP big_int 中文使用参考。
