如何编写一个php扩展

前言

本文采用7.4.3版本编写一个简单的扩展,供入门参考

初始化

通过ext_skel.php脚本创建了一个helloword扩展,脚本目录在/usr/local/php-7.4.3/ext目录下

/usr/local/php7/bin/php ./ext_skel.php --ext  helloword 

接着会在当前目录下看到生成了一个helloworld文件夹
在这里插入图片描述

加载方式介绍

有两种加载方式
1:–with-helloword
2:–enable-helloword

configure初始化

phpize也是一个shell脚本,做了编译工作相关的事情。
helloword目录下执行/usr/local/php7/bin/phpize,执行完后我们就可以看到这个目录生成了configure相关的文件
在这里插入图片描述

编写

编写helloword.c,可以通过PHP_FUNCTION定义函数,做一些事情

举例

PHP_FUNCTION(helloword_test2)
{
        char *var = "World";
        size_t var_len = sizeof("World") - 1;
        zend_string *retval;

        ZEND_PARSE_PARAMETERS_START(0, 1)
                Z_PARAM_OPTIONAL
                Z_PARAM_STRING(var, var_len)
        ZEND_PARSE_PARAMETERS_END();

        retval = strpprintf(0, "Hello %s", var);

        RETURN_STR(retval);
}

开始编译

1:./configure --with-php-config=/usr/local/php7/bin/php-config
2:make && make install

编译完成可以看到它把我们的扩展放到了这个目录下Installing shared extensions: /usr/local/php7/lib/php/extensions/debug-non-zts-20190902/modules,接着我们修改php.ini,重启php就好了。

加载扩展

./bin/php --ini查看php.ini在哪
./bin/php -m 查看当前加载的扩展

在php.ini中加上一行:extension = /usr/local/php7/lib/php/extensions/debug-non-zts-20190902/modules/helloword.so

./sbin/php-fpm restart
然后再用./bin/php -m 看看扩展是不是加上了

测试

<?php
helloword_test1();  //输出The extension helloword is loaded and working!
echo helloword_test2(); //输出Hello World
?>

另外一种检查扩展是否加载的方式


<?php
if (!extension_loaded('gd')) {
    if (!dl('gd.so')) {
        exit;
    }
}
?>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值