声明:本文为斯人原创,全部为作者一一分析得之,有不对的地方望赐教。 http://imsiren.com/archives/568 php写扩展.. 如果您还么有读 原:用c/c++扩展php 建议您先看一下这篇文章.. 今天来个简单的..我们用扩展方式创建一个变量 $siren. 然后在php文件里面输
声明:本文为斯人原创,全部为作者一一分析得之,有不对的地方望赐教。
http://imsiren.com/archives/568
php写扩展..
如果您还么有读 原:用c/c++扩展php
建议您先看一下 这篇文章..
今天来个简单的..我们用扩展方式创建一个变量 $siren.
然后在php文件里面输出这个变量.
1. 执行源码目录中的 ext_skel –extname=siren
执行成功过后就会在php-src/ext/目录下生成一个siren的文件件,里面包含了扩展的基本结构.
2.修改config.m4
因为我的系统是linux所以要修改此文件,我们采用so模块的形式加载,所以编辑config.m4文件
dnl php_arg_with(siren, for siren support,dnl make sure that the comment is aligned:dnl [ --with-siren include siren support])
http://imsiren.com/archives/5473.编辑php_siren.h
此文件是一个头文件,包含了我们函数的定义.
我要新建一个variable函数,首先需要在此文件里面加一行代码:php_function(variable); 可以理解为声明一个函数
4.修改siren.c源文件
在siren_functions数组里面添加一行 php_fe(variable,null);
然后在 最下面添加如下代码
php_function(variable){ zval* val; make_std_zval(val); zval_string(val,this is siren,1); zend_set_symbol(eg(active_symbol_table),siren,val);}
zval接口用来保存变量的信息
make_std_zval宏用来分配内存空间
zval_string宏给zval结构设置信息.const char *__s=(s); \z_strlen_p(z) = strlen(__s); \z_strval_p(z) = (duplicate?estrndup(__s, z_strlen_p(z)):(char*)__s);\z_type_p(z) = is_string;
如果不懂 请参见 原创:php内核研究:hash表和变量
最后在php-src/ext/siren目录下执行
1. php安装目录/bin/phpize
2. ./configure –with-php-config=/php安装目录/bin/php-config
3. make && make install
这样 执行后就会在 php的扩展目录下生成一个 siren.so文件
4. 修改php.ini extension=siren.so 开启扩展
5. 编写php文件 执行 variable(); 然后 echo $siren;
看看是不是输出了 “this is siren”呢?
怎么样 是不是很简单..
http://imsiren.com/archives/568