本文介绍如何制作一个php扩展
下载PHP源码
本文采用 php 7.4.27,基于 Ubuntu 18.04.4 LTS
点击下载源码编译安装 PHP
按顺序执行下列命令
# 更新你的系统 apt update # autoconf 是一种用于生成shell脚本的工具,可自动配置软件源代码包,以适应多种类型的 Posix-like 系统 autoconf # autoheader 命令可以为使用configure创建C定义的模板文件 autoheader # 配置 ./configure --prefix=/usr/local/php7.4.27 --with-config-file-path=/etc --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-curl --enable-fpm # 4线程构建 make -j4 # 安装 make install
中间可能会构建失败,你需要逐一安装 php 依赖的扩展:
# 你可能需要一个个安装 apt-get install libxml2 libxml2-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libxml-dev
至此,php 安装完毕,可以查看下 php 版本:
/usr/local/php7.4.27/bin/php -v # 输出 PHP 7.4.27 (cli) (built: Jun 21 2022 19:15:41) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies
开始制作扩展
# 进入扩展目录 cd /soft/php/php-src/php-src-php-7.4.27/ext/ # 生成一个扩展框架,pdo_encrypt 是你的扩展名称 /usr/local/php7.4.27/bin/php ./ext_skel.php --ext pdo_encrypt # 进入框架目录 cd pdo_encrypt/ ⏬ ⏬
编辑 pdo_encrypt.c 文件
vi pdo_encrypt.c
添加一个 PHP 方法
# 找到 PHP_RINIT_FUNCTION(pdo_encrypt) 行,在该行上面添加下面代码 PHP_FUNCTION(pdo_encode) { char *passwd; size_t passwd_len; zend_string *retval; ZEND_PARSE_PARAMETERS_START(0, 1) Z_PARAM_OPTIONAL Z_PARAM_STRING(passwd, passwd_len) ZEND_PARSE_PARAMETERS_END(); // 这一行是密码加密逻辑,调用了一个 c 函数,你可以忽略,先尝试把扩展运行起来 // passwd = encode(passwd); retval = strpprintf(0, "%s", passwd); RETURN_STR(retval); }
添加参数接收规则
# 找到这一行 static const zend_function_entry pdo_encrypt_functions # 在这一行上面,添加下面代码 ZEND_BEGIN_ARG_INFO(arginfo_pdo_encode, 0) ZEND_ARG_INFO(0, passwd) ZEND_END_ARG_INFO() # 在这一行方法体里,添加下面代码 PHP_FE(pdo_encode, arginfo_pdo_encode)
至此 c 文件修改完毕,保存退出。
开始编译扩展
# phpize 是一个运行脚本,主要作用是检测 php 的环境还有就是在特定的目录生成相应的 configure 文件,这样 make install之后,生成的 .so 文件才会自动加载到 php 扩展目录下面 /usr/local/php7.4.27/bin/phpize # 配置扩展 ./configure --enable-pdo_encrypt --with-php-config=/usr/local/php7.4.27/bin/php-config # 构建扩展 make -j4
至此扩展编译完成
# 上面步骤完成后,当前 pdo_encrypt/ 目录下,将生成一个 modules/ 目录,进入此目录,你会发现多了两个文件 -rw-r--r-- 1 root root 844 6月 23 10:33 pdo_encrypt.la -rwxr-xr-x 1 root root 61584 6月 23 10:33 pdo_encrypt.so* # 你可以将 pdo_encrypt.so 文件配置到你的 php 中了,这一步不再赘述。
扩展安装成功的证据:
php 代码调用
体验一下效果
传送门
作者:Wolf 创建时间:2022-11-19 11:43
最后编辑:Wolf 更新时间:2023-11-27 23:47
最后编辑:Wolf 更新时间:2023-11-27 23:47