php自定义扩展extension的两种方式

整理了两种自定义扩展的方式,其他方式请自行扩展 

方式一 Zephir

# 安装相关依赖
yum install gcc make re2c autoconf automake -y

安装解释器 https://github.com/zephir-lang/php-zephir-parser

git clone git://github.com/zephir-lang/php-zephir-parser.git
cd php-zephir-parser
phpize
./configure
make && make install

编辑php.ini

vim /usr/local/php/etc/php.ini

[Zephir Parser]
extension=zephir_parser.so

php -m 或 phpinfo 查看安装的模块

安装zephir.phar

# 下载
https://github.com/zephir-lang/zephir/releases/download/0.16.3/zephir.phar

# 移动到 /usr/local/bin
mv /opt/zephir.phar /usr/local/bin/
chmod 755 zephir.phar
ln -s /usr/local/bin/zephir.phar zephir
ln -s /usr/local/php/bin/php-config php-config
zephir help

开发扩展

初始化扩展目录

zephir init Hello
cd hello/hello

编写扩展文件

vim world.zep

namespace Hello;
class World
{
  public function index() {
    echo  "hello world!";
  }
}

构建包

# 需先开启php函数 exec、shell_exec、system
# 编辑php.ini
vim /usr/local/php/etc/php.ini
# disable_functions 中去除如上三个限制函数
 
cd ../
# 构建
zephir build
# 构建的的文件在 hello/ext/modules 文件下
# extension_dir 地址可以通过 phpinfo 查看
# 将构建成功之后的.so文件移动到 extension_dir(/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/) 文件下
mv ext/modules/hello.so /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/



vim /usr/local/php/etc/php.ini
extension=hello.so
# 重启fpm
systemctl restart php-fpm

测试使用

查看扩展

# 执行测试
php -r 'echo Hello\World::index();'

 

 方式二 编译安装

因环境版本有异,环境php版本为 7.4.32  

参考文档:

  1. php7.4以下参考《如何快速开发一个 PHP 扩展(PHP 扩展开发图文教程)》
  2. php7.4及以上版本参考《给PHP7.4编写扩展》
# 当前目录 /opt
# 下载php安装包,已存在则忽略
wget https://www.php.net/distributions/php-7.4.32.tar.gz
tar -xzvf php-7.4.32.tar.gz

cd /opt/php-7.4.32/ext
./ext_skel.php --help

# 生成扩展 kk
./ext_skel.php --ext kk
# ext文件夹下会生成kk文件夹 /opt/php-7.4.32/ext/kk

 1.编辑config.m4文件

 删除 标注行前面的dnl注释(config.m4文件是根据dnl注释的)

php-7.4版本默认是开启的不做更改

 2.编辑kk.c

vim kk.c
# 文件中已经存在kk_test1、kk_test2函数,我们参考它们写一个kk函数
PHP_FUNCTION(kk)
{
   zend_string *str;
   str = strpprintf(0, "my name is kk!");
   RETURN_STR(str);
}

# 在 zend_function_entry 添加
PHP_FE(kk, NULL)

 3.编译安装

# 编译扩展生成 configure 脚本
phpize
# 执行脚本编译参数
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

# 新增kk.so扩展
vim /usr/local/php/etc/php.ini
extension=kk.so

# 重启fpm
systemctl restart php-fpm
php -m

 

 4.验证测试

php -r "echo kk();"

 

posted @ 2023-01-03 11:59  php的自我修养  阅读(803)  评论(0编辑  收藏  举报