以下内容是本人学习过程中的笔记或者心得,如果有什么建议或者意见请在评论中提醒我,谢谢,这篇文章我会定期更新,由浅到深的分享我学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. Windows下NexusPHP搭建PT站过程

    搭建环境:Win7+XAMPP(5.5) 网站根目录: D:\IT\XAMPP5.5\htdocs\ 1 下载源码程序http://sourceforge.net/projects/nexusphp/ ...

  2. hdu1025

    #include<stdio.h>const int MAXN=500010;int a[MAXN],b[MAXN]; //用二分查找的方法找到一个位置,使得num>b[i-1] 并 ...

  3. 微信支付错误两个问题的解决:curl出错,错误码:60

    如下是运行微信支付测试代码时出错代码: Warning: curl_setopt() expects parameter 2 to be long, string given in D:\wwwroo ...

  4. Chrome渲染分析之Timeline工具的使用

    原文http://www.th7.cn/web/html-css/201406/42043.shtml Timeline工具栏提供了对于在装载你的Web应用的过程中,时间花费情况的概览,这些应用包括处 ...

  5. c#.net 获取时间日期年月日时分秒格式

    今天写代码发现两个比较不错的分享下:1.DateTime.ParseExact很多时候我们获取的时间是数字形式表示的,好比20140127134015.927856,通过这个方法DateTime.Pa ...

  6. hdu_5036_Explosion(bitset优化传递闭包)

    题目链接:hdu_5036_Explosion 题意: 一个人要打开或者用炸弹砸开所有的门,每个门里面有一些钥匙,一个钥匙对应一个门,有了一个门的钥匙就能打开相应的门,告诉每个门里面有哪些门的钥匙,问 ...

  7. [ An Ac a Day ^_^ ] CodeForces 426C Sereja and Swaps 优先队列

    题意: 给你一个有n个数的序列 取一个区间 这个区间内的数可以与区间外的值交换k次 问这样的区间最大值是多少 思路: 看数据是200 时间复杂度O(n*n) 应该可以暴力 顺便学习一下优先队列 枚举区 ...

  8. 【入门一】一些简单的C程序及VS的安装

    实例1 用 printf 函数打印字符串 # include <stdio.h> // 预处理指令,结尾不加 ';' int main(void) // int表示该函数将返回一个整数值, ...

  9. 使用 NSUserDefaults 读取和写入自定义对象

    众所周知,NSUserDefaults只能保存诸如NSArray.NSDictionary.NSData.NSNumber等基本数据类型,如果我们强制保存自定义的类,就会出现这个错误:Attempt ...

  10. android 录制视频方式

    http://www.cnblogs.com/skyseraph/archive/2012/03/31/2427593.html http://bbs.csdn.net/topics/39088448 ...