ubuntu 13.04 用c快速编写一个php扩展

16 篇文章 0 订阅
4 篇文章 0 订阅

本文通过非常快速的方式讲解了如何制作一个PHP 5.4 环境的扩展(PHP Extension)

希望能够在图文的方式下让想快速学习的朋友了解一下制作过程。


需求:我们要写一个叫two的扩展,这个扩展里面有一个函数叫two_test

          功能是输入一个字符串‘hello’ 则,返回this is two: 你输入的字符串是“hello”


一:先下载一份php源码---》地址


二: 生成扩展架构 

         1.  解压源码:

               andy@ubuntu:~$ tar -zxvf php-5.4.14.tar.gz  对源码进行解包

          2. 生成扩展架构:

              php为了扩展开发方便提供了一个类似生成器的工具,ext_skel在php源码的ext目录下面

              我们需要执行它并且指定扩展的名字,然后它会帮我们生成这个扩展的架构

              andy@ubuntu:~$ cd php-5.4.14/ext/

              andy@ubuntu:~/php-5.4.14/ext$ sudo ./ext_skel --extname=two

三:修改配置:需要将扩展(two)下面的config.m4中的16,17,18三行前面的dnl删除掉

             andy@ubuntu:~/php-5.4.14/ext$ cd two/
             andy@ubuntu:~/php-5.4.14/ext/two$ sudo vim config.m4


             未修改之前:


             修改之后:    

四:编写代码

           1.andy@ubuntu:~/php-5.4.14/ext/two$ sudo vim php_two.h

              找到第45行:PHP_FUNCTION(confirm_heiyeluren_compiled); 

              在这行下面新增一行:PHP_FUNCTION(two_test); 

          修改前:


          修改后:

       2.andy@ubuntu:~/php-5.4.14/ext/two$ sudo vim two.c

           找到第42行:zend_function_entry heiyeluren_functions

           在这里面增加一行PHP_FE(two, NULL)

           修改前:


            修改后:


            最后:增加函数功能代码

PHP_FUNCTION(two_test)
{
    char *arg = NULL;
    int arg_len, len;
    char *strg;
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
        return;
    }
    len = spprintf(&strg, 0, "this is two: 你输入的字符串是: %s/n", arg);
    RETURN_STRINGL(strg, len, 0);
}
五:编译安装 这里的命令都在扩展two的目录下执行的

             andy@ubuntu:~/php-5.4.14/ext/two$ sudo phpize 
             如果没有phpize要安装php5-dev 命令sudo apt-get install php5-dev

             andy@ubuntu:~/php-5.4.14/ext/two$ sudo ./configure --with-php-config=/usr/bin/php-config

             andy@ubuntu:~/php-5.4.14/ext/two$ sudo make

             andy@ubuntu:~/php-5.4.14/ext/two$ sudo make test

             andy@ubuntu:~/php-5.4.14/ext/two$ sudo make install

             这时会出现:


             可以到/usr/lib/php5/20100525/这个文件夹中去看看有没有一个叫two.so如果有就说明成功了

              


六:加载模块

        编辑php.ini 加入extension = two.so

         

       注意:如果你不存在扩展文件目录,或者安装报错,那么可以自行建立这个目录,然后把扩展拷贝到目录下,然后记得把 php.ini 文件中的                    extension_dir 修改为该目录:

       

      来到php.ini 同目录下的conf.d下创建two.ini并写入extenstion=two.so 只需要这一行就行 。

七:重启apache

        andy@ubuntu:/etc/php5/apache2/conf.d$ sudo /etc/init.d/apache2 restart

         输出 phpinfo() ,查找two能看到

         

         看看函数是否存在并且调用,在web目录下建立:two.php

<?php
echo two_test('hello');
?>
结果如图:

现在php扩展已经制作成功了!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值