原文: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扩展开发流程的更多相关文章

  1. 在Centos上安装RabbitMQ流程(转)

    在Centos上安装RabbitMQ流程------------------------ 1. 需求 由于项目中要用到消息队列,经过ActiveMQ与RabbitMQ的比较,最终选择了RabbbitM ...

  2. php扩展开发-快速上手

    系统环境CentOS release 6.5 (Final) PHP版本php-5.6.27 扩展开发需要有php环境及php的源代码,我的PHP安装目录/home/zhangxiaomin/stud ...

  3. 关于PHP扩展开发(收藏)

    一.Linux shell命令: ls –lh    查看文件大小 du –a    查看文件及文件夹大小 -------------------------- nginx ------------- ...

  4. Android jni简便开发流程

    <Android jni helloworld>中介绍了开发jni helloworld的步骤,本文将介绍jni简便开发流程 ① 写java代码 native 声明本地方法 ② 添加本地支 ...

  5. PHP扩展开发相关总结

    1.线程安全宏定义 在TSRM/TSRM.h文件中有如下定义 #define TSRMLS_FETCH() void ***tsrm_ls = (void ***) ts_resource_ex(0, ...

  6. Packetbeat协议扩展开发教程 一

    原文链接:http://elasticsearch.cn/article/48 Packetbeat(https://www.elastic.co/products/beats/packetbeat) ...

  7. 20个可以帮你简化iOS app开发流程的工具

    这里推荐20个可以帮你简化iOS app开发流程的工具.很多开发者都使用过这些工具,涉及原型和设计.编程.测试以及最后的营销,基本上涵盖了整个开发过程. 原型和设计 有了一个很好的创意后,你要做的不是 ...

  8. Struts2学习笔记--Struts例子及开发流程

    参考资料:http://blog.csdn.net/hntyzgn2010/article/details/5547753 http://chenlh.iteye.com/blog/464341 入门 ...

  9. JMS 企业开发流程实现

    关于JMS的一些介绍参见[http://blog.csdn.net/aking21alinjuju/article/details/6051421] [补充] 消息的组成 1. 头(head) 每条J ...

随机推荐

  1. 导入Excel加行公式和验证

    package com.sprucetec.tms.controller.fee.export; import com.sprucetec.tms.controller.base.BaseFeeExp ...

  2. BZOJ 2761 不重复数字 (Hash)

    题解:直接使用STL中的hash去重即可 #include <cstdio> #include <map> using namespace std; int ans[50010 ...

  3. Flex LinkButton鼠标划过出现下划线

    在LinkButton中 textDecoration属性设置label的是否有下划线装饰,属性值分为"none","underline" 代码如下------ ...

  4. POJ1062 昂贵的聘礼 【DFS】

    昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 37475   Accepted: 10816 Descripti ...

  5. swift + xcode 新手上路

    有用的参考博文: 视频教程: 如何创建第一个iPhone App - HelloWorldHelloWorld 熟悉xcode: http://www.cocoachina.com/swift/201 ...

  6. hibernate Annotation 以及注解版的数据关联 4.4

    目的是不写xxx.hbm.xml映射文件,使用注解 主配置文件还是要有hibernate.cfg.xml <?xml version="1.0" encoding=" ...

  7. logback自定义格式转换器

    创建自定义格式转换符有两步. 首先,必须继承ClassicConverter类.ClassicConverter对象负责从ILoggingEvent 提取信息,并产生一个字符串.例如,LoggerCo ...

  8. nginx自动切割访问日志

    Web 访问日志 (access_log) 记录了所有外部客户端对Web服务器的访问行为,包含了客户端IP,访问日期,访问的URL资源,服务器返回的HTTP状态码等重要信息. 一条典型的Web访问日志 ...

  9. STL insert()使用

    下面我以vector的insert()为例: c++ 98: single element (1) iterator insert (iterator position, const value_ty ...

  10. TPM 2.0 近况及模拟器开发

    可信计算平台模块TPM 2.0的相关标准和技术准则由 TCG ( Trust Computing Group )于2011年前后提出,至今已经过了多次修改.该标准无疑将成为下一代可信计算平台模块的业界 ...