Total Pageviews

Friday 13 July 2018

Linux下,教你如何用C语言编写PHP扩展库

第一步:安装php5
第二步:打开终端【为来方便,这里使用root用户】,使用CD命令进入到php5源码包的ext目录
第三步:在终端键入以下命令
./ext_skel –extname=extest
我们的扩展库名叫“extest”,此命令执行后会在ext目录新建一个extest目录。
第四步:回到终端,使用CD命令进入extest目录,键入以下命令/var/web/php/bin/phpize
这是站长的phpize的目录,你需要修改成你自己的。运行完之后会在extest目录生成config.m4以及config.w32(windows底下使用),以及configure程序。
双击打开extest目录,打开php_extest.h文件,找到PHP_FUNCTION(confirm_extest_compiled);
在这一行的上面添加PHP_FUNCTION(extest_add);保存后退出。
这里是我们要为extest库编写的add函数到声明。
第五步:打开extest.c文件,找到const zend_function_entry extest_functions[],往下看3行,在PHP_FE_END的上面一行添加PHP_FE(extest_add,   NULL),在文件的最后添加函数实现到代码:
PHP_FUNCTION(extest_add)
{
long int a, b, c;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, “ll”, &a, &b) == FAILURE) {
return;
}
c = a + b;
RETURN_LONG(c);
}
保存后退出。
第六步:打开config.m4文件,找到PHP_ARG_WITH(extest, for extest support,删除本行最前面的dnl打开该行。找到[–with-extest          Include extest support]),删除本行前面的dnl打开本行。找到 AC_DEFINE(HAVE_EXTESTLIB,1,[ ]),删除本行前面的dnl打开本行。
第七步:回到终端,使用CD命令进入extest目录,键入命令:
./configure –with-php-config=/var/web/php/bin/php-config
make
make install
/var/web/php/bin/php-config这是站长php-config文件的目录,你应该修改成自己的。
编译顺利的话,在extest/moduels目录和/var/web/php/lib/php/extensions/no-debug-non-zts-20090626目录会产生一个extest.so文件。
第八步:打开php.ini,添加extension=extest.so,保存退出。
第九步:如果你用的是apache,重启apache。如果你用的是nginx+php-fpm,需要重启php-fpm。
如何重启php-fpm?站长没有做重启设置,应此只好先杀死php-fpm的进程在重新启动了。
打开/var/web/php/var/log/php-fpm.log,定位到文档最后,查看php-fpm到进程号,我的是2156.
回到终端,使用命令kill 2156杀死php-fpm进程。
然后重启php-fpm,回到终端使用CD命令进入/var/web/php/sbin目录,使用./php-fpm重启php-fpm。
第十步:测试扩展库。新建一个index.php文件,代码如下:
<?php
echo extest_add(1,2);
phpinfo();
?>
代码应该输出3和php的相关信息,ctrl+f搜索“extest”,你应该可以看到extest库已经被支持了。
OK,这只是一个简单到例子,教你如何使用C语言编写PHP库函数。在此我们编写的扩展采取的是动态加载的形式,比较方便。如果你想把扩展编译到php的内核中,在config.m4文件中有一行PHP_ARG_ENABLE。你应该打开它,然后在编译时使用–enable-extest命令,这里站长就不详细介绍了。如果读者感兴趣,可以自行搜索资料!

No comments:

Post a Comment