以下内容是本人学习过程中的笔记或者心得,如果有什么建议或者意见请在评论中提醒我,谢谢,这篇文章我会定期更新,由浅到深的分享我学PHP扩展历程

或者在学习中有什么问题欢迎交流

1.去PHP官网下载一个源码包,然后解压到某个目录

2.进入源码目录中的ext目录中

3.执行./ext_skel --extname=myext(这是扩展的名字) 生成扩展框架 [ps:如果ext_skel无法执行,请查看ext_skel文件是否有可执行权限]

4.编写扩展函数

  a).我们打开myext.c文件,里面有一些函数,包括

    PHP_FUNCTION(),这是编写扩展中函数逻辑的注册函数,每一个扩展函数对应一个PHP_FUNCTION(扩展函数名){}

    下面四个函数是扩展的c文件中基本都有的,这些在PHP的整个生命周期中需要调用的,具体的请看:

    PHP_MINIT_FUNCTION(),这个函数在该扩展被载入时调用

    PHP_RINIT_FUNCTION(),PHP初始化执行脚本的基本环境,在文件请求到达后,文件编译前执行该函数,例如记录请求开始时间,结合请求结束时间,可以记录下处理请求所花费的时间

    PHP_RSHUTDOWN_FUNCTION(),一般脚本执行结束(执行到末尾或者exit,die退出后)后调用该函数

    PHP_MSHUTDOWN_FUNCTION(),SAPI生命周期结束后,一般注销一些持久化的资源

  b).我们来编写一个自己的函数

    在myext.c文件中添加

PHP_FUNCTION(myfunction){
long x,y,z;
int argc =ZEND_NUM_ARGS(); if(zend_parse_parameters(argc TSRMLS_CC,"ll",&x,&y)==FAILURE)
return;
z = x * y;
RETURN_LONG(z);
}

    然后在myext.c文件中的zend_function_entry myext_functions里面添加PHP_FE(myfunction,NULL) 注意后面不带逗号或者分号,需要换行

    将config.m4中下面代码前的dnl去掉

      dnl PHP_ARG_WITH(myext, for myext support,
      dnl [ --with-myext Include myext support])

    在扩展目录下执行phpize命令生成扩展的配置工具

    然后执行./configure -with-php-config=/usr/bin/php-config && make && make install 编译和安装,成功后在PHP扩展目录中可以看到编译好的myext.so文件

    然后在php.ini文件中添加extension=myext.so

    重启一下服务,测试myfunction(4,5)的结果是否输出20

  

在Linux下编写php扩展的更多相关文章

  1. Linux下编写-makefile-详细教程(跟我一起写-Makefile-Markdown整理版)

    目录 概述 关于程序的编译和链接 Makefile 介绍 Makefile的规则 一个演示例子 make是怎样工作的 makefile中使用变量 让make自己主动推导 另类风格的makefile 清 ...

  2. linux下安装opcache扩展

    linux下安装opcache扩展   参考:http://www.php.net/manual/zh/opcache.installation.php 1 2 3 4 5 6 7 wget http ...

  3. 总结 Linux 下安装 PHP 扩展步骤

    总结一下 Linux 下安装 PHP 扩展步骤,这里以安装 PHP 的 redis 扩展为例. 一.拿到扩展包下载地址,下载扩展包 pecl 上搜索 redis wget http://pecl.ph ...

  4. linux 下安装php扩展

    linux下安装php扩展 步骤: 1.在扩展解压包目录执行 phpize 2.执行 ./configure --with-php-config=/usr/local/php/bin/php-conf ...

  5. [转] Linux下编写脚本实现Daemon

    在Linux(以Redhat Linux Enterprise Edition 5.3为例)下,有时需要编写Service.Service也是程序,一般随系统启动用户不干预就不退出的程序,可以称为Se ...

  6. Ubuntu\Linux 下编写及调试C\C++

    一.在Ubuntu\Linux 下编写及调试C\C++需要配置基本的环境,即配置gcc编译器.安装vim编译器,具体配置安装步骤我在这里就不多说了. 二.基本环境配置完了我们就可以进入自己的程序编写了 ...

  7. Linux下编写 makefile 详细教程

    原文地址: https://www.cnblogs.com/mfryf/p/3305778.html 近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到make ...

  8. linux下安装PHP扩展memcache

    公司的服务器 CentOS 7.5,PHP 5.6 下面都是最新的版本(支持到PHP5.6) 如需php7  下支持memcache扩展,请移步   https://www.cnblogs.com/h ...

  9. Linux下编写和加载 .ko 文件(驱动模块文件)

    一..ko 文件介绍 .ko文件是kernel object文件(内核模块),该文件的意义就是把内核的一些功能移动到内核外边, 需要的时候插入内核,不需要时卸载. 二.优点 (1)这样可以缩小内核体积 ...

随机推荐

  1. Oracle sql 中的字符(串)替换与转换[转载]

    1.REPLACE 语法:REPLACE(char, search_string,replacement_string) 用法:将char中的字符串search_string全部转换为字符串repla ...

  2. javaWEB总结(13):域对象的属性操作

    前言 本文主要讲解javaweb的四个域对象以及他们的作用范围,后面会有小demo来具体测试. 四个域对象 (1)pageContext:属性的作用范围仅限于当前JSP页面: (2)request:属 ...

  3. css3 div垂直居中

    css3: #dd{ height: 300px; background: #0000cc; display: -webkit-box; display: flex; display: -webkit ...

  4. 计算机网络课程优秀备考PPT之第二章物理层(二)

    为了记录自己从2016.9~2017.1的<计算机网络>助教生涯,也为了及时梳理和整写笔记! 前期博客是, 计算机网络课程优秀备考PPT之第一章概述(一) 以上是<计算机网络> ...

  5. hdu_5903_Square Distance(dp)

    题目链接:hdu_5903_Square Distance 题意: 给你一个长度为n的a串,一个数m,现在让你构造一个长度也为n的b串,使这个串是由两个相同的串拼起来的,并且和a串对应的位不同的数量为 ...

  6. hdu_5898_odd-even number(数位DP)

    题目链接:hdu_5898_odd-even number 题意: 给你一个区间,问你这个区间中满足连续的偶数的位数为奇数,连续的奇数的位数是偶数的个数 题解: 设dp[i][j][k][l]为考虑当 ...

  7. 大D实例化model-->调用自定义类方法,大M调用原声model方法

    class ContactsModel extends Model{ public function addxxx(){ } } $conmodel = D('contacts','Model'); ...

  8. 3、Hibernate三态间的转换

    学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...

  9. Linux中kettle连接hadoop并传数据(5)

    http://wiki.pentaho.com/display/BAD/Loading+Data+into+HDFS 新建job

  10. 聊天系统Demo,增加Silverlight客户端(附源码)-- ESFramework 4.0 快速上手(09)

    在ESFramework 4.0 快速上手 -- 入门Demo,一个简单的IM系统(附源码)一文中,我们介绍了使用ESFramework的Rapid引擎开发的winform聊天程序,本文我们将在之前d ...