zoukankan      html  css  js  c++  java
  • PHP扩展扩展的生成和编译

    首先说明一下,PHP扩展有两种编译方式:
    方式一:在编译PHP时直接将扩展编译进去
    方式二:扩展被编译成.so文件,在php.ini里配置加载路径;

    以下开始说明创建PHP扩展并编译的步骤:
    下载PHP源码,并解压,在源码的根目录下开始操作,
    1. 使用ext_skel生成扩展框架,如下:

    ➜ php-5.6.24 cd ~/Downloads/tmp/php-5.6.24
    ➜ php-5.6.24 cd ext
    ➜ ext ./ext_skel --extname=myfirstext

    ext_skel在执行后,会提示开发者后续的操作步骤,这个操作步骤是扩展的两种编译方式里的方式一的步骤, 如下:

    To use your new extension, you will have to execute the following steps:
    
    1.  $ cd ..
    2.  $ vi ext/plogger/config.m4
    3.  $ ./buildconf
    4.  $ ./configure --[with|enable]-plogger
    5.  $ make
    6.  $ ./sapi/cli/php -f ext/plogger/plogger.php
    7.  $ vi ext/plogger/plogger.c
    8.  $ make

    2. 修改文件ext/myfirstext/config.m4
    重点看line10-18的代码,用于设置./configure时启用此扩展的命令选项,将其中line16和line18的dnl删掉,把dnl理解为注释符。

    14 dnl Otherwise use enable:
    15
    16 dnl PHP_ARG_ENABLE(myfirstext, whether to enable myfirstext support,
    17 dnl Make sure that the comment is aligned:
    18 dnl [ --enable-myfirstext Enable myfirstext support])
    19
    20 if test "$PHP_MYFIRSTEXT" != "no"; then
    21 dnl Write more examples of tests here...

    以上两步骤是公共的,以下将分别介绍编译PHP扩展的两种方式,
    方式一:编译PHP时直接将扩展编译进去
    3. 在源码根目录下执行./buildconf,如下
    4. 在源码根目录下执行./configure –enable-myfirstext
    为了减少编译时间,可以在configure阶段指明不编译某些模块,比如:

    ./configure --without-iconv --enable-debug --enable-myfirstext --disable-cgi --enable-cli --without-pear --disable-xml --without-mysql

    5. 在源码根目录下执行make
    注意编译成功后,别执行make install了,因为至此,扩展myfirstext已经编译成功,并且已经生成了相应的php二进制文件了,它在./sapi/cli/php

    方式二:扩展被编译成.so文件,在php.ini里配置加载路径
    3. 在扩展目录ext/myfirstext/下执行phpize命令
    4. 在扩展目录ext/myfirstext/下执行./configure –enable-myfirstext命令
    5. 在扩展目录ext/myfirstext/下执行make
    执行make后会在ext/myfirstext/modules下生成对应的.so文件,在php.ini中配置好加载此文件即可。

    校验扩展是否加载成功
    执行./sapi/cli/php -f ext/myfirstext/myfirstext.php
    或者通过php -m列出所有扩展,查看是否有myfirstext, 执行命令:./sapi/cli/php -m | grep myfirstext
    通过以上校验,说明扩展编译成功了。但是到目前为止,还没有编辑过c相关的代码,一切都是ext_skel默认生成的,查看这个扩展myfirstext包含哪些函数呢?如下:

    ➜ php-5.6.24 ./sapi/cli/php -r 'print_r(get_extension_funcs("myfirstext"));'

    OK, 目前为止熟悉了PHP扩展框架的生成,配置,和编译。接下来就要往扩展myfirstext里添加一个自己的函数。

    qrcode_for_gh_61c6224cfae9_258

     
  • 相关阅读:
    thinkphp5 tp5 命名空间 报错 Namespace declaration statement has to be the very first statement in the script
    开启 php 错误 提示 php-fpm 重启 nginx 500错误 解决办法 wdlinux lnmp 一键包 php脚本无法解析执行
    js 设置 cookie 定时 弹出层 提示层 下次访问 不再显示 弹窗 getCookie setCookie setTimeout
    php 二维数组 转字符串 implode 方便 mysql in 查询
    nginx 重启 ps -ef|grep nginx kill -HUP 主进程号
    jquery bootstrap help-block input 表单 提示 帮助 信息
    jquery 倒计时 60秒 短信 验证码 js ajax 获取
    jQuery如何获取同一个类标签的所有的值 遍历
    linux下C语言文件操作相关函数
    gcc,gdb用法
  • 原文地址:https://www.cnblogs.com/beatzeus/p/6071883.html
Copyright © 2011-2022 走看看