当前位置: 首页 > 后端技术 > PHP

PHP扩展开发系列01——我想成为老司机

时间:2023-03-29 15:53:19 PHP

PHP扩展开发系列01——我想成为老司机1.关于扩展的教程好像挺全的,为什么还要写?记录一下我写扩展的过程。我想这样会更容易理解。我的目的是“先用后懂”。代码写好了知道原理了,也可以边写边学,边学边写2.那你首先需要做哪些准备工作呢?答:科目一C要先过,为什么排在第一?PHP不会?那么写什么PHP扩展呢?PHP编译安装phpize和php-config就看你对PHP编译的了解了。前期没必要,但是你应该知道(no-debug,non-zts,debug,zts)?搜索?--有时您不必询问或搜索即可找到答案。尝试去找!---找出别人写的扩展名(php-src/ext)。不仅有答案,还有思路。至于PHPZEND的原理,非常重要,非常重要,非常重要,但是暂时搁置一旁,闲着没事可以学学。3.首先,刚上车的司机长什么样?(示例代码)最后有注释版的代码说明这是一个很简单的扩展,简单到没有函数扩展名laosiji。目前看来,这只是一个只能安装B(什么都没有)的驱动。三个文件config.m4php_laosiji.hlaosiji.cconfig.m4PHP_ARG_ENABLE(laosiji,是否开启老巢支持,[--enable-laosiji开启老巢支持])iftest"$PHP_LAOSIJI"!="no";thenPHP_NEW_EXTENSION(laosiji,laosiji.c,$ext_shared)fiphp_laosiji.h#definePHP_LAOSIJI_EXTNAME"laosiji"#definePHP_LAOSIJI_VERSION"1.0.0"//加载config.h,如果配置#ifdefHAVE_CONFIG_H#include"config.h"#endif//加载php头文件#include"php.h"laosiji.c#include"php_laosiji.h"//模块入口zend_module_entrylaosiji_module_entry={#ifZEND_MODULE_API_NO>=20010901STANDARD_MODULE_HEADER,#endifPHP_LAOSIJI_EXTNAME,/*扩展名*/NULL,/*NINc*/NULL,/*MSHUTDOWN*/NULL,/*RINIT*/NULL,/*RSHUTDOWN*/NULL,/*MINFO*/#ifZEND_MODULE_API_NO>=20010901PHP_LAOSIJI_VERSION,/*扩展版本*/#endifSTANDARD_MODULE_PROPERTIES};#ifdefCOMPILE_DL_LAOSIJIZEND_GET_MODULE(laosiji)#endif5.作为驱动一个基本的驱动动作(扩展编译安装等)phpize./configure这里注意php-configmakemakeinstall加载.so扩展文件6.点亮开始试试我们的扩展,phpize,php-config具体函数。一定要注意phpize和php-config,这里提醒一下,这次遇到坑了。以后慢慢学老司机的各种姿势。包括,函数、函数参数、函数返回值、对象、类、命名空间等。8.注释版代码config.m4dnldnl开头的语句属于注释内容dnlPHP_ARG_ENABLE函数有三个参数dnl第一个参数老四扩展名(不带引号)dnl第二个参数是运行时显示的内容./configurescriptdnlNo.调用./configure--help带三个参数显示帮助信息dnl,最后到下一个PHP_ARG_WITH提一下PHP_ARG_ENABLE(laosiji,是否开启laosiji支持,[--enable-laosijiEnable老四支持])iftest"$PHP_LAOSIJI"!="no";然后dnlPHP_NEW_EXTENSION函数声明了扩展的名称,所需源文件的名称,扩展的编译形式dnl第一个参数是扩展的名称dnl第二个。.n-1个参数需要的源文件名dnl最后一个$ext_shared参数用来声明这个扩展不是静态模块,而是PHP运行时动态加载的。dnl如果我们的扩展使用了多个文件,我们可以在函数的参数中列出这多个文件名,比如:dnlPHP_NEW_EXTENSION(laosiji,laosiji.c,laosiji_2.c,laosiji_3.c,$ext_shared)PHP_NEW_EXTENSION(laosiji,laosiji.c,$ext_shared)fiphp_laosiji.h//定义扩展相关的宏,如版本号、扩展名等。#definePHP_LAOSIJI_EXTNAME"laosiji"#definePHP_LAOSIJI_VERSION"1.0.0"//加载config.h,如果配置#ifdefHAVE_CONFIG_H#include"config.h"#endif//加载php头文件//这是非常必要的#include"php.h"laosiji.c#include"php_laosiji.h"//模块入口//1.laosiji_module_entry扩展名_module_entry//2.PHP_LAOSIJI_EXTNAME/*扩展名*///3.PHP_LAOSIJI_VERSION,/*扩展版本*///那些NULL?//第一个你要记住/*Functions*/这一行你要记住php中的函数//第二个你要记住/*MINIT*/Thinkaboutclass&&object//第三个你要记住MINITMSHUTDOWNRINITRSHUTDOWNMINFO慢慢来,别担心zend_module_entrylaosiji_module_entry={#ifZEND_MODULE_API_NO>=20010901STANDARD_MODULE_HEADER,#endifPHP_LAOSIJI_EXTNAME,/*扩展名*/NULLIT,/*Functions/*/*/NULITMSHUTDOWN*/NULLOWN,/*RINIT*/NULL,/*RSHUTDOWN*/NULL,/*MINFO*/#ifZEND_MODULE_API_NO>=20010901PHP_LAOSIJI_VERSION,/*扩展版本*/#endifSTANDARD_MODULE_PROPERTIES};#ifdefCOMPILE_DL_LAOSIJIZEND_GET_MODULE(laosiji)#endif参考简单扩展https://github.com/imlaosiji/...

最新推荐
猜你喜欢