文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP拓展的实现手段有哪些

2023-06-29 17:06

关注

本文小编为大家详细介绍“PHP拓展的实现手段有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“PHP拓展的实现手段有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

关于 PHP 扩展的几种实现手段

php 原生扩展开发 c 语言,注:【ext_skel.php】脚本创建

zephir

php-cpp

php-x

cgo

等。。。不限上面几种方式。

围绕【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 mainimport "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 脚本代码

<?phpconst COUNT = 30;function calcFibonacci(int $i): int {    if ($i < 2) {        return $i;    }    return calcFibonacci($i - 1) + calcFibonacci($i - 2);}// CGO 速度$startTime = microtime(true);for($i = 1; $i <= COUNT; $i++) {    if($i != COUNT) {        go2php_print($i);    }else {        echo go2php_print($i)."\n";    }}$time = microtime(true) - $startTime;echo "CGO: {$time} 秒\n";//zephir 速度$startTime = microtime(true);for($i = 1; $i <= COUNT; $i++) {    if($i != COUNT) {        Lsz\Zimuge::calcFibonacci($i);    }else {        echo Lsz\Zimuge::calcFibonacci($i)."\n";    }}$time = microtime(true) - $startTime;echo "zephir: {$time} 秒\n";// PHP JIT 速度$startTime = microtime(true);for($i = 1; $i <= COUNT; $i++) {    if($i != COUNT) {        calcFibonacci($i);    }else {        echo calcFibonacci($i)."\n";    }}$time = microtime(true) - $startTime;echo "PHP: {$time} 秒\n";

不使用 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拓展的实现手段有哪些”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯