第一步:从Github上直接拉取源代码
1 | $ git clone https://github.com/php/php-src.git |
我这里使用的是
UBUNTU 18.04
PHP 7.2.10
GCC 7.3.0
第二步:使用php官方 ext_skel
官方介绍文档:ext_skel 脚本
1 | $ ./ext_skel.php --ext hello |
旧版PHP使用 ./ext_skel –extname=hello 创建扩展
可以看到/php-src/ext/ 下多个了hello文件夹
1
2
3
$ ls hello
config.m4 config.w32 hello.c php_hello.h tests
$ cd hello
1 | $ ls hello |
这里有个坑
$ phpize
$ ./configure --enable-hello
$ make
然后会发现make报错
错误:warning: implicit declaration of function ‘ZEND_PARSE_PARAMETERS_NONE’; did you mean ‘ZEND_PARSE_PARAMETERS_END’? [-Wimplicit-function-declaration]
我们将
hello.
c 的ZEND_PARSE_PARAMETERS_NONE
改成小写zend_parse_parameters_none
再次make
就会正常
官方生成工具生成的代码报错,这可能是官方挖的坑吧
第三步:添加函数实现
在大概40行左右 ,编写我们的函数
1 | PHP_FUNCTION(hello_world) |
然后将我们的函数添加到 hello_functions 这个数组里
1 | static const zend_function_entry hello_functions[] = { |
使用make编译安装,就可以看到输出hello world了
1 | $ make |
还有一个类php语法来生成c语言代码,并帮你编译成PHP扩展的项目,具体文档可以参考 Zephir