利用C语言怎么编写一个PHP扩展

介绍

这篇文章将为大家详细讲解有关利用C语言怎么编写一个PHP扩展,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

<强> 1:预定义
在家里目录,也可以其他任意目录,写一个文件,例如caleng_module.def
内容是你希望定义的函数名以及参数:
int (int x, int y) b
字符串(string str, int n)

<强> 2:到PHP源码目录的ext目录
# cd/usr/local/php-5.4.0/ext/

执行命令,生成对应扩展目录
#。/ext_skel——extname=caleng_module——原型=/home/hm caleng_module.def

<强> 3:修改config.m4
去掉dnl的注释

PHP_ARG_ENABLE (caleng_module,是否启用caleng_module支持,
确保评论对齐:
(,——enable-caleng_module ,,,,,,,,,启用caleng_module支持])

<强> 4:修改caleng_module。c

代码如下:


/*{{{原型int一(int x, int y)
,,,*/
PHP_FUNCTION (a)
{
, int命令行参数个数=ZEND_NUM_ARGS ();
, int x;
, int y;
,,,int z;
,如果(zend_parse_parameters(命令行参数个数TSRMLS_CC,“ll",, x,, y)==失败)

,,回报,z=x + y;

,, RETURN_LONG (z);
}
/*}}} */
/* {{{b原型字符串(string str, int n)
,,,*/
PHP_FUNCTION (b)
{
, char * str=零;
,,,int命令行参数个数=ZEND_NUM_ARGS ();
,,,int str_len;
,,,长n;
,,,char *结果;
,,,char * ptr;
,,,int result_length;

,,,“如果(zend_parse_parameters(命令行参数个数TSRMLS_CC; sl",, str,, str_len,, n)==失败)
,,,,,,,返回;
,,,result_length=str_len * n;
,,,结果=(char *) emalloc (result_length + 1);
,,,ptr=结果;
,,,而(n)) {
,,,,,,,memcpy(简称:str, str_len);
,,,,,,,ptr +=str_len;
,,,}
,,,* ptr=& # 39; \ 0 & # 39;;
,,,RETURN_STRINGL(结果result_length 0);
}
/*}}} */


<强> 5:生成扩展库
# cd。/caleng_module
#/usr/地方/php/bin/phpize
#。/configure——with-php-config=/usr/地方/php/bin/php-config
#让
#让安装

利用C语言怎么编写一个php扩展”> <br/> <br/> <强> 6:到php的对应扩展目录<br/> </>强如上图所示<br/> # cd/usr/local/php/lib/php/extensions/no -调试-非zt型- 20100525/<br/>改目录下有生成的caleng_module.so文件<br/> <br/> <强> 7:修改php . ini中<br/> </强> . ini如果找不到可以从phpinfo()打出的信息看到<br/> # cd/usr/local/php/lib/<br/> . ini增加扩展信息<br/>, <br/> <强> 8:重启Apache <br/> </强> #/usr/local/apache2/bin/apachectl重启<br/> <br/> <强> 9:检查加载<br/> </强>,/usr/地方/php/bin/php - m <br/> <br/> <强> 10:php调用<br/> </强> </p> <p>代码如下:</p> <p> <br/>回波(1、2),<br/> </p> <p> <br/>输出3,就说明成功了! <br/>=================================<br/>下面是原文<br/> <强> Linux下用C开发PHP扩展<br/> </强>一,首先下载PHP源码包,假设源码包目录为:/软件/php-5.2.13 <br/>一,首先下载PHP源码包,假设源码包目录为:/软件/php-5.2.13 <br/> #比;cd/软件/php-5.2.13/ext <br/>二,假设我们要开发一个名为caleng_module的扩展,该扩展包含两个函数:一个——处理两个整型相加和b -处理字符串重复输出。<br/> 1,首先编写一个函数定义文件,该文件编写函数原型后缀为def,假设为:caleng_module.def <br/> int (int x, int y) b <br/>字符串(string str, int n) <br/> 2,通过扩展骨架生成器,将在ext目录下自动建立扩展目录caleng_module <br/> #比;。/ext_skel——extname=caleng_module原型=caleng_module.def <br/> 3,修改配置文件:#比;vim/软件/php-5.2.13/ext/caleng_module/config.m4,将如下行的注释标签“dnl PHP_ARG_ENABLE (myfunction,是否启用myfunction支持,
确保评论对齐:
(,——enable-myfunctions ,,,,,,,,,启用myfunction支持])
4,完善函数a和b的功能:#比;vim/软件/php-5.2.13/ext/caleng_module caleng_module.c
PHP_FUNCTION (a)
{
,,,int x, y, z,

,,,int命令行参数个数=ZEND_NUM_ARGS ();

,,,“如果(zend_parse_parameters(命令行参数个数TSRMLS_CC; ll",, x,, y)==失败)
,,,,,,,返回;
,,,z=x + y;
,,,RETURN_LONG (z);
}
PHP_FUNCTION (b)
{
,,,char * str=零;
,,,int命令行参数个数=ZEND_NUM_ARGS ();
,,,int str_len;
,,,长n;
,,,char *结果;
,,,char * ptr;
,,,int result_length;

,,,“如果(zend_parse_parameters(命令行参数个数TSRMLS_CC; sl",, str,, str_len,, n)==失败)
,,,,,,,返回;
,,,result_length=str_len * n;
,,,结果=(char *) emalloc (result_length + 1);
,,,null

利用C语言怎么编写一个PHP扩展