zoukankan      html  css  js  c++  java
  • Linux 下编写一个 PHP 扩展

        假设需求

    开发一个叫做 helloWord 的扩展。

    扩展里有一个函数,helloWord()。

     

      echo helloWord('Tom');
        //返回:Hello World: Tom
    


        本地环境

    PHP版本:5.6.9

    系统:Linux CentOS release 6.5 (Final)

        最终效果



        实现流程

    第一步:

        进入到本地的php目录执行:
         

        cd /root/soft/src/php-5.6.9
        cd ext
        ./ext_skel --extname=helloWord
        cd helloWord
        vi config.m4
         
        搜索:dnl Otherwise use enable 将下面修改成:
         
        PHP_ARG_ENABLE(helloWorld, whether to enable helloWorld support,
        [  --enable-helloWorld           Enable helloWorld support])
         
        if test "$PHP_HELLOWORLD" != "no"; then
         
        ...
    


    如图:




    第二步:

     

      vi php_helloWorld.h
         
        搜索:extern zend_module_entry 新增一行:
         
        PHP_FUNCTION(helloWorld);
    


    如图:



    第三步:

     

       vi helloWorld.c
         
        搜索:const zend_function_entry helloWorld_functions[] 新增一行:
         
        PHP_FE(helloWorld, NULL)
    



    如图:



     

       在 helloWorld.c 底部新增一个方法
         
        PHP_FUNCTION(helloWorld)
        {
            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, "Hello World: %s", arg);
            RETURN_STRINGL(strg, len, 0);
        }
    


    如图:



    第四步:

     

      //编译安装
        cd /root/soft/src/php-5.6.9/ext
        /usr/local/php/bin/phpize #用phpize生成configure配置文件
        ./configure --with-php-config=/usr/local/php/bin/php-config   #配置
        make  #编译
        make install  #安装
    



    第五步:

     

       //修改php.ini
        extension="helloWorld.so"   #名称为安装扩展的名称
    


    第六步:

    重启环境。

    完成上面的步骤,简单的 helloWorld 扩展就OK了。

    大家可以根据自己的需求,开发满足自己的扩展。

    比如,可以开发一些扩展类,扩展方法,等等。

  • 相关阅读:
    自动生成 serialVersionUID 的设置
    常见的HTTP状态码(HTTP Status Code)说明
    PowerDesigner 创建表格及导出SQL语句
    简历
    idea+Maven+SSM框架增删改查
    @Resource和@Autowired的区别
    SSM java.lang.NullPointerException
    多进程和多线程的优缺点(二)
    多进程和多线程的优缺点
    基于swoole扩展实现真正的PHP数据库连接池
  • 原文地址:https://www.cnblogs.com/it-3327/p/11908667.html
Copyright © 2011-2022 走看看