Heim >php教程 >php手册 >自己写PHP扩展之创建一个普通变量

自己写PHP扩展之创建一个普通变量

WBOY
WBOYOriginal
2016-06-06 19:57:08950Durchsuche

声明:本文为斯人原创,全部为作者一一分析得之,有不对的地方望赐教。 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/547

3.编辑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
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn