前言
本文采用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;
}
}
?>