为什么80%的码农都做不了架构师?>>>   

<HEAD>

   下面的操作是在Ubuntu 12.04下,并且已经搭建了LAMP环境.

</HEAD>

一.下载PHP源码

1.首先安装GIT   

sudo apt-get install git 

2.克隆PHP源码

cd /
git clone https://github.com/php/php-src.git
ls

会看到php-src文件夹

3.进入ext目录

cd php-src/ext
ls

会看见很多扩展如curl,pdo等,同时还会看见用来建立扩展的脚本ext_skel

二.建立骨架修改参数

1.利用ext_skel建立骨架

./ext_skel --extname=yourname

yourname为你想建立的扩展的名字,我们先建一个,例如为rube

建立好后当前文件夹下会出现rube这个文件夹

cd rube

2.修改config,m4的参数

vim config.m4dnl Otherwise use enable:PHP_ARG_ENABLE(rube, whether to enable rube support,
dnl Make sure that the comment is aligned:[  --enable-rube           Enable rube support])

将PHP_ARG_ENABLE(rube, whether to enable rube support 和 [  --enable-rube             Enable rube support]  这两行前面的dnl 去掉 。修改成如上所示

三.编写php_rube.h 和 rube.c

1.编辑php_rube.h

vim php_rube.h

在php_rube.h的最后面添加

PHP_FUNCTION(confirm_rube_compiled);
PHP_FUNCTION(hello);

hello 为你要创建的那个函数

2.编辑rube.c

vim rube.cconst zend_function_entry rube_functions[] = {PHP_FE(confirm_rube_compiled,    NULL)      PHP_FE(hello,    NULL)         PHP_FE_END
};

修改zend_function_entry rube_functions[] , 在PHP_FE(confirm_rube_compiled,   NULL)后面添加

 PHP_FE(hello,    NULL)

3.编写函数

接下来编写hello这个函数,首先编写一个简单的输出"Hello my first extention"的函数。。。

在rube.c的最后面添加

PHP_FUNCTION(hello)
{
char *arg = "Hello my first extention!";
int  len;
char *strg;len = spprintf(&strg, 0, "%s\n", arg);
RETURN_STRINGL(strg, len, 0);
}

保存后退出

四.编译代码

1.编译成so文件

cd /php-src/ext/rube
whereis phpize

看是否存在phpize

如果存在运行phpize,否则用

sudo apt-get install php5-dev
进行安装后运行
phpize

然后

./configure --with-php-config=你的php-config位置

如果找不到php-config的位置

whereis php-config
./configure --with-php-config=你的php-config位置

接着

make

在编译过程中如果你的代码出现错误,会报错。

make这步中如果提示

Build complete

说明编译成功.然后

make install

安装好后rube.so文件会在当前文件夹下的modules文件夹下,同时也会被安装在系统提示的位置(也就是你的系统中php扩展的默认安装位置),我的提示如下:

Installing shared extensions:     /usr/lib/php5/20090626+lfs/

说明rube.so被安装在/usr/lib/php5/20090626+lfs/目录下

ls /usr/lib/php5/20090626+lfs/  #查看是否在此文件夹下

2.修改php.ini

找到php.ini文件 然后打开在文件最后添加

extension=/usr/lib/php5/20090626+lfs/rube.so  #我的扩展在/usr/lib/php5/20090626+lfs/rube.so  你可以相应修改

重启apache

五.进行测试

在你网站根目录创建test.php

vim test.php<?phpecho hello();

结果为
Hello my first extention

转载于:https://my.oschina.net/rube/blog/158910

PHP扩展开发-01:第一个扩展相关推荐

  1. Linux嵌入式驱动开发01——第一个驱动Hello World(附源码)

    文章目录 全系列传送门 引言 驱动介绍 Hello World 1. 包含头文件 2. 驱动模块的入口和出口 3. 声明信息 4. 功能实现 完整代码 编译 第一种方法 第二种方法 编译成模块 第一步 ...

  2. php7扩展开发教程,Laravel 7 扩展开发教程

    下面由Laravel入门教程栏目给大家介绍Laravel 7 扩展开发教程,希望对需要的朋友有所帮助! 步骤 1. 创建一个新项目 我更喜欢使用 Laravel 安装程序.laravel new la ...

  3. php扩展包启动,Composer 扩展开发:本地运行扩展包

    假设你开发了一个网站,并希望将网站的其中一部分分开独立成为一个包.你新建了一个新的仓库并在开发环境中准备好了,这时候你想看看网站和你自己新的包是怎样整合一起使用的,应该怎样去做呢? 本文将介绍如何使用 ...

  4. Firefox扩展开发笔记 - 如何给扩展打包,xpi格式

    原创声明:     本文章为原创,欢迎转载,但请给出本文链接,多谢合作.     本文链接:http://blog.csdn.net/epinszteinic/archive/2009/11/13/4 ...

  5. google扩展开发popup.html,chrome扩展开发问题总结

    console.log Chrome扩展分为三部background.html/js,popup.html和content_script.js.background和content_script可以通 ...

  6. php7 ext skel_基于PHP7的PHP扩展开发之一(hello word)

    为什么要学PHP扩展开发?学会PHP扩展开发后,能增加你解决问题的能力.如,别人用PHP实现了一个功能.执行一次需要耗时10毫秒.而你用扩展实现了同样的功能,可能就只用1毫秒. PHP扩展的应用场景 ...

  7. PHP扩展开发系列01 - 我要成为一名老司机

    PHP扩展开发系列01 - 我要成为一名老司机 1. 关于扩展的教程貌似挺全了,为啥还写? 记录下我写扩展的历程 自认为会写的更容易理解 我的宗旨就是 "先用再识" 代码写着写着就 ...

  8. 第一章 Joomla!扩展开发:概况

    第一章 Joomla!扩展开发:概况 你以前开发过动态网站但你的朋友告诉你有关Joomla!的事,所以你决定试一试.从食物网上那些出名的厨师中得到灵感后,你想建立一个简单的关于餐厅的网站.这个网站的安 ...

  9. UAP扩展开发 - 新增按钮

    UAP新增按钮的实现 一.扩展说明 1.按钮扩展的实现有两种方法 - 按钮继承:NCAction,MenuAction - 拦截器实现:ActionInterceptor 此处是通过按钮继承实现的 2 ...

最新文章

  1. ios获取软键盘完成事件
  2. jquery 加法 乘法运算 精确计算函数
  3. Python操作Json、Csv、Excel文件
  4. 莫队算法(Mo's_Algorithm)
  5. nmcli管理网络 RHEL8和CentOS8怎么重启网络
  6. cad插件_【CAD插件】家具绘图神器
  7. 主机安全扫描入门-用Java封装Nmap
  8. 打印机USB连接电脑后,共享给其他电脑
  9. nginx配置实现代理多个内网地址
  10. 组件分享之后端组件——用Go编写的IMAP4rev1库go-imap
  11. bable.js是什么
  12. 十大最赚钱增值业务排行榜
  13. DICTATOR第一周排序部分作业
  14. curl发送请求简单实践
  15. unity获取物体下的所有子物体
  16. socket事例代码
  17. 字节给我发感谢信,我也感谢字节(内附一面面经)
  18. python flask 在线可视化平台系统
  19. python更改csv序号从1开始
  20. js 进入浏览器全屏(F11效果)、退出全屏、指定元素全屏、判断当前是否全屏、监听浏览器全屏事件、定义全屏时的css样式(全屏伪类)

热门文章

  1. 【职场】面试中最难回答频率最高的70个问题
  2. (转)#Pragma用法
  3. centos ifconfig_Linux主流发行版本配置IP总结(Ubuntu、CentOS、Redhat、Suse)
  4. POJ2135 来回最短路(简单费用流)
  5. 计算机网络第一章:计算机网络概述
  6. 【数字信号处理】周期序列 ( 周期序列表示方法 | 主值区间表示法 | 模 N 表示法 )
  7. 【Groovy】Groovy 脚本调用 ( Groovy 配置文件格式 | Groovy 配置文件读取 | 完整配置文件及解析代码示例 )
  8. 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | strncat 函数 )
  9. 【Android FFMPEG 开发】FFMPEG 方法中指针类型参数说明 ( 一维指针类型参数 | 二维指针类型参数 )
  10. MySQL查询日志介绍