博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第一个php扩展
阅读量:7089 次
发布时间:2019-06-28

本文共 2668 字,大约阅读时间需要 8 分钟。

hot3.png

在阅读yaf源码的前提驱动下,了解了php扩展开发的基本步骤。基于php-src提供的ext_skel脚手架生成php扩展的基础代码,我的目的主要是先了解扩展开发的基本步骤,没有改其中的代码,以快速地过一遍php扩展开发重要的流程。这里有个前提是需要准备好指定版本的php-src源码并完成编译安装。

1. 使用ext_skel生成基础代码

进入 php-src/ext/目录,执行:

//我给我的第一个扩展名取名叫firstext$ ./ext_skel --extname=firstext

返回:

Creating directory firstextCreating basic files: config.m4 config.w32 .gitignore firstext.c php_firstext.h CREDITS EXPERIMENTAL tests/001.phpt firstext.php [done].To use your new extension, you will have to execute the following steps:1.  $ cd ..2.  $ vi ext/firstext/config.m43.  $ ./buildconf4.  $ ./configure --[with|enable]-firstext5.  $ make6.  $ ./sapi/cli/php -f ext/firstext/firstext.php7.  $ vi ext/firstext/firstext.c8.  $ makeRepeat steps 3-6 until you are satisfied with ext/firstext/config.m4 andstep 6 confirms that your module is compiled into PHP. Then, start writingcode and repeat the last two steps as often as necessary.

这时,我们看 ext 目录下多了 firstext 目录,里面的结构:

.├── config.m4├── config.w32├── CREDITS├── EXPERIMENTAL├── firstext.c   //扩展通常要有一个 扩展名.c 的一个主文件├── firstext.php├── php_firstext.h //扩展通常要有一个php_扩展名.h的一个头文件└── tests    └── 001.phpt

2. 配置IDE

在修改扩展代码之前,我们用IDE 先打开项目,我用的是Clion,需要import project,而不是open一个文件夹,前者会自动生成MakeList,以便IDE自动提示。 自动生成后还要手动增加几条配置,如下

cmake_minimum_required(VERSION 3.10)project(firstext C)set(CMAKE_C_STANDARD 11)include_directories(.)add_executable(firstext        firstext.c        php_firstext.h)#手动增加的配置#定义php源码路径,这里根据自己的真实路径来更改set(PHP_SOURCE /host/code/github/read-code/php-7.1.18/)#引入php需要的扩展源码,这里也是根据自己需要的来更改include_directories(${PHP_SOURCE}/main)include_directories(${PHP_SOURCE}/Zend)include_directories(${PHP_SOURCE}/sapi)include_directories(${PHP_SOURCE}/pear)include_directories(${PHP_SOURCE})add_custom_target(makefile COMMAND sudo /host/tools/php7.1.18/bin/phpize && ./configure --with-php-config=/host/tools/php7.1.18/bin/php-config &&  make        WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})

3. 修改config.m4

这时候需要修改编译配置文件了。这个config.m4是用于配置扩展的支持选项、及依赖的库等。针对类unix系统提供的是config.m4,是基于autoconf语法编写的,还有一种是config.w32是为windows系统编译用的。

第一次我没改config.m4直接进入配置编译,然后就报modules不存在错了,于是我参考 ,将 PHP_ARG_ENABLE 取消注释,后面就能跑的通了。

4. 配置编译

接下来就是跟安装php扩展一样的步骤了。 在扩展目录下执行:

$ /host/tools/php7.1.18/bin/phpizeConfiguring for:PHP Api Version:         20160303Zend Module Api No:      20160303Zend Extension Api No:   320160303
$  ./configure --with-php-config=/host/tools/php7.1.18/bin/php-config......
$ make && make installnstalling shared extensions:     /host/tools/php7.1.18/lib/php/extensions/no-debug-non-zts-20160303/

扩展编译安装完成,在php.ini中加入:

extension=firstext.so

执行命令:

/host/tools/php7.1.18/bin/php -m|grep firstextfirstext

显示有这个插件,就完成了。

转载于:https://my.oschina.net/flyrobin/blog/1819314

你可能感兴趣的文章
python2.0_s12_day19_前端模版使用
查看>>
从B树、B+树、B*树谈到R 树
查看>>
PHP json_decode object时报错Cannot use object of type stdClass as array
查看>>
【中文分词】条件随机场CRF
查看>>
hibernate一对一外键双向关联
查看>>
SharePoint 2013 同步FBA认证用户
查看>>
二叉树的遍历实现
查看>>
Sublimetext 3 经常使用插件
查看>>
四层和七层负载均衡的区别
查看>>
Ubuntu 16.04下没有/var/log/messages文件问题解决
查看>>
在C++98基础上学习C++11新特性
查看>>
视频H265格式压缩,软件压缩方法,硬件的没有条件,没法测试。
查看>>
docker 系列 - Dock高阶知识点文章汇集
查看>>
window下gvim中文界面改变成英文界面
查看>>
Flash 挡住层的解决方法。
查看>>
EntityFramework之领域驱动设计实践(二)(转)
查看>>
Android 解决不同进程发送KeyEvent 的问题
查看>>
【OpenCV学习】一个多维数组(矩阵)和一个一维,但是包含高维数据的数组之间的区别...
查看>>
银行核心业务系统开发项目管理之道-金融项目我们应该关注那些东西
查看>>
SimpleAdapter参数说胆
查看>>