PHP拓展的实现手段有哪些
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,本文小编为大家详细介绍"PHP拓展的实现手段有哪些",内容详细,步骤清晰,细节处理妥当,希望这篇"PHP拓展的实现手段有哪些"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。关
千家信息网最后更新 2025年02月02日PHP拓展的实现手段有哪些
本文小编为大家详细介绍"PHP拓展的实现手段有哪些",内容详细,步骤清晰,细节处理妥当,希望这篇"PHP拓展的实现手段有哪些"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
关于 PHP 扩展的几种实现手段
1.php 原生扩展开发 c 语言,注:【ext_skel.php】脚本创建
2.zephir
3.php-cpp
4.php-x
5.cgo
封装 zendapi 模式
CGO 嵌套 C 和 GO 代码,用 GO 去编译了 php 扩展骨架和 GO 的具体实现
等。。。不限上面几种方式。
围绕【zephir,cgo,PHP 开启 JIT】4 种模式下,通过斐波那契数列计算性能,来查看运行效果。
zephir 代码生成扩展
//Main 类final class Zimuge{ public static function calcFibonacci(int i){ if (i < 2) { return i; } return self::calcFibonacci(i - 1) + self::calcFibonacci(i - 2); }
编译安装zephir build
cgo 代码生成扩展
package main/*#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "php.h"#include "php_ini.h"#include "ext/standard/info.h"static int le_go2php;PHP_MINIT_FUNCTION(go2php){ return SUCCESS;}PHP_MSHUTDOWN_FUNCTION(go2php){ return SUCCESS;}PHP_RINIT_FUNCTION(go2php){ return SUCCESS;}PHP_RSHUTDOWN_FUNCTION(go2php){ return SUCCESS;}PHP_MINFO_FUNCTION(go2php){ php_info_print_table_start(); php_info_print_table_header(2, "go2php support", "enabled"); php_info_print_table_end();}PHP_FUNCTION(go2php_print){ zend_long a,b; ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_LONG(a) ZEND_PARSE_PARAMETERS_END(); b = calcFib(a); RETURN_LONG(b);}ZEND_BEGIN_ARG_INFO(null, 0)ZEND_END_ARG_INFO()const zend_function_entry go2php_functions[] = { PHP_FE(go2php_print, null) PHP_FE_END};zend_module_entry go2php_module_entry = { STANDARD_MODULE_HEADER, "go2php", go2php_functions, PHP_MINIT(go2php), PHP_MSHUTDOWN(go2php), PHP_RINIT(go2php), PHP_RSHUTDOWN(go2php), PHP_MINFO(go2php), "0.1.0", STANDARD_MODULE_PROPERTIES};#ifdef COMPILE_DL_GO2PHPZEND_GET_MODULE(go2php)#endif*/import "C"func main() {}
package mainimport "C"//export calcFibfunc calcFib(i int) int { if i < 2 { return i } return calcFib(i-1)+calcFib(i-2)}
编译&链接
CGO_CFLAGS="-g \-I`/root/download/php8/bin/php-config --include-dir` \-I`/root/download/php8/bin/php-config --include-dir`/main \-I`/root/download/php8/bin/php-config --include-dir`/TSRM \-I`/root/download/php8/bin/php-config --include-dir`/Zend \-I`/root/download/php8/bin/php-config --include-dir`/ext \-I`/root/download/php8/bin/php-config --include-dir`/ext/date/lib \-DHAVE_CONFIG_H" CGO_LDFLAGS="-Wl,--export-dynamic -Wl,--unresolved-symbols=ignore-all" go build -p 1 -gcflags "-l" -buildmode=c-shared -o go2php.so
测试用 php 脚本代码
不使用 PHP JIT 的情况下测试
php test.php->执行结果取一个平均832040CGO: 0.059875011444092 秒832040zephir: 8.5679790973663 秒832040PHP: 0.75995492935181 秒使用 PHP JIT 的情况下测试
php -dopcache.enable_cli=1 -dopcache.jit_buffer_size=100M test.php ->执行结果取一个平均832040CGO: 0.046900987625122 秒832040zephir: 5.5882248878479 秒832040PHP: 0.10621190071106 秒cgo 和 zephir 编译后的 so文件,通过php.ini 引入进来
执行测试脚本需要保证so正确读取进来。
命令 php -m 或者 php --ri xx.so 进行确认。
[PHP Modules]CorectypecurldatedomFFIfileinfofiltergdgo2phphashiconvjsonlibxmllszmbstringmysqlndopensslpcrePDOpdo_mysqlpdo_sqlitePharposixredisReflectionsessionSimpleXMLSPLsqlite3standardswooletokenizerxmlxmlreaderxmlwriteryafZend OPcachezephir_parserzimuge[Zend Modules]Zend OPcache使用PHP版本
php -vPHP 8.1.3 (cli) (built: Feb 27 2022 19:40:08) (NTS)Copyright (c) The PHP GroupZend Engine v4.1.3, Copyright (c) Zend Technologies with Zend OPcache v8.1.3, Copyright (c), by Zend Technologies读到这里,这篇"PHP拓展的实现手段有哪些"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
手段
代码
测试
编译
文章
脚本
速度
代码生成
内容
情况
模式
结果
生成
妥当
命令
思路
性能
效果
数列
文件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库原理1
服务器崩溃丢失信息事件
山东工业软件开发定制
数据库修改所有值
数据库轮询方案
云服务器秒杀是什么意思
怎么打开龙珠服务器
白银市软件开发公司排名
前置机服务器是啥
python软件开发文档
延庆区有名的软件开发诚信服务
数据库加字段不清库
网络安全揭示承诺书
科技互联网趋势
上海汇泽网络技术有限公司
sql 数据库备份
求简单的软件开发教程
西部世界云服务器
密码编码学与网络安全教材
网络技术毕业生自我鉴定
长宁区环保网络技术解决方案
华为存储服务器管理口是h几
画数据库表结构图
国家负责统筹网络安全工作
做软件开发的收入 知乎
上海市文明城市网络安全
怎么我的数据库类型
数据库实习工作项目
淮南网络安全考试scse培训
数据库磁盘性能优化