zoukankan      html  css  js  c++  java
  • 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扩展开发系列:二. 一个典型的扩展开发

    最后配张图:

  • 相关阅读:
    linux下Tomcat配置提示权限不够解决办法
    Linux 生成SSL证书 供 nginx使用
    mysql存储emoji表情报错的处理方法【更改编码为utf8mb4】
    Linux Mysql 备份与还原
    Linux 安装Mysql
    Linux 卸载Mysql
    Linux yum安装java环境
    InMemoryUploadedFile对象复制到磁盘中的临时路径
    在django中使用(配置)celery
    使用ffmpeg以mp4的格式保存视频
  • 原文地址:https://www.cnblogs.com/gattaca/p/6253387.html
Copyright © 2011-2022 走看看