• php扩展开发之hello world


    最近在公司做的事情就是php扩展开发,虽然我只负责c++代码的编写,但是了解扩展开发的流程还是很有必要的。

    (本文介绍的是动态扩展,对静态扩展有兴趣的读者可自行google)

    php扩展开发环境搭建可参考:

    CentOS安装配置nginx和php

    假设我们需要增加一个函数echodemo_string,对应的php代码如下:

    function echodemo_string($param) {
        $result = "your input is $param";
        return $result;
    }

    1. 创建扩展框架

    这里要用到一个工具:ext_skel,它位于php源码目录的ext目录下。

    假设扩展的名字为echodemo。

    首先进入ext目录,

    创建文件echodemo.skel,编辑文件内容

    string echodemo_string(string param)
    

    然后执行:

    ./ext_skel --extname=echodemo --proto=echodemo.skel

    执行完毕会生成 echodemo 目录,目录包含如下内容:

    2. 修改配置

    打开config.m4,将第10、11、12行前面的dnl去掉,dnl表示注释。

    3. 实现功能

    打开echodemo.c,echodemo_string函数定义如下:

    修改该函数实现我们需要的功能,最终实现如下:

    (vim主题太丑了,我得换换。。。)

    4. 编译安装扩展

    这里需要用到phpize生成configure文件,在我的机器上,phpize位于/usr/local/php/bin目录。

    phpize
    ./configure --with-php-config=/usr/local/php/bin/php-config
    make
    make install

    当出现 "Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/",表示新的扩展 echodemo.so 已经安装完成。

    此时还需要做的一件事就是修改 php.ini 文件。

    不知道 php.ini 文件在哪?直接 php -i | grep php.ini 。我的在 /usr/local/php/lib 目录下。

    文件末尾追加一行:

    extension=echodemo.so

    5. 验证安装

    重启php-fpm:service php-fpm restart,

    检查扩展是否加载:

    php -m | grep echodemo

    如果顺利,终端会输出 echodemo。

    检查扩展代码是否正确:

    php -r "echo echodemo_string('hello world');"

    注意,我外部用的双引号,函数参数用的单引号,这是为了避免一些转义错误。

    参考资料:

    PHP扩展开发:第一个扩展

    Linux 下PHP扩展开发系列:二. 一个典型的扩展开发

    最后配张图:

  • 相关阅读:
    Android6.0-运行时权限处理
    Notification的基本用法以及使用RemoteView实现自定义布局
    Android Apk的反编译和加密
    SurfaceView的基本使用
    Java8部分新特性的学习
    Android的UI调优
    Builder模式详解及其在Android开发中的应用
    hex(x) 将整数x转换为16进制字符串
    oct(x) 将一个数字转化为8进制
    sum(iterable[, start]) 对集合求和
  • 原文地址:https://www.cnblogs.com/gattaca/p/6253387.html
Copyright © 2020-2023  润新知