文档章节

Ubuntu16.04 安装PHP7.0扩展

 金陵笑笑生2017
发布于 2017/07/11 18:19
字数 592
阅读 18
收藏 0

本文以Ubuntu 16.04 LTS server系统为例,简要介绍安装PHP扩展。

服务器端需要安装以下软件:

  • Ubuntu 16.04.2 LTS x64
  • Apache 2.4.18
  • PHP 7.0.21

#1. 服务器端软件安装

安装apache:

apt-get install apache2

安装php:

apt-get install php7.0 php7.0-dev libapache2-mod-php7.0

#2. 测试lib库是否可用

本文以自定义的库libmythcrypt.so为例,库中有两个函数:

char* myth_crypto_get_descriptior(char* dataout);
char* myth_crypto_request(int a, char* b, char* dataout);

编写测试文件

vim test.c

内容

#include <stdio.h>
char* myth_crypto_get_descriptior(char* dataout);
char* myth_crypto_request(int a, char* b, char* dataout);
int main()
{
    char test[1000]={0};
    myth_crypto_get_descriptior(test);
    printf("%s", test);
	
    memset(test, 0, 1000);
    myth_crypto_request(1,"{\"user_id\":\"test\",\"crypto_service_id\":1,\"signature\":\"testasdfawef\",\"data_in\":{\"sn\":\"A1000012312234234\",\"hwid\":\"12312123234234234\"}}",test);
    printf("\n%s", test);

    return 0;
}

执行命令

cp libmythcrypt.so /usr/local/lib/libmythcrypt.so    # 拷贝到系统公共库
ldconfig	                                        # 载入库
gcc -o test test.c -lmythcrypt                       # 编译test
./test	                                           # 执行test,若能返回json数据,则表示调用成功。

#3. 安装php扩展 查看当前php版本,并下载对应的源码版本

php -v

这里我的php版本是7.0.21,下载版本并解压

wget http://php.net/distributions/php-7.0.21.tar.gz
tar -zxvf php-7.0.21.tar.gz
cd php-7.0.21/ext

创建扩展

./ext_skel --extname=mythcrypt
cd mythcrypt

修改config.m4文件,去掉第16和18行的dnl

vim config.m4

修改mythcrypt.c文件

vim mythcrypt.c

const zend_function_entry mythcrypt_functions[] = {
        PHP_FE(confirm_mythcrypt_compiled,      NULL)          /* For testing, remove later. */
        PHP_FE(myth_crypto_get_descriptior,   NULL)             /* 添加函数声明 */
        PHP_FE(myth_crypto_request,   NULL)                        /* 添加函数声明 */
        PHP_FE_END      /* Must be the last line in mythcrypt_functions[] */
};

在PHP_FUNCTION(confirm_mythcrypt_compiled)函数定义下面添加如下代码。不同的版本添加的语法不一样,以下分别是5.3.10, 5.6.31,7.0.21版本的示例。

// 5.3.10
PHP_FUNCTION(myth_crypto_get_descriptior)
{
        char *ret;

        ret=myth_crypto_get_descriptior();//调用so库函数
        RETURN_STRING(ret,0);
}
PHP_FUNCTION(myth_crypto_request)
{
        int cryptoid;
        char *dataid;
        char *ret;

        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ls", &cryptoid, &dataid) == FAILURE) {
                return;
        }

        ret = myth_crypto_request(cryptoid, dataid);
        RETURN_STRING(ret, 0);
}


// 5.6.31
PHP_FUNCTION(myth_crypto_get_descriptior)
{
        char dataout[1024]={0};

        myth_crypto_get_descriptior(dataout);//调用so库函数
        RETURN_STRING(dataout, 1);
}
PHP_FUNCTION(myth_crypto_request)
{
        int cryptoid;
        int datalen;
        char *dataid;
        char dataout[1024]={0};

        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ls", &cryptoid, &dataid, &datalen) == FAILURE) {
                return;
        }

        myth_crypto_request(cryptoid, dataid, dataout);
        RETURN_STRING(dataout, 1);
}

// 7.0.21
PHP_FUNCTION(myth_crypto_get_descriptior)
{
        char dataout[1024]={0};

        myth_crypto_get_descriptior(dataout);//调用so库函数
        RETURN_STRING(dataout);
}
PHP_FUNCTION(myth_crypto_request)
{
        int cryptoid;
        //int datalen;
        char *dataid;
        char dataout[1024]={0};

        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ls", &cryptoid, &dataid) == FAILURE) {
                return;
        }

        myth_crypto_request(cryptoid, dataid, dataout);
        RETURN_STRING(dataout);
}

用phpize命令生成configure文件

phpize
./configure                           #生成makefile
make LDFLAGS=-lmythcrypt              #载入libhello.so并make
make test                              #测试
make install                          #安装

编辑配置文件

vim /etc/php/7.0/apache2/php.ini

extension=mythcrypt.so

#重启apache
/etc/init.d/apache2 restart

测试

<?php
    echo myth_crypto_get_descriptior();
    echo myth_crypto_request(1,"{\"user_id\":\"test\",\"crypto_service_id\":1,\"signature\":\"testasdfawef\",\"data_in\":{\"sn\":\"A1000012312234234\",\"hwid\":\"12312123234234234\"}}");

参考: http://www.appl3.me/2016/12/20/phpext/

© 著作权归作者所有

粉丝 0
博文 11
码字总数 4069
作品 0
南京
私信 提问
Ubuntu16.04 安装lamp环境

Ubuntu 安装 lamp环境还是比较容易的,直接根据依赖一步一步的安装就行了。 注:使用root权限,可以sudo,也可以直接切换到root,我这里直接切换到root。 首先第一步:安装apache2。 查看apa...

JasonWung
2016/08/03
200
0
ubuntu16.04安装php5.6

有一个项目很老了,最开始用的php版本是5.3,现在换服务器,服务器是ubuntu16.04,默认的php版本是7.0,然后项目在这个版本上运行不起来。 于是,就卸载了7.0,装一个5.6吧。 由于web服务器用...

Marhal
2018/08/13
0
0
PHP Ubuntu 多版本共存

ubuntu 上 通过apt 安装php 一般只能安装一个版本,如果安装一个高版本,再次安装低版本,会提示已安装,除非卸载掉当前版本版本,然后才能装低版本 1.以下方法可以共存版本,自己切换 http...

Grace_
03/06
0
0
Ubuntu16.04安装PhpMyAdmin

首先,安装MySQL 再安装phpmyadmin 建立 下的软链接 修改php配置文件 重启apache 打开浏览器,localhost/phpmyadmin,输入账号密码即可 重点提要:因为默认安装phpmyadmin时会安装apahce和php...

alex43211
2016/06/13
334
0
ubuntu16.04 搭建PHP开发环境LAMP

0:安装web服务器apache sudo apt-get install apache2 选择Y 在浏览器输入localhost查看,若有一下显示则表示安装apache2成功 1:安装PHP sudo apt-get install php7.0 2:安装PHP与apache关...

雨醉风尘
2016/10/02
243
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 吾不好梦中插人

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @鱼豆腐233 :#今日歌曲分享# 分享My Chemical Romance的单曲《I Don't Love You》: 《I Don't Love You》- My Chemical Romance 手机党少年们...

小小编辑
46分钟前
17
4
ss5 vpn 安装(linux版本)

1. 创建一个文件夹 /ss5 你也可以自定义,不过后续的地方需要注意自己的地址 2. 下载ss5文件(如果你的服务器没有安装wget请使用 yum -y install wget 命令安装 如果连yum都没安装自己查去)(下...

太黑_thj
今天
2
0
八、RabbitMQ的集群原理

集群架构 写在前面 RabbitMQ集群是按照低延迟环境设计的,千万不要跨越WAN或者互联网来搭建RabbitMQ集群。如果一定要在高延迟环境下使用RabbitMQ集群,可以参考使用Shovel和Federation工具。...

XuePeng77
今天
5
0
mac系统下,brew 安装mysql,用终端可以连接,navicat却连接不上?

问题: 1.报错? 2059 - Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(../Frameworks/caching_sha2_password.so, 2): image not found 2.自己通过设置,已经把密......

写bug的攻城狮
昨天
3
0
老生常谈,HashMap的死循环

问题 最近的几次面试中,我都问了是否了解HashMap在并发使用时可能发生死循环,导致cpu100%,结果让我很意外,都表示不知道有这样的问题,让我意外的是面试者的工作年限都不短。 由于HashMap...

群星纪元
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部