编写一个简单的php扩展
约 633 字大约 2 分钟
0x00 从源码编译安装php
使用的环境:Ubuntu 18.04
从php.net上下载 php7.3.7的源码,解压到本地。
安装编译php所需要的依赖及软件:
sudo apt-get install gcc
sudo apt-get install libxml2-dev
sudo apt-get install openssl
sudo apt-get install libssl-dev
sudo apt-get install make
sudo apt-get install curl
sudo apt-get install libcurl4-gnutls-dev
sudo apt-get install libjpeg-dev
sudo apt-get install libpng-dev
sudo apt-get install libmcrypt-dev
sudo apt-get install autoconf
进入php目录 执行
./buildconf --force
./configure --prefix=/usr/local/php --enable-fpm
make
make install
即可编译安装完成php
0x01 编写一个简单的php扩展
PHP 提供了一个工具可以生成扩展文件的框架,进入ext目录:
ext_skel.php
./ext_skel.php --help
可以看到这个工具的基本用法,这里我们使用
./ext_skel.php --ext annevi
创建一个名为 annevi 的扩展,进入annevi文件夹,首先看配置文件 config.m4
config.m4
PHP_ARG_WITH和PHP_ARG_ENABLE这两个宏用来配置configure选项,一个配置需要外部依赖的,另一个配置不需要。
php_annevi.h
该文件就是我们编写的c扩展的头文件,在这里我们作了我们要编写的函数的声明。
PHP_FUNCTION(annevi_hello);
annevi.c
该文件即是我们要编写的扩展的函数主体
在annevi_functions[]
数组中添加我们需要编写的函数名:PHP_FE(annevi_hello,NULL)
注意没有分号
编写函数:
编写了annevi_hello
函数,该函数打印出两句话。
0x02 编译php扩展
首先使用phpize来生成编译配置文件:
phpize
编译扩展:
./configure --with-php-config=/usr/local/php/bin/php-config
生成Makefile,使用make命令编译安装
make
make install
0x03 启用扩展
查看phpinfo,找到php.ini文件的加载位置:
php -r "phpinfo();" | grep php.ini
将 php源码下的 php.ini-production
复制到 /usr/local/php/lib
cp php.ini-production /usr/local/php/lib/php.ini
修改php.ini,添加extension=annevi.so
成功启用annevi扩展。
0x04 测试
0x05 过程总结
apt-get install autoconf
./buildconf --force
./configure
make
make install
cd ext/
./ext_skel.php --ext annevi
cd annevi/
vim config.m4
-----------------
#去掉注释
-----------------
vim php_annevi.h
-----------------
#添加函数声明
-----------------
vim annevi.c
-----------------
1.在函数的数组中增加我们自定义的函数
2.编写函数
-----------------
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
cp php-src/php.ini.production /usr/local/php/lib/php.ini 创建php.ini 文件
vim php.ini
----------------
extension=annevi.so
----------------
php -m