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

    安全审计 数据分析 capinfos xxx.pcap 产看数据包基本信息 日志分析 who /var/log/wtmp #查看登录用户信息 哈希校验 sha265 文件名 md5sum 文件名 &g ...

  2. Sass与Compress实战:第八章

    概要:帮助你实现样式表的最佳性能 本章内容: ● 样式表拼接 ● 样式表和资源压缩 ● 减少和并行图片请求的策略 ● 选择器性能和优化策略 1. 测量客户端性能 性能优化的起点和终点都是测量.在第一次 ...

  3. 1、第一个SpringMVC程序

    1.创建如下项目结构 2.在src下的com.springmvc下创建User.java package com.springmvc; public class User { private Stri ...

  4. MySQL Logs

    摘要 一.MySQL日志 1.1 查询日志 1.2 慢查询日志 1.3 错误日志 1.4 二进制日志 一. MySQL日志 MySQL服务器上一共有六种日志:错误日志,查询日志,慢查询日志,二进制日志 ...

  5. 【转】Java线程与Linux内核线程的映射关系

    Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程. Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是 ...

  6. PHP中使用CURL(三)

    对 post 提交的数据进行 http_build_query处理,然后再send出去,能实现更好的兼容性,更小的请求数据包. <?php /** * PHP发送Post数据 * @param ...

  7. wuzhi 五指 数据库仿 thinkphp

    在/coreframe/app/模块/libs/class/mydb.class.php 中编辑 调用 : $mydb = load_class("mydb","模块&q ...

  8. wpf 异步加载 只需6段代码

    private BackgroundWorker worker = null; ProgressBar probar = new ProgressBar(); private int percentV ...

  9. DIV层漂浮居中

    <style type="text/css" title="currentStyle" media="screen" mce_bogu ...

  10. UIScrollView 加载多个view view还可以交换顺序(2)

    在上的代码中 UIview都在一个页面 要是每一个view对应一个页面 操作每一个view代码都在viewcontroller里面就会很乱,那么我们就将view重新做一下 创建想要的页面继承与view ...