真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PHP拓展的實(shí)現(xiàn)手段有哪些

本文小編為大家詳細(xì)介紹“PHP拓展的實(shí)現(xiàn)手段有哪些”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“PHP拓展的實(shí)現(xiàn)手段有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,提供網(wǎng)站制作、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);可快速的進(jìn)行網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,是專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

關(guān)于 PHP 擴(kuò)展的幾種實(shí)現(xiàn)手段

1.php 原生擴(kuò)展開發(fā) c 語言,注:【ext_skel.php】腳本創(chuàng)建

2.zephir

3.php-cpp

4.php-x

5.cgo

  • 封裝 zendapi 模式

  • CGO 嵌套 C 和 GO 代碼,用 GO 去編譯了 php 擴(kuò)展骨架和 GO 的具體實(shí)現(xiàn)

等。。。不限上面幾種方式。

圍繞【zephir,cgo,PHP 開啟 JIT】4 種模式下,通過斐波那契數(shù)列計(jì)算性能,來查看運(yùn)行效果。

zephir 代碼生成擴(kuò)展

//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 代碼生成擴(kuò)展

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_GO2PHP
ZEND_GET_MODULE(go2php)
#endif
*/
import "C"
func main() {}
package main
import "C"
//export calcFib
func 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
->執(zhí)行結(jié)果取一個平均
832040
CGO: 0.059875011444092 秒
832040
zephir: 8.5679790973663 秒
832040
PHP: 0.75995492935181 秒

使用 PHP JIT 的情況下測試

php -dopcache.enable_cli=1 -dopcache.jit_buffer_size=100M test.php 
->執(zhí)行結(jié)果取一個平均
832040
CGO: 0.046900987625122 秒
832040
zephir: 5.5882248878479 秒
832040
PHP: 0.10621190071106 秒

cgo 和 zephir 編譯后的 so文件,通過php.ini 引入進(jìn)來

執(zhí)行測試腳本需要保證so正確讀取進(jìn)來。

命令 php -m 或者 php --ri xx.so 進(jìn)行確認(rèn)。

[PHP Modules]
Core
ctype
curl
date
dom
FFI
fileinfo
filter
gd
go2php
hash
iconv
json
libxml
lsz
mbstring
MySQLnd
openssl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
redis
Reflection
session
SimpleXML
SPL
sqlite3
standard
swoole
tokenizer
xml
xmlreader
xmlwriter
yaf
Zend OPcache
zephir_parser
zimuge
[Zend Modules]
Zend OPcache

使用PHP版本

php -v
PHP 8.1.3 (cli) (built: Feb 27 2022 19:40:08) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.3, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.3, Copyright (c), by Zend Technologies

讀到這里,這篇“PHP拓展的實(shí)現(xiàn)手段有哪些”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動手實(shí)踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享題目:PHP拓展的實(shí)現(xiàn)手段有哪些
網(wǎng)址分享:http://weahome.cn/article/ihpsos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部