linux系统
php源码包下载地址:https://www.php.net/downloads.php
PHP 7.3开始,开发扩展,取消了 ./ext_skel 命令工具,
要使用 php ext_skel.php 命令的形式创建扩展
php源码安装我就不多说了,参照我的另一篇文章
javascript:void(0) 输入命令:
php -v
PHP 7.3.29 (cli) (built: Aug 2 2021 13:48:12) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.29, Copyright (c) 1998-2018 Zend Technologies
表示php源码安装已经安装好了
在ext目录执行命令
php ext_skel.php --ext foobar
命令执行完毕后输出:
Copying config scripts... done
Copying sources... done
Copying tests... done
...
这表示已成功生成名为foobar的PHP扩展的基本骨架,在当前目录生成了一个foobar的文件夹,我们扩展的所有代码都将放在此目录下。目录下面会生成这几个文件:config.m4,config.w32,foobar.c,php_foobar.h tests.
编辑php_foobar.h,最后加上这一行:
PHP_FUNCTION(halo);
编辑foobar.c,找到这个方法
static const zend_function_entry foobar_functions[] = {
PHP_FE(foobar_test1, arginfo_foobar_test1)
PHP_FE(foobar_test2, arginfo_foobar_test2)
PHP_FE_END
};
在最后一句前面加上这一行:
static const zend_function_entry foobar_functions[] = {
PHP_FE(foobar_test1, arginfo_foobar_test1)
PHP_FE(foobar_test2, arginfo_foobar_test2)
PHP_FE(halo,NULL)
PHP_FE_END
};
接下来是真正编写halo函数实现的时候。
在文件末尾添加以下代码:
PHP_FUNCTION(halo){
php_printf("hello world!");
}
注意:这里的字符串不能用单引号,这是c语言的代码。
下面开始编译安装扩展
首先确保已经安装phpize,进入到扩展目录执行下面的命令:
[root@localhost foobar]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20180731
Zend Module Api No: 20180731
Zend Extension Api No: 320180731
接着执行下面的命令
[root@localhost foobar]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@localhost foobar]# make && make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/
看到最后这行表示扩展编译安装成功
打开扩展目录多了一个foobar.so
[root@localhost foobar]# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/
foobar.so opcache.a opcache.so
打开PHP的配置文件php.ini,在文件的末尾加入以下内容:
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/foobar.so
执行查看扩展命令:
[root@localhost foobar]# php -m
[PHP Modules]
Core
ctype
date
dom
fileinfo
filter
foobar
hash
iconv
json
libxml
mbstring
openssl
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
发现多了一个foobar
接下来我们来验证一番,在/root/php目录新建一个php文件填入以下内容:
<?php
halo();
接着我们执行这个PHP文件
[root@localhost php]# php foobar.php
hello world!
看到以上输出表示我们编写的扩展已经大功告成了。
如果你觉得这文章不错,请给我点个赞吧_!