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 ...
最新文章
- 【Vegas原创】GridView设定DataFormatString属性失效的解决方法
- [YTU]_2781( 重复字符串)
- HTML5 新元素标签系列:最简版 HTML5
- python sqllite远程_Python实现Sqlite将字段当做索引进行查询的方法
- Quick BI电子表格: 新手亦可表格自由
- python 字节码操作_从操作码和参数列表创建Python字节码?
- Nginx负载均衡和反向代理设置
- Java虚拟机之装载(加载、连接、初始化)
- pytorch visdom可视化工具学习—1—详细使用-3-Generic Plots和Others
- 01我为什么学Unity3d
- 【对讲机的那点事】带你玩转凯益星CG53数字对讲机的读、写频操作
- 神器VIM配置文件进阶v1.0beta
- java生成随机的26位英文字母
- ArtyA7的Hello Word创建Microblaze嵌入式系统硬件工程的问题解决
- 应对长尾分布的目标检测 -- Balanced Group Softmax
- ERD Online 4.0.7 在线数据库建模、元数据管理(免费、私有部署)
- 你的眼中满是“变量”,可“变量”眼中是无相(Python)(Java与Python学习通法)
- 【直播活动】阿里巴巴开源大家族加入中科院开源之夏2022
- m基于MATLAB-GUI的GPS数据经纬度高度解析与kalman分析软件设计
- Elasticsearch 分布式架构原理
热门文章
- Eclipse如何打开一个现有工程
- AspectJ切入点语法详解
- python中nomodulenamed怎么解决_关于 python ImportError: No module named 的问题
- 神经网络与机器学习 笔记—核方法和径向基函数网络(上)
- hdu 5020 求三点共线的组合数(容器记录斜率出现次数)
- 【Android 逆向】Android 系统文件分析 ( /system/ 系统命令和系统应用数据目录 | /system/app/ 系统应用目录 | sys Linux 系统内核文件目录 )
- 【计算机网络】网络安全 : 实体鉴别 ( 实体鉴别过程 | 不重数机制 | 公钥体质加密不重数 | 中间人攻击 )
- 【Android应用开发】分享一个录制 Android 屏幕 gif 格式的小技巧
- MySQL 关于性能的参数配置梳理
- 微信小程序 wx:key 提示-解决