php程序写的时间长了,自然对他所提供的功能了如指掌,他所提供的一大堆功能,真是觉得很好用,但有时候会发现php也缺少一些功能,自己总是会产生为php添加一些自定义的功能的想法。久而久之,终于今天憋不住了,开始动手研究如何添加。

下载一个php的源代码包,这里使用的是php 4.0.5版,解压后会看到php的根目录下会有README.EXT_SKEL这样一个文件,打开具体阅读了一下,发现了一个非常好用的工具,这个工具可以帮你构建一个空的php扩展,然后你向里面添加相应的代码就可以完成你自己的功能扩展了。下面我们就来介绍如何使用这个工具。

首先转移你的目录到php的目录下的ext目录,假如你只需要一个基本的扩展框架的话,执行下面的命令:

./ext_skel --extname=module_name

module_name是你自己可以选择的扩展模块的名字,例如我选择的my_module。执行工具后会自动在ext目录下建立你选择的module_name名字的目录,里面已经生成了相关的代码,这些代码中只需要调整config.m4文件中的三行注释就可以正常的编译带这个自定义扩展模块的php了。在php的根目录执行下列操作就可以得到。

./buildconf

./configure --enable-module_name

make

下面我来演示建立my_module扩展框架的全过程,为了更有效果,我们来完成一个php的扩展功能,在php中调用这个功能可以在web页面中显示hello world这个经典单词。

在php目录下的ext目录中,执行下面的命令

./ext_skel --extname=my_module

得到反馈结果:

Creating directory my_module

Creating basic files: config.m4 Makefile.in .cvsignore my_module.c php_my_module.h tests/001.phpt my_module.php [done].

To use your new extension, you will have to execute the following steps:

1. $ cd ..

2. $ vi ext/my_module/config.m4

3. $ ./buildconf

4. $ ./configure --[with|enable]-my_module

5. $ make

6. $ ./php -f ext/my_module/my_module.php

7. $ vi ext/my_module/my_module.c

8. $ make

Repeat steps 3-6 until you are satisfied with ext/my_module/config.m4 and

step 6 confirms that your module is compiled into PHP. Then, start writing

code and repeat the last two steps as often as necessary.

在文件的最后添加下列代码

PHP_FUNCTION(say_hello)

{

zend_printf("hello worldn");

}

保存文件退出

vi php_my_module.h

在文件中PHP_FUNCTION(confirm_my_module_compiled);一行前面添加下面的代码

PHP_FUNCTION(say_hello);

保存文件退出

退回到php的根目录下,执行下面的命令

./buildconf

./configure --enable-my_module

make

假如一切顺利的话,我们现在已经将扩展模块my_module编译到php里面了。我们编写下面的代码进行测试

Say_hello();

?>

保存文件为say_hello.php

在php的根目录下运行

./php

php编写函数6,编写自己的PHP扩展函数相关推荐

  1. R语言data.table导入数据实战:data.table中编写函数并使用SD数据对象

    R语言data.table导入数据实战:data.table中编写函数并使用SD数据对象 目录 R语言data.table导入数据实战:data.table中编写函数并使用SD数据对象 #data.t ...

  2. 提高代码质量:如何编写函数

    原文地址:http://luopq.com/2016/02/21/write-good-function/  函数是实现程序功能的最基本单位,每一个程序都是由一个个最基本的函数构成的.写好一个函数是提 ...

  3. 编写函数,模拟内置函数 sorted()。

    编写函数,模拟内置函数 sorted(). 用python来简单的模拟sorted可以用库函数来进行,也较为简单,我选了min()和sort()来进行模拟 利用min()函数 def sorteds( ...

  4. 编写函数,可以接收任意多个整数并输出其中的最大值和所有整数之和。

    编写函数,可以接收任意多个整数并输出其中的最大值和所有整数之和. numbers = [] #创建空列表来装输入值mes = "Please enter number,and you can ...

  5. 编写函数实现员工信息录入和输出_编写我的第一个Linux 内核模块“hello_module”...

    前言: Linux 内 核 模 块 全 称 为 " 动 态 可 加 载 内 核 模 块 (Loadable Kernel Module,LKM)",是系统内核向外部提供的功能插口. ...

  6. c语言数组将素数放在前部,m个人的成绩存放在score数组中,请编写函数fun(),它的功能是将高于平均分的人数作为函数值返回,将_开卷宝...

    学生的记录由学号和成绩组成,N名学生的数据己在主函数中放入结构体数组s中,请编写函数fun(),它的 学生的记录由学号和成绩组成,N名学生的数据己在主函数中放入结构体数组s中,请编写函数fun(),它 ...

  7. 编写分段函数子函数_编写自己的函数

    编写分段函数子函数 PYTHON编程 (PYTHON PROGRAMMING) In Python, you can define your own functions. 在Python中,您可以定义 ...

  8. mysql编写函数 求1 n 偶数之和,编写求1 2 3 - n的函数.在main函数中调用该函数

    输入两个正整数m,n,编写求阶乘的函数,计算m!/(n!*(m-n)!). C语言函数解答,谢谢. #includelongfactorial(intm,intn){longsum=1,sum1=1; ...

  9. C语言九十四之请编写函数fun(char *str, int n),其功能是:使字符串str的前导*号不能多余n个,若多于n个,则删除多余的*号,若少于或等于n个,则不做处理。

    1.题目 规定输入的字符串中只包含字母和*号,请编写函数fun(char *str, int n),其功能是:使字符串str的前导*号不能多余n个,若多于n个,则删除多余的*号,若少于或等于n个,则不 ...

最新文章

  1. linux 磁盘性能监控
  2. netcore实践:跨平台动态加载native组件
  3. 经典ICP算法的问题
  4. 写写最近吧,关于读研、找工作
  5. 容大打印机ip修改工具_M1芯片版Mac无法连接打印机怎么办?
  6. matlab中函数绝对值图像,ex的图像(绝对值的函数图像口诀)
  7. 【antlr】antlr语法中的fragment
  8. extjs的grid应用(java 使用json绑定数据 翻页)
  9. python3语法学习第四天--序列
  10. mysql 查看锁表_MySQL的四种事务隔离级别
  11. 自动驾驶仿真:Carsim、NI和VTD联合仿真课题一
  12. 2016二级java题型分数_2016年英语六级考试题型、试卷结构及分值比例
  13. List集合按数量分组
  14. 实现读文本文件(IOl流)
  15. 服务器向客户端推送消息之——WebSocket详细使用
  16. macos 打开终端弹出:(eval):export:1: not valid in this context: Fusion.app/Contents/Public
  17. 读透《阿里巴巴数据中台实践》,其到底有什么高明之处?
  18. c语言模拟洛伦兹吸引子,洛伦兹吸引子相图的简易实现.pdf
  19. 太原理工电子信焦工程_太原理工大学电工电子技术剖析.ppt
  20. vue实现登录路由跳转到成功页面

热门文章

  1. php 编程祝新年快乐_AnyCodes:免费的在线编程神器
  2. python时间重叠_最常见的重叠范围-Python3.x
  3. Deployment详解
  4. 可以插卡的ipad_ipad哪个可以插手机卡上网的?
  5. jstack-查看Java进程的线程堆栈信息,锁定高消耗资源代码
  6. Markdown编辑表格时如何输入竖线('|', pipe,vertical bar)
  7. linux定时刷新窗口,Linux的屏幕刷新率问题 窗口调整问题
  8. 关于python赋值语句下列选项中描述正确的是_关于Python的分支结构,以下选项中描述正确的是()。...
  9. shell中join链接多个域_shell 如何实现两个表的join操作
  10. 圆形百分比_还有半圆形的饼图!怎么做出来的?