为什么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. 【Vegas原创】GridView设定DataFormatString属性失效的解决方法
  2. [YTU]_2781( 重复字符串)
  3. HTML5 新元素标签系列:最简版 HTML5
  4. python sqllite远程_Python实现Sqlite将字段当做索引进行查询的方法
  5. Quick BI电子表格: 新手亦可表格自由
  6. python 字节码操作_从操作码和参数列表创建Python字节码?
  7. Nginx负载均衡和反向代理设置
  8. Java虚拟机之装载(加载、连接、初始化)
  9. pytorch visdom可视化工具学习—1—详细使用-3-Generic Plots和Others
  10. 01我为什么学Unity3d
  11. 【对讲机的那点事】带你玩转凯益星CG53数字对讲机的读、写频操作
  12. 神器VIM配置文件进阶v1.0beta
  13. java生成随机的26位英文字母
  14. ArtyA7的Hello Word创建Microblaze嵌入式系统硬件工程的问题解决
  15. 应对长尾分布的目标检测 -- Balanced Group Softmax
  16. ERD Online 4.0.7 在线数据库建模、元数据管理(免费、私有部署)
  17. 你的眼中满是“变量”,可“变量”眼中是无相(Python)(Java与Python学习通法)
  18. 【直播活动】阿里巴巴开源大家族加入中科院开源之夏2022
  19. m基于MATLAB-GUI的GPS数据经纬度高度解析与kalman分析软件设计
  20. Elasticsearch 分布式架构原理

热门文章

  1. Eclipse如何打开一个现有工程
  2. AspectJ切入点语法详解
  3. python中nomodulenamed怎么解决_关于 python ImportError: No module named 的问题
  4. 神经网络与机器学习 笔记—核方法和径向基函数网络(上)
  5. hdu 5020 求三点共线的组合数(容器记录斜率出现次数)
  6. 【Android 逆向】Android 系统文件分析 ( /system/ 系统命令和系统应用数据目录 | /system/app/ 系统应用目录 | sys Linux 系统内核文件目录 )
  7. 【计算机网络】网络安全 : 实体鉴别 ( 实体鉴别过程 | 不重数机制 | 公钥体质加密不重数 | 中间人攻击 )
  8. 【Android应用开发】分享一个录制 Android 屏幕 gif 格式的小技巧
  9. MySQL 关于性能的参数配置梳理
  10. 微信小程序 wx:key 提示-解决