<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                BPC 是一個 PHP Native Compiler,可以將 PHP 源碼最終轉譯成 C 語言,然后編譯成動態鏈接庫或可執行程序. BPC 還內置軟件授權機制,最終可實現源碼保護、軟件授權、二進制打包三合一! 徹底解決 PHP 項目的交付問題. ![How BPC Works](https://bpc.dev/bpc.svg) 1. [官網 bpc.dev](https://bpc.dev/) 2. [安裝使用文檔](https://github.com/bob-php-compiler/bpc-release/wiki/01_Install) 寫在前面: 1. bpc 不是一個開源項目,項目歷史可以翻看之前的文章和帖子. 2. ThinkPHP8的編譯只是一個可行性驗證,請勿用于生產環境. ## 1\. 了解 ThinkPHP 之前就有網友提過能不能編譯ThinkPHP,我也翻看過幾次ThinkPHP的代碼,雖然ThinkPHP帶有測試用例,但是一眼看去很少,不清楚能覆蓋到多少功能點. 再加上我自己從沒寫過ThinkPHP的項目,對ThinkPHP很陌生,所以一直沒有嘗試編譯. 由于php的動態性和bpc與php的高兼容特點,bpc編譯通過不代表就沒問題了,如果有測試用例保障的話,通過運行測試用例可以驗證編譯后的二進制可執行文件是否與原來的php等同. ## 2\. 遷移 OurBlog 到 ThinkPHP 之前寫的一本關于PHPUnit的電子書《PHPUnit in Action --- The Easy Way》里有一個博客項目[OurBlog](https://github.com/heguangyu5/PHPUnit-in-Action-Code),雖然功能很簡單,但基本的CURD都涉及到了,測試也非常完整. 于是就想著把OurBlog遷移到ThinkPHP試一下,由于有測試保障,這個遷移應該比較好做. 一番折騰之后,遷移成功了! 源碼見:[bpc-thinkphp8-ourblog](https://github.com/heguangyu5/bpc-thinkphp8-ourblog) ## 3\. BPC編譯: 理清依賴 在使用 composer 創建 ThinkPHP 項目時,可以看到一個ThinkPHP8項目有以下依賴: ~~~php 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) ~~~ 進一步地,跑通 OurBlog 測試用例, 只需要搞定3 個依賴就可以了: 1. psr/simple-cache (3.0.0) 2. topthink/think-helper (v3.1.6) 3. topthink/think-orm (v3.0.20) 最后,ourblog的前端界面能正常運行,不需要搞定所有依賴,只需要搞定下邊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\Facade`和`think\Exception`, 需要把`think-orm/stubs`獨立出來, 再加上 ourblog 項目本身,[一共 9 個 repo, 見這里](https://github.com/stars/heguangyu5/lists/thinkphp8). ## 4\. BPC編譯: 調整代碼 要想一行代碼不動就能編譯成功,幾乎是不可能的. 代碼調整主要集中在3個方面: 1. 語法: bpc不支持的語法可以通過[phptobpc](https://github.com/bob-php-compiler/phptobpc)做轉換, 轉換也不支持的,就需要手動調整代碼了. 2. 判斷php代碼文件是否存在: bpc編譯后都是二進制了,不能使用`is_file/is_dir/file_exists/glob`來判斷,要換用 bpc 自己的專有函數. 3. Reflection: bpc不支持Reflection,使用Reflection實現的功能要調整成bpc的方式. 代碼調整的細節可以查看每個repo的 commit 歷史. ## 5\. 運行 1. 創建數據庫 2. 運行`tp8-ourblog-althttpd-ubuntu-24.04-amd64` 詳見:[bpc-thinkphp8-ourblog release v0.1](https://github.com/heguangyu5/bpc-thinkphp8-ourblog/releases/tag/v0.1) 后邊可以出個視頻來演示一下整個編譯運行的過程.
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看