一、服务器环境
- Ubuntu 16.04.2 LTS x64
- PHP 7.0.21
二、服务器端软件安装
安装apache2
apt-get install apache2
安装php
apt-get install php7.0
apt-get install php7.0-dev
apt-get install libapache2-mod-php7.0
// Ubuntu 14.04, php5.6.32
apt-get install python-software-properties
add-apt-repository ppa:ondrej/php
apt-get update
apt-get install -y php5.6
apt-get install php5.6-dev
三、添加到系统公共库
执行以下命令,将库文件添加到系统公共库中。
cp libmy
class1.so /usr/local/lib/ #拷贝到系统公共库
cp libmyclass2.so /usr/local/lib/
ldconfig #载入库
四、安装php扩展
下载php源码,使用源码包中的ext_skel工具创建扩展。
下载php源码
下载php当前
版本对应的源码版本。使用以下命令查看当前php版本
php -v
我的版本是7.0.21,到php官网下载对应的tar.gz文件
wget http://php.net/distributions/php-7.0.21.tar.gz
解压并进入到ext目录
tar -zxvf php-7.0.21.tar.gz
cd php-7.0.21/ext
创建mythcrypt扩展
./ext_skel --extname=myclass1
更新config.m4文件,去掉第16和18行的dnl
cd mythcrypt
vim config.m4
16: PHP_ARG_ENABLE(myclass1, whether to enable mythcrypt support,
17: dnl Make sure that the comment is aligned:
18: [ --enable-myclass1 Enable myclass1 support])
更新myclass1.c
vim myclass1.c
// 添加函数声明
const zend_
function_entry myclass1_functions[] = {
PHP_FE(confirm_myclass1_compiled, NULL) /* For testing, remove later. */
PHP_FE(my_function, NULL)
PHP_FE(my_request, NULL)
PHP_FE_END /* Must be the last line in mythcrypt_functions[] */
};
// 在PHP_FUNCTION(confirm_myclass1_compiled)函数定义下面添加如下代码。不同的版本添加的语法不一样,以下分别是5.3.10、5.6.31、7.0.21版本的示例。
// 5.3.10
PHP_FUNCTION(my_function)
{
char *ret;
ret=my_function();
RETURN_STRING(ret,0);
}
PHP_FUNCTION(my_request)
{
char *dataid;
char *ret;
.....;
}
// 5.6.31
PHP_FUNCTION(my_function)
{
char dataout[1024]={0};
my_function(dataout);
RETURN_STRING(dataout, 1);
}
PHP_FUNCTION(my_request)
{
int datalen;
char *dataid;
char dataout[1024]={0};
.....;
}
// 7.0.21
PHP_FUNCTION(my_function)
{
char dataout[1024]={0};
my_function(dataout);
RETURN_STRING(dataout);
}
PHP_FUNCTION(my_request)
{
char *dataid;
char dataout[1024]={0};
.....;
}
5.6.31 和 7.0.21版本中,函数my_function和my_request的返回字符串长度最大值是1024。
使用phpize命令生成configure文件
phpize
./configure
make LDFLAGS=-lmyclass1 # 载入libmycalss1.so并make
make test # 测试
make install # 将库安装到php的扩展文件夹里面
更新php配置文件,添加mythcrypt库
vim /etc/php/7.0/apache2/php.ini
extension=myclass1.so
#
重启apache
/etc/init.d/apache2 restart
五、编写测试
脚本
测试脚本如下:
<?php
echo my_function();
echo my_request(1, '{"user_id":"test","crypto_service_id":1,"signature":"testasdfawef","data_in":{"sn":"A1000012312234234","hwid":"12312123234234234"}}');