生成扩展骨架
环境:docker-compose、php74
1.本地要有一份 php-src
git clone https://github.com/php/php-src.git
cd php-src
git checkout PHP-7.4.5
2.\www\php-src\ext可以看到有一个 ext_skel.php
文件
3.通过ext_skel.php脚本创建了一个hello扩展,脚本目录在\www\php-src\ext目录下
php ext_skel.php --ext hello
4.\www\php-src\ext\hello文件下的架构
-rw-r--r-- 1 longshilin staff 405 Feb 27 16:07 .gitignore
-rw-r--r-- 1 longshilin staff 11 Feb 27 16:07 CREDITS
-rw-r--r-- 1 longshilin staff 3231 Feb 27 16:07 config.m4
-rw-r--r-- 1 longshilin staff 204 Feb 27 16:07 config.w32
-rw-r--r-- 1 longshilin staff 3355 Feb 27 16:07 hello.c
-rw-r--r-- 1 longshilin staff 1425 Feb 27 16:07 php_hello.h
drwxr-xr-x 5 longshilin staff 160 Feb 27 16:07 tests
5.编写代码扩展
编写helloword.c,可以通过PHP_FUNCTION定义函数
写一个测试方法,放到函数 PHP_FUNCTION(hello_test2)
后面:
/*新增函数*/
PHP_FUNCTION(hello)
{
zend_string *strg;
strg = strpprintf(0, "hello word");
RETURN_STR(strg);
}
然后在 hello_functions[]
数组中增加我们新写的函数
PHP_FE(hetlo,NULL)
6.开始编译
/usr/local/bin/phpize
//报错Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script.
//解决方式 apk add autoconf
./configure --with-php-config=/usr/local/bin/php-config
//报错 no acceptable C compiler found in $PATH
//解决方式 apk add gcc
//报错 C compiler cannot create executables
//解决方式 apk add gcc g++
make && make install
//报错 /bin/sh: make: not found
//解决方式 apk add make
7.添加扩展目录
docker-php-ext-enable hello
//启动扩展
8.测试
//新建文件a.php
<?php
echo hello();
?>
php a.php
#得到 hello word