Ubuntu下PHP安装C扩展

一、服务器环境

- 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 libmyclass1.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"}}');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值