在Linux下编写php扩展
以下内容是本人学习过程中的笔记或者心得,如果有什么建议或者意见请在评论中提醒我,谢谢,这篇文章我会定期更新,由浅到深的分享我学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扩展的更多相关文章
- Linux下编写-makefile-详细教程(跟我一起写-Makefile-Markdown整理版)
目录 概述 关于程序的编译和链接 Makefile 介绍 Makefile的规则 一个演示例子 make是怎样工作的 makefile中使用变量 让make自己主动推导 另类风格的makefile 清 ...
- linux下安装opcache扩展
linux下安装opcache扩展 参考:http://www.php.net/manual/zh/opcache.installation.php 1 2 3 4 5 6 7 wget http ...
- 总结 Linux 下安装 PHP 扩展步骤
总结一下 Linux 下安装 PHP 扩展步骤,这里以安装 PHP 的 redis 扩展为例. 一.拿到扩展包下载地址,下载扩展包 pecl 上搜索 redis wget http://pecl.ph ...
- linux 下安装php扩展
linux下安装php扩展 步骤: 1.在扩展解压包目录执行 phpize 2.执行 ./configure --with-php-config=/usr/local/php/bin/php-conf ...
- [转] Linux下编写脚本实现Daemon
在Linux(以Redhat Linux Enterprise Edition 5.3为例)下,有时需要编写Service.Service也是程序,一般随系统启动用户不干预就不退出的程序,可以称为Se ...
- Ubuntu\Linux 下编写及调试C\C++
一.在Ubuntu\Linux 下编写及调试C\C++需要配置基本的环境,即配置gcc编译器.安装vim编译器,具体配置安装步骤我在这里就不多说了. 二.基本环境配置完了我们就可以进入自己的程序编写了 ...
- Linux下编写 makefile 详细教程
原文地址: https://www.cnblogs.com/mfryf/p/3305778.html 近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到make ...
- linux下安装PHP扩展memcache
公司的服务器 CentOS 7.5,PHP 5.6 下面都是最新的版本(支持到PHP5.6) 如需php7 下支持memcache扩展,请移步 https://www.cnblogs.com/h ...
- Linux下编写和加载 .ko 文件(驱动模块文件)
一..ko 文件介绍 .ko文件是kernel object文件(内核模块),该文件的意义就是把内核的一些功能移动到内核外边, 需要的时候插入内核,不需要时卸载. 二.优点 (1)这样可以缩小内核体积 ...
随机推荐
- this笔记
在js中,如果this在全局变量和函数中this指window,在在对象中至所挂载的这个对象.
- js实现搜索框响应回车键
1.HTML页面, 注意:不要用使用form标签. Html代码 收藏代码<input type="text" name="keyword" id=&qu ...
- android使用shape做selector按钮按下和弹起的动画
平时效果: 按下效果: selector代码: <?xml version="1.0" encoding="utf-8"?> <selec ...
- Java中三种常见的注释(注解) Annotation
Java为我们提供了三种Annotation方便我们开发. 1 Override-函数覆写注解 如果我们想覆写Object的toString()方法,请看下面的代码: class Annotation ...
- [妙味DOM]第五课:事件深入应用
知识点总结 鼠标拖拽原理: 1.鼠标按下后开始移动,鼠标抬起停止移动,即onmousedown中要包括onmousemove和onmouseup 2.获取位置的计算:获取鼠标的当前位置-鼠标在物体中的 ...
- java 用双向链表实现SJBLinkedList
public class SJBLinkedList{ private Node first; private Node last; private int size; public int size ...
- jQuery判断滚动条是上滚还是下滚,且是否到达底部或顶部
jQuery判断滚动条是上滚还是下滚,且是否到达底部或顶部:http://www.haorooms.com/post/jquery_scroll_upanddown //滚动条滚动加载更多内容 //判 ...
- boost 编译依赖库
正则表达式 icu-devel python python-devel bzip2-devel ./b2 variant=release link=shared threading=multi run ...
- webservice整合spring cxf
下载cxf包,把他里面的包都添加进lib文件夹中. 创建一个接口.添加@WebService注解 @WebService public interface HelloWorld { String sa ...
- oracle创建数据库表空间
1.创建表空间(存放数据) create tablespace xtba_datadatafile 'F:\ORACLE\ORADATA\ORCL\XTBA.DBF'size 50mautoexten ...