首先声明,我是一个菜鸟。一下文章中现出技术误导情况盖不负责

本文通过非常倏地的方法解讲了如何作制一个PHP 5.4 环境的扩展(PHP Extension)

希望够能在图文的方法下让想倏地学习的友人解了一下作制进程。

需求:我们要写一个叫two的扩展,这个扩展里头有一个函数叫two_test

能功是输入一个字符串‘hello’ 则,返回this is two: 你输入的字符串是“hello”

一:先载下一份php码源---》址地

二: 生成扩展架构

1.  解压码源:

andy@ubuntu:~$ tar -zxvf php-5.4.14.tar.gz  对码源行进解包

2. 生成扩展架构:

php为了扩展开辟便利供提了一个相似生成器的工具,ext_skel在php码源的ext录目上面

我们要需执行它并且指定扩展的名字,然后它会帮我们生成这个扩展的架构

andy@ubuntu:~$ cd php-5.4.14/ext/

andy@ubuntu:~/php-5.4.14/ext$ sudo ./ext_skel --extname=two

三:修改置配:要需将扩展(two)上面的config.m4中的16,17,18三行前面的dnl删撤除

andy@ubuntu:~/php-5.4.14/ext$ cd two/
             andy@ubuntu:~/php-5.4.14/ext/two$ sudo vim config.m4

未修改之前:

修改以后:    

四:编写代码

1.andy@ubuntu:~/php-5.4.14/ext/two$ sudo vim php_two.h

找到第45行:PHP_FUNCTION(confirm_heiyeluren_compiled);

在这行上面新增一行:PHP_FUNCTION(two_test);

修改前:

修改后:

2.andy@ubuntu:~/php-5.4.14/ext/two$ sudo vim two.c

找到第42行:zend_function_entry heiyeluren_functions

在这里头加增一行PHP_FE(two, NULL)

修改前:

修改后:

最后:加增函数能功代码

PHP_FUNCTION(two_test)
{char *arg = NULL;int arg_len, len;char *strg;if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {return;}len = spprintf(&strg, 0, "

this is two: 你输入的字符串是

: %s/n", arg); RETURN_STRINGL(strg, len, 0); }

五:编译装安 这里的命令都在扩展two的录目下执行的

andy@ubuntu:~/php-5.4.14/ext/two$ sudo phpize 
             如果没有phpize要装安php5-dev 命令sudo apt-get install php5-dev

andy@ubuntu:~/php-5.4.14/ext/two$ sudo ./configure --with-php-config=/usr/bin/php/php-config

andy@ubuntu:~/php-5.4.14/ext/two$ sudo make

andy@ubuntu:~/php-5.4.14/ext/two$ sudo make test

andy@ubuntu:~/php-5.4.14/ext/two$ sudo make install

这时会现出:

每日一道理
曾经辉煌过,曾经凋零过,这可是你至死不渝的生活吗?我亲爱的母亲—大自然。多少次,我伏在地上,去聆听你沉重的脉搏声;多少次,我伫立在山前,去感受那松涛千年的浩瀚。你的豪壮,足以让中华民族腾飞;你的无私,谱写了一曲曲感人至深的千古壮曲。

可以到/usr/lib/php5/20100525/这个件文夹中去看看有没有一个叫two.so如果有就明说功成了

六:加载块模

编辑php.ini 入加extension = two.so

注意:如果你不存在扩展件文录目,或者装安报错,那么可以自行建立这个录目,然后把扩展拷贝到录目下,然后记得把 php.ini 件文中的                    extension_dir 修改成该录目:

离开php.ini 同录目下的conf.d下创立two.ini并写入extenstion=two.so 只要需这一行就行 。

七:启重apache

andy@ubuntu:/etc/php5/apache2/conf.d$ sudo /etc/init.d/apache2 restart

输出 phpinfo() ,查找two能看到

看看函数否是存在并且调用,在web录目下建立:two.php

<?php
echo two_test('hello');
?>

结果如图:

在现php扩展已作制功成了!

文章结束给大家分享下程序员的一些笑话语录: 程序员的愿望
  有一天一个程序员见到了上帝.上帝: 小伙子,我可以满足你一个愿望.程序员: 我希望中国国家队能再次打进世界杯.
  上帝: 这个啊!这个不好办啊,你还说下一个吧!
  程序员: 那好!我的下一个愿望是每天都能休息6个小时以上.
  上帝: 还是让中国国家打进世界杯.

转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/04/28/3049839.html

扩展修改ubuntu 13.04 用c快速编写一个php扩展相关推荐

  1. kdm桌面设置Linux,Ubuntu 13.04手动修改KDM、KSPLASH主题

    system:Ubuntu 13.04 x64 Qt: 4.8.4 KDE Development Platform: 4.10.5 kde4-config: 1.0 自从安装了KDE桌面管理系统至今 ...

  2. Ubuntu 13.04 Linux 3D桌面完全教程,显卡驱动安装方法,compiz特效介绍,常见问题解答

    [2013年4月28日更新] Ubuntu Linux 3D桌面完全教程,显卡驱动安装方法,compiz特效介绍,常见问题解答. 本教程最早是一善鱼 YQ-YSY 于2008年编写并发布在Ubuntu ...

  3. Ubuntu 13.04 系统管理初探

    Ubuntu 13.04 (代号 Raring Ringtail)正式版于上个月底发布,很多对 Ubuntu 情有独钟的网友已经迫不及待尝鲜了,51CTO系统频道也体验了一下,大家可以通过<Ub ...

  4. win7+ubuntu 13.04双系统安装方法

    转载自: win7+ubuntu 13.04双系统安装方法_百度经验 http://jingyan.baidu.com/article/60ccbceb18624464cab197ea.html?qq ...

  5. ubuntu 13.04 设置Dash中显示Eclipse

    在ubuntu 13.04 下安装安卓开发工具: adt-bundle  android-ndk-r8e 都是解压后配置环境变量就可以使用了.但是Dash搜索不到,看起来很不舒服. 设置如下: 1.终 ...

  6. 安装ubuntu 13.04

    http://geek100.com/2390 今天给笔记本装了Ubuntu 13.04. 用惯了windows, 再用Ubuntu挺新鲜的, 最明显的感觉是Ubuntu的字体更好看. 关于Ubunt ...

  7. VMware Workstation 8下Ubuntu 13.04中安装VMware Tools出错

    vm 8.0上安装ubuntu 13.04系统以后,需要安装一个vm tool 方便屏幕适应和文件拷贝,但是发现由于ubuntu 13.04 使用的内核太新了,而vm8.0 不能够提供这样的文件,导致 ...

  8. Ubuntu 13.04设置root用户登录图形界面

    [日期:2013-04-13] Ubuntu 13.04设置root用户登录图形界面与在Ubuntu 12.10中使用root进行登录方法类似. 相关阅读:Ubuntu 12.10设置root用户登录 ...

  9. ubuntu 13.04 找回丢失的grub2

    为什么80%的码农都做不了架构师?>>>    先恶补一下grub知识: 启动过程 计算机启动后,BIOS将寻找第一个可启动的设备(通常为硬盘),而后从MBR中载入启动程序,然后把控 ...

最新文章

  1. 因虚而安全---vsftpd虚拟用户
  2. 2018寒假作业学习总结
  3. Java 洛谷 P1219 八皇后
  4. 《构架之美》阅读笔记三
  5. python关键字的意思_python 关键字(Keywords)
  6. (计算机组成原理)第二章数据的表示和运算-第二节5:定点数乘法运算(原码/补码一位乘法)
  7. idea如何自制插件_Lice IntelliJ插件图标制作过程
  8. JAVA 语言如何进行异常处理,关键字: throws,throw,try,catch,finally分别代表什么意义? 在try块中可以抛 出异常吗?...
  9. Google glass GDK - 通过MP3路径获取专辑图片
  10. 分清函数指针和指针函数
  11. 26. Element nodeName 属性
  12. Qt SQL 学习笔记二:qt建立数据库,创建和操纵表
  13. centos使用迅雷远程下载
  14. flutter微信登录与支付--fluwx
  15. Latex——插入罗马字母或更改字体为公式体
  16. linux media v4l2,Overview of the V4L2 driver framework (v4l2_subdev)
  17. 转载:徐家骏:我在华为工作十年的感悟
  18. 【洛谷】P2713 罗马游戏
  19. 毕业设计-基于协同过滤算法的高校图书书目推荐系统
  20. 银行借记卡收费项目一览

热门文章

  1. 向git服务器添加shh公钥
  2. GPT生成精美Echarts图表
  3. JavaWeb中访问路径问题
  4. Hyper-v虚拟工具
  5. 百威英博分享酒店业中小企业如何渡过全球危机
  6. Markdown输出LaTex数学公式
  7. *crossed matchingpku 1692
  8. 4g运行内存手机还能用多久_4g运行内存(手机4g与6g运存的利弊)
  9. 全国计算机等级考怎么抽题,全国计算机等级考试一级B练习固定抽题第6套.doc
  10. 各厂商-链路聚合配置