国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

PHP編譯器BPC 7.3 發(fā)布,成功編譯ThinkPHP8

heguangyu5

BPC 是一個 PHP Native Compiler,可以將 PHP 源碼最終轉(zhuǎn)譯成 C 語言,然后編譯成動態(tài)鏈接庫或可執(zhí)行程序.

BPC 還內(nèi)置軟件授權(quán)機(jī)制,最終可實現(xiàn)源碼保護(hù)、軟件授權(quán)、二進(jìn)制打包三合一!

徹底解決 PHP 項目的交付問題.

How BPC Works

  1. 官網(wǎng) bpc.dev
  2. 安裝使用文檔

寫在前面:

  1. bpc 不是一個開源項目,項目歷史可以翻看之前的文章和帖子.
  2. ThinkPHP8的編譯只是一個可行性驗證,請勿用于生產(chǎn)環(huán)境.

1. 了解 ThinkPHP

之前就有網(wǎng)友提過能不能編譯ThinkPHP,我也翻看過幾次ThinkPHP的代碼,雖然ThinkPHP帶有測試用例,但是一眼看去很少,不清楚能覆蓋到多少功能點(diǎn).

再加上我自己從沒寫過ThinkPHP的項目,對ThinkPHP很陌生,所以一直沒有嘗試編譯.

由于php的動態(tài)性和bpc與php的高兼容特點(diǎn),bpc編譯通過不代表就沒問題了,如果有測試用例保障的話,通過運(yùn)行測試用例可以驗證編譯后的二進(jìn)制可執(zhí)行文件是否與原來的php等同.

2. 遷移 OurBlog 到 ThinkPHP

之前寫的一本關(guān)于PHPUnit的電子書《PHPUnit in Action --- The Easy Way》里有一個博客項目 OurBlog,雖然功能很簡單,但基本的CURD都涉及到了,測試也非常完整.

于是就想著把OurBlog遷移到ThinkPHP試一下,由于有測試保障,這個遷移應(yīng)該比較好做.

一番折騰之后,遷移成功了! 源碼見: bpc-thinkphp8-ourblog

3. BPC編譯: 理清依賴

在使用 composer 創(chuàng)建 ThinkPHP 項目時,可以看到一個ThinkPHP8項目有以下依賴:

league/mime-type-detection (1.15.0)
league/flysystem (2.5.0)

psr/container (2.0.2)
psr/http-message (1.1)
psr/simple-cache (3.0.0)
psr/log (3.0.0)

symfony/polyfill-mbstring (v1.29.0)
symfony/var-dumper (v7.1.1)

topthink/think-helper (v3.1.6)
topthink/think-orm (v3.0.20)
topthink/framework (v8.0.3)
topthink/think-filesystem (v2.0.2)
topthink/think-trace (v1.6)

進(jìn)一步地,跑通 OurBlog 測試用例, 只需要搞定3 個依賴就可以了:

  1. psr/simple-cache (3.0.0)
  2. topthink/think-helper (v3.1.6)
  3. topthink/think-orm (v3.0.20)

最后,ourblog的前端界面能正常運(yùn)行,不需要搞定所有依賴,只需要搞定下邊4個就行了:

  1. psr/container (2.0.2)
  2. psr/http-message (1.1)
  3. psr/log (3.0.0)
  4. topthink/framework (v8.0.3)

由于 topthink/framework 和 think-orm 里都包含了 think\Facadethink\Exception , 需要把 think-orm/stubs 獨(dú)立出來, 再加上 ourblog 項目本身,一共 9 個 repo, 見這里.

4. BPC編譯: 調(diào)整代碼

要想一行代碼不動就能編譯成功,幾乎是不可能的.

代碼調(diào)整主要集中在3個方面:

  1. 語法: bpc不支持的語法可以通過 phptobpc 做轉(zhuǎn)換, 轉(zhuǎn)換也不支持的,就需要手動調(diào)整代碼了.
  2. 判斷php代碼文件是否存在: bpc編譯后都是二進(jìn)制了,不能使用 is_file/is_dir/file_exists/glob 來判斷,要換用 bpc 自己的專有函數(shù).
  3. Reflection: bpc不支持Reflection,使用Reflection實現(xiàn)的功能要調(diào)整成bpc的方式.

代碼調(diào)整的細(xì)節(jié)可以查看每個repo的 commit 歷史.

5. 運(yùn)行

  1. 創(chuàng)建數(shù)據(jù)庫
  2. 運(yùn)行 tp8-ourblog-althttpd-ubuntu-24.04-amd64

詳見: bpc-thinkphp8-ourblog release v0.1

后邊可以出個視頻來演示一下整個編譯運(yùn)行的過程.

967 2 2
2個評論

heguangyu5

對于 workerman / webman 來說, BPC 7.3 帶來兩個好處:

  1. 可以引入 think-orm
  2. 之前webman里bpc不支持依賴注入,現(xiàn)在應(yīng)該可以實現(xiàn)了.
  • 暫無評論
Tinywan

支持

  • 暫無評論

heguangyu5

2250
積分
0
獲贊數(shù)
0
粉絲數(shù)
2022-11-24 加入
??