centos php扩展开发流程
一、安装php
centos 默认 yum 安装 php 版本为 5.3, 很多php框架基本上要求5.4以上版本,这时候不能直接 用 yum install php 需要先改yum 源。
1、启动REMI源
- # cd /tmp
- # wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
- # wget http://mirrors.sohu.com/fedora-epel/6/i386/epel-release-6-8.noarch.rpm
2、rpm安装
- # rpm -Uvh remi-release-.rpm epel-release--.noarch.rpm
3、安装 >=5.4以上php
- # yum --enablerepo=remi install php
二、扩展开发
1、php源码下载
- # wget http://cn2.php.net/distributions/php-5.4.43.tar.gz
# tar vzxf php-5.4.42.tar.gz
注意这里下载的版本要跟系统安装的php版本保持一致,php查看咱在版本命令
- php -v
我系统安装是5.4 的
2、安装phpize
(phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块)
- # yum install phpize
3、ext_skel工具
ext_skel 是php写扩展提供一个很好用的 “自动构建系统” 使用他可以方便的搭建php扩展。 此工具为php源码自带工具位于 源码里头的 ext目录下
- # cd /php-5.4./ext
- # ./ext_skel --extname = myext
执行生成扩展后 ext 下面会自动多一个 myext文件夹
- # cd myext
- # vim config.m4
将 config.m4文件里面
- dnl PHP_ARG_WITH(myext, for myext support,
- dnl Make sure that the comment is aligned:
- dnl [ --with-myext Include myext support])
修改成
- PHP_ARG_WITH(myext, for myext support,
- [ --with-myext Include myext support])
4、写简单的测试c扩展
修改php_myext.h,看到PHP_FUNCTION(confirm_myext_compiled); 这里就是扩展函数声明部分,可以增加一
- PHP_FUNCTION(confirm_myext_compiled);
- PHP_FUNCTION(myext_helloworld);
然后修改myext.c,这个是扩展函数的实现部分。
- const zend_function_entry myext_functions[] = {
- PHP_FE(confirm_myext_compiled, NULL) /* For testing, remove later. */
- PHP_FE(myext_helloworld, NULL)
- PHP_FE_END /* Must be the last line in myext_functions[] */
- };
这的代码是将函数指针注册到Zend引擎,增加一行PHP_FE(myext_helloworld, NULL)(后面不要带分号)。
在myext.c末尾加myext_helloworld的执行代码。
- PHP_FUNCTION(myext_helloworld)
- {
- char *arg = NULL;
- int arg_len, len;
- char *strg;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
- return;
- }
- php_printf("Hello World!\n");
- RETRUN_TRUE;
- }
zend_parse_parameters是用来接受PHP传入的参数,RETURN_XXX宏是用来返回给PHP数据。
5、编译安装php扩展
- # phpize
- # ./configure
- # make
- # make test
- # make install
跳到php扩展文件加里头可以看到多了个myext.so 文件
- # cd /usr/lib64/php/modules
- # vim /etc/php.ini
添加一行扩展
- extension=myext.so
查看扩展是否安装成功
- php -m
看到多了个myext.so扩展,ok大功告成,接下来我们这看下我们自定义的函数能否正确执行
执行php -r “myext_helloworld(‘test’);”,输出hello world!
三、小小感悟
echosong 以前在window下做php扩展 各种问题各种不顺,最新发现liunx 下做php扩展比window方便很多。如果想做php扩展的朋友们建议直接上手liunx下开发。
另外感觉liunx c 的开发 ,特别跟操作系统的沟通 各种顺畅。O(∩_∩)O~
centos php扩展开发流程的更多相关文章
- 在Centos上安装RabbitMQ流程(转)
在Centos上安装RabbitMQ流程------------------------ 1. 需求 由于项目中要用到消息队列,经过ActiveMQ与RabbitMQ的比较,最终选择了RabbbitM ...
- php扩展开发-快速上手
系统环境CentOS release 6.5 (Final) PHP版本php-5.6.27 扩展开发需要有php环境及php的源代码,我的PHP安装目录/home/zhangxiaomin/stud ...
- 关于PHP扩展开发(收藏)
一.Linux shell命令: ls –lh 查看文件大小 du –a 查看文件及文件夹大小 -------------------------- nginx ------------- ...
- Android jni简便开发流程
<Android jni helloworld>中介绍了开发jni helloworld的步骤,本文将介绍jni简便开发流程 ① 写java代码 native 声明本地方法 ② 添加本地支 ...
- PHP扩展开发相关总结
1.线程安全宏定义 在TSRM/TSRM.h文件中有如下定义 #define TSRMLS_FETCH() void ***tsrm_ls = (void ***) ts_resource_ex(0, ...
- Packetbeat协议扩展开发教程 一
原文链接:http://elasticsearch.cn/article/48 Packetbeat(https://www.elastic.co/products/beats/packetbeat) ...
- 20个可以帮你简化iOS app开发流程的工具
这里推荐20个可以帮你简化iOS app开发流程的工具.很多开发者都使用过这些工具,涉及原型和设计.编程.测试以及最后的营销,基本上涵盖了整个开发过程. 原型和设计 有了一个很好的创意后,你要做的不是 ...
- Struts2学习笔记--Struts例子及开发流程
参考资料:http://blog.csdn.net/hntyzgn2010/article/details/5547753 http://chenlh.iteye.com/blog/464341 入门 ...
- JMS 企业开发流程实现
关于JMS的一些介绍参见[http://blog.csdn.net/aking21alinjuju/article/details/6051421] [补充] 消息的组成 1. 头(head) 每条J ...
随机推荐
- NHibernate 的 ID 标识选择器
在 Hibernate 中,每个对象需要一个标识 ID,通过这个标识 ID 建立对象与数据库中记录的对应关系. Nhibernate 提供了多种方式来建立这个 POID.基于不同的生成策略,可以选择更 ...
- Noip2011提高组总结
这套题思考的难度比较大,应该说是有四题基础题,一题比较复杂的搜索加模拟,还有一题需要深度思考一下.自己的代码漏洞还是很大,而且思考的时候会遗漏一些情况,这些错误都是致命的,去年Noip的惨败也证实了这 ...
- PLSQL 导入表到Oracle------》从一个表空间导入到其它表空间
在用PLSQL导入.dmp文件到Oracle时出现的问题如下: Import started on 2015/11/18 10:42:44E:\oracle\product\10.2.0\db ...
- Qt控制台和带窗口的区别_mickelfeng_新浪博客
Qt控制台和带窗口的区别_mickelfeng_新浪博客 t控制台和带窗口的区别 (2012-04-30 10:50:53) 标签: 杂谈 分类: C/C ...
- Sightseeing Cows(最优比率环)
Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8915 Accepted: 3000 ...
- CentOS, 高速设置ssh无password登录
首先.保证能够ping通 然后运行例如以下命令, master登录slave master上面运行例如以下指令: 2.4 确认本机sshd的配置文件(root) $ vi/etc/ssh/sshd_c ...
- js动画学习(三)
五.多物体变宽 这里面要注意由于物体变多了,需要给每个物体各配备一个定时器,否则如果只有一个定时器的话,当鼠标在不同物体之间快速滑动时,不同的物体就会出现争抢的现象.所以timer前要加obj. fu ...
- 制作自己的私有库(cocopods)
1.首先你需要创建一个私有的仓库,用于存放自己的podspec相关文件,至于git服务器你可以用http://git.oschina.net/,或者自己搭建的都行.我在git服务器上创建了一个名字叫T ...
- js 乱码解决方案
如果网页编码规则是utf-8,即在网页头部中可以看到如下代码: 那么js文件中如果有中文字,调用输出时就会出现乱码.解决此个问题的办法如下: 即在引用javascript输出的地方加上charset= ...
- 字符通向字节流的桥梁---- OutputStreamWriter
OutputStream out = System.out; OutputStreamWriter osw = new OutputStreamWriter(out); BufferedWriter ...