侧边栏壁纸
  • 累计撰写 47 篇文章
  • 累计收到 0 条评论
PHP

开发PHP扩展

2022-10-12 / 0 评论 / 323 阅读
温馨提示:
本文最后更新于 2022-10-12,已超过半年没有更新,若内容或图片失效,请留言反馈。

PHP 的底层是由 c/c++ 实现的,所以 PHP 本身就是一层皮,而我们也可以通过开发一些扩展来增强 PHP 的能力。可以通过 php -mphpinfo() 来查看环境中已安装的扩展。这里使用的PHP 版本是 7.4, 为了方便演示 PHP源码文件在 /Users/linshan/Container/C/php-7.4.24, 编译安装的目录为 /Users/linshan/Container/C/php-7.4.24/php74

生成扩展

进入源码目录下的 ext 目录, 可以看到下面有个 ext_skel.php 文件,该文件是用来生成扩展工程的脚手架命令。

如上命令, 生成名称为 goext 的 PHP 扩展, 在 ext 目录下会生成 goext 文件夹, 该目录下将存放相关扩展的内容。对于 PHP7 是不需要对 php_goext.hgoext.c 文件做任何其他变更,可以直接添加自己需要的函数。

打开 goext.c 找一个有利的位置添加以下代码:

PHP_FUNCTION(go_version)
{
     php_printf("v1.17");
}

然后找到 static const zend_function_entry goext_functions[] 这行, 将定义的函数添加进来:

到此, PHP 最简单的扩展就已经完成了, go_version 函数的定义在这里的寓意为: 假设用来获取 golang 的版本号。

编译安装

写完了扩展总得检查看看能不能编译吧。接下来我演示下编译安装 goext 扩展。

首先, 进入到 goext 扩展目录。

cd /Users/linshan/Container/C/php-7.4.24/ext/goext

执行 phpize 命令来生成相应的 configure 文件, 已便后续的编译扩展。

/Users/linshan/Container/C/php-7.4.24/php74/bin/phpize 

配置安装扩展参数

./configure --with-php-config=/Users/linshan/Container/C/php-7.4.24/php74/bin/php-config

接下来就是编译安装。

make && make install

如无意外, 您将看到类似下面的界面, 表示编译成功了, PHP 会将 so 文件移动到 PHP 扩展的默认文件路径下。

ini 添加扩展

既然扩展编译安装完成, 那我们就看看能不能加入到 PHP 扩展里并使用吧。

查看下 php.ini 所在的位置。

/Users/linshan/Container/C/php-7.4.24/php74/bin/php -i |grep php.ini

打开 php.ini 文件并加入 goext 扩展。

vi  /Users/linshan/Container/C/php-7.4.24/php74/lib/php.ini

检查下 goext 扩展是否安装成功。

/Users/linshan/Container/C/php-7.4.24/php74/bin/php -m

// 当然, 您也可以使用命令: /Users/linshan/Container/C/php-7.4.24/php74/bin/php --ri goext

代码调试

简单检查看看能不能调用里面定义的 go_version 函数。

/Users/linshan/Container/C/php-7.4.24/php74/bin/php -r "echo go_version();"

扩展运行成功, 完美输出内容!!!

评论一下?

OωO
取消