PHP扩展开发-01:第一个扩展
为什么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:第一个扩展相关推荐
- Linux嵌入式驱动开发01——第一个驱动Hello World(附源码)
文章目录 全系列传送门 引言 驱动介绍 Hello World 1. 包含头文件 2. 驱动模块的入口和出口 3. 声明信息 4. 功能实现 完整代码 编译 第一种方法 第二种方法 编译成模块 第一步 ...
- php7扩展开发教程,Laravel 7 扩展开发教程
下面由Laravel入门教程栏目给大家介绍Laravel 7 扩展开发教程,希望对需要的朋友有所帮助! 步骤 1. 创建一个新项目 我更喜欢使用 Laravel 安装程序.laravel new la ...
- php扩展包启动,Composer 扩展开发:本地运行扩展包
假设你开发了一个网站,并希望将网站的其中一部分分开独立成为一个包.你新建了一个新的仓库并在开发环境中准备好了,这时候你想看看网站和你自己新的包是怎样整合一起使用的,应该怎样去做呢? 本文将介绍如何使用 ...
- Firefox扩展开发笔记 - 如何给扩展打包,xpi格式
原创声明: 本文章为原创,欢迎转载,但请给出本文链接,多谢合作. 本文链接:http://blog.csdn.net/epinszteinic/archive/2009/11/13/4 ...
- google扩展开发popup.html,chrome扩展开发问题总结
console.log Chrome扩展分为三部background.html/js,popup.html和content_script.js.background和content_script可以通 ...
- php7 ext skel_基于PHP7的PHP扩展开发之一(hello word)
为什么要学PHP扩展开发?学会PHP扩展开发后,能增加你解决问题的能力.如,别人用PHP实现了一个功能.执行一次需要耗时10毫秒.而你用扩展实现了同样的功能,可能就只用1毫秒. PHP扩展的应用场景 ...
- PHP扩展开发系列01 - 我要成为一名老司机
PHP扩展开发系列01 - 我要成为一名老司机 1. 关于扩展的教程貌似挺全了,为啥还写? 记录下我写扩展的历程 自认为会写的更容易理解 我的宗旨就是 "先用再识" 代码写着写着就 ...
- 第一章 Joomla!扩展开发:概况
第一章 Joomla!扩展开发:概况 你以前开发过动态网站但你的朋友告诉你有关Joomla!的事,所以你决定试一试.从食物网上那些出名的厨师中得到灵感后,你想建立一个简单的关于餐厅的网站.这个网站的安 ...
- UAP扩展开发 - 新增按钮
UAP新增按钮的实现 一.扩展说明 1.按钮扩展的实现有两种方法 - 按钮继承:NCAction,MenuAction - 拦截器实现:ActionInterceptor 此处是通过按钮继承实现的 2 ...
最新文章
- ios获取软键盘完成事件
- jquery 加法 乘法运算 精确计算函数
- Python操作Json、Csv、Excel文件
- 莫队算法(Mo's_Algorithm)
- nmcli管理网络 RHEL8和CentOS8怎么重启网络
- cad插件_【CAD插件】家具绘图神器
- 主机安全扫描入门-用Java封装Nmap
- 打印机USB连接电脑后,共享给其他电脑
- nginx配置实现代理多个内网地址
- 组件分享之后端组件——用Go编写的IMAP4rev1库go-imap
- bable.js是什么
- 十大最赚钱增值业务排行榜
- DICTATOR第一周排序部分作业
- curl发送请求简单实践
- unity获取物体下的所有子物体
- socket事例代码
- 字节给我发感谢信,我也感谢字节(内附一面面经)
- python flask 在线可视化平台系统
- python更改csv序号从1开始
- js 进入浏览器全屏(F11效果)、退出全屏、指定元素全屏、判断当前是否全屏、监听浏览器全屏事件、定义全屏时的css样式(全屏伪类)
热门文章
- 【职场】面试中最难回答频率最高的70个问题
- (转)#Pragma用法
- centos ifconfig_Linux主流发行版本配置IP总结(Ubuntu、CentOS、Redhat、Suse)
- POJ2135 来回最短路(简单费用流)
- 计算机网络第一章:计算机网络概述
- 【数字信号处理】周期序列 ( 周期序列表示方法 | 主值区间表示法 | 模 N 表示法 )
- 【Groovy】Groovy 脚本调用 ( Groovy 配置文件格式 | Groovy 配置文件读取 | 完整配置文件及解析代码示例 )
- 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | strncat 函数 )
- 【Android FFMPEG 开发】FFMPEG 方法中指针类型参数说明 ( 一维指针类型参数 | 二维指针类型参数 )
- MySQL查询日志介绍