首先说明一下,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里添加一个自己的函数。

转载于:https://www.cnblogs.com/beatzeus/p/6071883.html

PHP扩展-扩展的生成和编译相关推荐

  1. 编译原理,C语言实现LR(0)分析(扩展文法的生成、项目集规范簇的生成、ACTION GOTO表的生成、句子的分析)

    编译原理,C语言实现LR0分析扩展文法的生成.项目集规范簇的生成.ACTION GOTO表的生成.句子的分析 演示 演示所用文法和句子 (1)根据提示输入文法的个数 (2)输入文法 (3)扩展文法的生 ...

  2. 获取当前横竖屏_Chrome扩展程序一键生成网页骨架屏

    对于依赖接口渲染的页面,在拿到数据之前页面往往是空白的,为了提示用户当前正在加载中,往往会使用进度条.loading图标或骨架屏的方式.对于前两种方案而言,实现比较简单:本文主要研究骨架屏的应用及实现 ...

  3. activex for chrome扩展程序 下载”_Chrome扩展程序一键生成网页骨架屏

    对于依赖接口渲染的页面,在拿到数据之前页面往往是空白的,为了提示用户当前正在加载中,往往会使用进度条.loading图标或骨架屏的方式.对于前两种方案而言,实现比较简单:本文主要研究骨架屏的应用及实现 ...

  4. java编译后的扩展名,Java源程序的扩展名是( ),经过编译后的程序的扩展名是( )...

    源程译后 序的序 扩展扩展 名名 过编 源程译后 序的序 扩展扩展 名名 药物者治该患疗的适宜是. 过编 多次大便细菌培养阴性,钡剂X线消失状结检查见乙肠袋,患者,女,变细肠管,便10余脓血年反复发作 ...

  5. 【译】Chrome 扩展 : 扩展是什么?

    引子 按照 Chrome 扩展 : 欢迎中的引导,接触到的相关介绍. 原文:What are extensions? 版本:Last updated: Friday, March 12, 2021 源 ...

  6. windows下编译php扩展,windows下开发并编译PHP扩展的方法_php

    现在就简单说一在WINDOWS下开发php扩展的步骤: 首先需要准备的软件有: cygwin 安装路径e:/app/cygwin visual studio C++ 6.0, 修改环境变量,把已经安装 ...

  7. cents OS7 使用phpize安装php扩展库,生成.so文件(超详细)

    举个栗子:本次安装openssl拓展 一.扩展库检查 1.找到php安装目录 find / -name php 在/usr/local/php 2.进入拓展库检查ssh2是否存在 /usr/local ...

  8. 这个VS Code扩展可以自动生成Python文档字符串

    机器之心报道 编辑:魔王 该扩展利用可处理编程语言和自然语言的预训练模型 CodeBERT,实现快速生成 Python 文档字符串的功能. Visual Studio Code(简称 VS Code) ...

  9. 利用CodeBERT,这个VS Code扩展可以自动生成Python文档字符串

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:机器之心 该扩展利用可处理编程语言和自然语言的预训练模型 CodeBERT,实现 ...

最新文章

  1. qt获取当前系统音量值_Qt编写自定义控件50-迷你仪表盘
  2. “老赖”罗永浩:就算“卖艺”也会还债!孙宇晨:我买!
  3. 云计算技术 — 数据中心基础架构变迁史
  4. 顺序表循环队列:创建初始化、入队、出队、获取队列头数据、计算队列有效数据长度...
  5. IIS 应用程序池设置
  6. win命令安装 安装cmake_win10下VSCode+CMake+Clang+GCC环境搭建教程图解
  7. hdu 5424(dfs搜索)
  8. aop springboot 传入参数_Spring、SpringMVC和SpringBoot看这一篇就够了!
  9. HEOI 2017 游记
  10. 你真的会用storyboard开发吗?
  11. mysql 对已有表分区_mysql怎么对先有表进行分区
  12. 21克:仅需3天,我们就用Quick BI搭建起数据驾驶舱
  13. 计算机html二级难度,计算机二级考试越来越难的实锤!真实数据告诉你到底难在哪里?...
  14. linux下mysql 启动命令
  15. 18.pika 安装
  16. 品高云产品经理邱洋:做国内云计算第一品牌
  17. ERROR: Unsupported method: AndroidProject.getVariantNames().
  18. 云存储收银系统_重磅丨远丰云收银系统WebPos升级 开启智能收银新时代
  19. 半导体物理学习笔记(一)
  20. EnergyPlus笔记

热门文章

  1. android的窗口机制分析------事件处理
  2. MXNet设计和实现简介
  3. Binder fuzz安全研究
  4. 原生html小游戏,原生JS实现别踩白块小游戏(一)
  5. JZOJ 5452. 【NOIP2017提高A组冲刺11.5】轰炸
  6. JZOJ 5197. 【NOIP2017提高组模拟7.3】C
  7. Qt中qDebug()技巧初探
  8. mysql 主表某一列 小于某一个表的两列之和_关于MySQL索引知识与小妙招
  9. 前端接收pdf文件_如何实现springmvc将返回的给前端的pdf文件放在浏览器里预览
  10. 如何利用计算机解决问题,《用计算机解决问题的一般步骤》讲课教案